前面提到,RC系列内部64个寄存器的正确操作是软件编写的关键。正确设置寄存器首先要做到与寄存器正确通信,其次是要对寄存器写入正确的值。

RC系列射频芯片与微控制器的接口有并口和SPI接口两种类型。显然,并口通讯速度快,需要占用的微控制器I/O多,SPI通讯速度慢,但需要的微控制器I/O口少。这里需要特别说明的是,速度的快慢仅体现在控制单元与RC系类芯片本身的通讯速率上,而不影响芯片与标签或卡片的通讯速度,芯片与标签或卡片的通讯速度是由国际标准规定的,任何芯片都必须遵守国际标准。

并口方式下RC系列芯片的D0-D7直接挂在控制单元的数据总线上,NWR、NRD、ALE、IRQ分别接控制单元对应的写使能、读使能、地址使能、外中断引脚。工作时RC系列的64个寄存器直接映射为控制单元的外部RAM空间。控制单元向RC系列写入数据和命令后,射频芯片执行的结果通过IRQ引脚向控制单元发起中断,控制单元在中断程序中处理射频芯片的响应。

一、并口总线方式

比如使用51单片机作为控制单元,使用总线方式,P2.7作为RC系列芯片的片选,使用Keil C51编程,RC系列芯片映射为外部存储单元的方式有两种常用方法:

1.使用XBYTE宏

代码如下:

    #define RcBaseAddr 0x7F00  

    #define RegFIFOData      XBYTE[RcBaseAddr + 0x02] 

    RegFIFOData = i;   

    i = RegFIFOData ;  

第一行定义RC芯片的映射基地址;第二行定义了芯片寄存器地址,此处以FIFO数据寄存器为例;后两行是对寄存器的读写实例。

2.不使用XBYTE宏

可以程序中软件定义一个指向RC芯片基地址的指针代替XBYTE宏,代码如下:

    unsigned char xdata ini _at_ 0x7F00;
    unsigned char xdata *GpBase = &ini;  

    #define ReadRawIO(addr) (*(GpBase + addr))
    #define WriteRawIO(addr,value)  (*((GpBase) + (addr)) = (value))

    #define     RegFIFOData           0x02    

    WriteRawIO(RegFIFOData,i); 

    i = ReadRawIO(RegFIFOData);

第一、二行定义一个指向RC芯片的映射基地址的指针GpBase;第三、四行定义了实现读写功能的宏;第五行定义芯片寄存器地址,此处以FIFO数据寄存器为例;最后两行为对寄存器的读写实例。

以上两种方法实质上没有什么区别,看一下XBYTE的宏定义就一目了然了:

    #define XBYTE ((unsigned char volatile xdata *) 0)

可见 XBYTE只是一个指向外部RAM 0地址的修饰,帮我们把操作指向外部RAM而已。

上面的方法对P2口有影响,在读写RC系列芯片寄存器时P2口总是输出0x7f,解决的方法是使用PBYTE或pdata,改为页寻址后读写RC系列芯片寄存器时P2口将不会变化,当然这个时候RC系列芯片的片选需要手工操作。

二、SPI通讯方式

在SPI通讯方式下,可以使用以下代码实现寄存器读写。

   sbit   RST_RCCHIP     = P3^;
    sbit   SCK_RCCHIP     = P2^;
    sbit   NSS_RCCHIP     = P3^;
    sbit   SI_RCCHIP      = P2^;
    sbit   SO_RCCHIP      = P2^;
    void RcSetReg(unsigned char RegAddr, unsigned char RegVal)
    {
    unsigned char idata i, ucAddr;
    SCK_RCCHIP= ;
    NSS_RCCHIP = ;
    ucAddr = ((RegAddr<<)&0x7E);
    ;i>;i--)
     {
        SI_RCCHIP  = ((ucAddr&0x80)==0x80);
        SCK_RCCHIP= ;
        ucAddr <<= ;
        SCK_RCCHIP= ;
     }
    ;i>;i--)
     {
        SI_RCCHIP = ((RegVal&0x80)==0x80);
        SCK_RCCHIP= ;
        RegVal <<= ;
        SCK_RCCHIP= ;
     }
    NSS_RCCHIP = ;
    SCK_RCCHIP= ;
    }
    unsigned char RcGetReg(unsigned char RegAddr)
    {
     unsigned char idata i, ucAddr;
     unsigned ;
     SCK_RCCHIP = ;
     NSS_RCCHIP = ;
     ucAddr = ((RegAddr<<)&0x7E)|0x80;
     ;i>;i--)
      {
         SI_RCCHIP = ((ucAddr&0x80)==0x80);
         SCK_RCCHIP= ;
         ucAddr <<= ;
         SCK_RCCHIP= ;
      }
     ;i>;i--)
      {
         SCK_RCCHIP= ;
         ucResult <<= ;
         ucResult|=(bit)SO_RCCHIP ;
         SCK_RCCHIP= ;
      }
     NSS_RCCHIP = ;
     SCK_RCCHIP= ;
     return ucResult;
    }

  为了促销产品,集成电路芯片的生产厂家通常都会提供产品的参考电路和参考代码。这些参考电路和参考代码一般都能支持芯片正常工作,RC系列射频芯片也不例外。使用参考电路和参考代码虽然可以实现对卡片或标签的正常读写,但卡片或标签的读写距离往往很难达到最佳。硬件上微调天线电路的一些元件参数,配合软件上调节12H和13H寄存器的值,通常可以达到产品的设计要求。

射频识别技术漫谈(22)——RC系列射频芯片的寄存器操作的更多相关文章

  1. 射频识别技术漫谈(21)——RC系列射频芯片的天线设计

    个人感觉使用RC系列射频芯片开发卡片读写器,主要的关键点有两个,分别涉及硬件和软件.软件上的关键是如何正确设置RC系列射频芯片内部的64个寄存器,硬件上的关键则是RC系列射频芯片的天线设计.天线提供了 ...

  2. 射频识别技术漫谈(20)——RC系列射频接口芯片

    目前基于13.56MHz的射频识别技术主要有ISO14443A.ISO14443B.ISO15693和FELICA技术.针对13.56MHz的射频识别技术,NXP开发了一系列名字以RC(Radio C ...

  3. 射频识别技术漫谈(11)——Mifare系列卡的共性【worldsing笔记】

    Mifare是NXP公司生产的一系列遵守ISO14443A标准的射频卡,包Mifare S50.Mifare S70.Mifare UltraLight.Mifare Pro.Mifare Desfi ...

  4. 射频识别技术漫谈(11)——Mifare系列卡的共性

    Mifare是NXP公司生产的一系列遵守ISO14443A标准的射频卡,包Mifare S50.Mifare S70.Mifare UltraLight.Mifare Pro.Mifare Desfi ...

  5. 射频识别技术漫谈(10)——识别号的格式变化【worldsing笔记】

    从事RDID行业的朋友经常会遇到这样的情况,同一张ID卡,在不同厂家生产的读卡器上读出的识别号完全不一样,有时甚至差之千里.ID卡的识别号一般是在出厂时被固化在卡片的ROM里,本身是不会改变的,问题出 ...

  6. 射频识别技术漫谈(6)——通讯协议概述【worldsing笔记】

    通讯协议是通讯的双方或多方在交流时遵守的规矩,包括谁先发起通讯,先交流什么,后交流什么,一方如何问,另一方如何答等.在这里通迅的双方指的是读写器和卡片. 首先是谁先发起通讯,很显然有两种,读写器先发言 ...

  7. 射频识别技术漫谈(1)——概念、分类

    现代社会智能卡已经渗透到生活的方方面面,公交卡.考勤卡.身份证.手机卡等等数不胜数.    智能卡按使用时是否和读卡器接触可分为接触式智能卡和非接触式智能卡,接触式智能卡上有6-8个触点,使用时插在卡 ...

  8. 射频识别技术漫谈(4)——数据编码【worldsing 笔记】

    前已述及,射频识别技术中的调制方法一般使用调幅(AM),也就是将有用信号调制在载波的幅度上传送出去.这里的"有用信号"指用高低电平表示的数据"0"或" ...

  9. 射频识别技术漫谈(3)——能量、调制【worldsing 笔记】

    无源和免接触是非接触式IC卡相对于接触式IC卡的两大特点.无源是指卡片上没有电源,免接触是指对卡片的读写操作不必和读写器接触.非接触式智能卡也是IC卡,而卡上的IC即集成电路工作时肯定是需要电源的,卡 ...

随机推荐

  1. 通过 CsvListWriter 读写.csv文件辅助类

    package cn.gov.cnis.db; import java.io.File; import java.io.FileReader; import java.io.FileWriter; i ...

  2. JavaScript之Style属性学习

    当CSS使用伪类开始侵入DOM和JavaSCript所控制着的行为层时,DOM和JavaScript也使用他们的一系列样式去控制表现层,这篇随笔主要说的就是利用JavaScript去控制元素的表现形式 ...

  3. 2048小游戏(C语言版)

    #include <climits> #include <cstdio> #include <cstring> #include <stack> #in ...

  4. 【图像配准】基于灰度的模板匹配算法(一):MAD、SAD、SSD、MSD、NCC、SSDA、SATD算法

    简介: 本文主要介绍几种基于灰度的图像匹配算法:平均绝对差算法(MAD).绝对误差和算法(SAD).误差平方和算法(SSD).平均误差平方和算法(MSD).归一化积相关算法(NCC).序贯相似性检测算 ...

  5. 浅谈SpringMVC(一)

    一.SpringMVC引言 Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面.Spring 框架提供了构建 Web 应用程序的全功能 MV ...

  6. javaWeb项目带红色感叹号问题原因

    自建Userlibrary 中库中含有非.jar 文件.

  7. 搭建单节点Hadoop应用环境

    虚拟机: VirtualBox 5 Server操作系统: Ubuntu Server 14.04.3 LTS 如果对虚拟机空间和性能不做考虑, 且不习惯用Linux命令, 你也可以使用Ubuntu ...

  8. VUE中的v-if与v-show

    1.共同点 都是动态显示DOM元素 2.区别 (1)手段:v-if是动态的向DOM树内添加或者删除DOM元素:v-show是通过设置DOM元素的display样式属性控制显隐: (2)编译过程:v-i ...

  9. 服务启动项 Start类型详解

    注册表的服务启动项 Start类型详解 HKLM\SYSTEM\CurrentControlSet\services\ 下的服务项.不论有没有在services.msc服务管理控制台中显示,在注册表中 ...

  10. qt5集成libcurl实现tftp和ftp的方法一:搭建环境(五篇文章)

    最近使用QT5做一个软件,要求实现tftp和ftp文件传输,使用QT5开发好UI界面等功能,突然发现QT5不直接提供tftp和ftp支持,无奈之下只好找第三方库来间接实现,根据网友的介绍,libcur ...