0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

射频识别技术漫谈(22)——RC系列射频芯片的寄存器操作

阗笑 来源:魏道志 作者:魏道志 2023-10-17 10:14 次阅读

前面提到,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^6;  
    sbit   SCK_RCCHIP     = P2^4;  
    sbit   NSS_RCCHIP     = P3^5;  
    sbit   SI_RCCHIP      = P2^5;  
    sbit   SO_RCCHIP      = P2^6;  
    void RcSetReg(unsigned char RegAddr, unsigned char RegVal)  
    {  
    unsigned char idata i, ucAddr;  
    SCK_RCCHIP= 0;  
    NSS_RCCHIP = 0;  
    ucAddr = ((RegAddr< <1)&0x7E);  
    for(i=8;i >0;i--)  
     {  
        SI_RCCHIP  = ((ucAddr&0x80)==0x80);  
        SCK_RCCHIP= 1;  
        ucAddr < <= 1;  
        SCK_RCCHIP= 0;  
     }  
    for(i=8;i >0;i--)  
     {   
        SI_RCCHIP = ((RegVal&0x80)==0x80);  
        SCK_RCCHIP= 1;  
        RegVal < <= 1;  
        SCK_RCCHIP= 0;  
     }  
    NSS_RCCHIP = 1;  
    SCK_RCCHIP= 1;  
    }  
    unsigned char RcGetReg(unsigned char RegAddr)  
    {  
     unsigned char idata i, ucAddr;  
     unsigned char idata ucResult=0;  
     SCK_RCCHIP = 0;  
     NSS_RCCHIP = 0;  
     ucAddr = ((RegAddr< <1)&0x7E)|0x80;  
     for(i=8;i >0;i--)  
      {  
         SI_RCCHIP = ((ucAddr&0x80)==0x80);  
         SCK_RCCHIP= 1;  
         ucAddr < <= 1;  
         SCK_RCCHIP= 0;  
      }  
     for(i=8;i >0;i--)  
      {  
         SCK_RCCHIP= 1;  
         ucResult < <= 1;  
         ucResult|=(bit)SO_RCCHIP ;  
         SCK_RCCHIP= 0;  
      }  
     NSS_RCCHIP = 1;  
     SCK_RCCHIP= 1;   
     return ucResult;  
    }  


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

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • RFID
    +关注

    关注

    387

    文章

    6101

    浏览量

    237352
  • 寄存器
    +关注

    关注

    31

    文章

    5308

    浏览量

    119980
  • 射频识别
    +关注

    关注

    8

    文章

    576

    浏览量

    38910
  • RC
    RC
    +关注

    关注

    0

    文章

    225

    浏览量

    48755
  • 射频芯片
    +关注

    关注

    974

    文章

    406

    浏览量

    79441
收藏 人收藏

    评论

    相关推荐

    射频识别技术漫谈(29)——射频接口芯片TRF7960

    射频识别技术漫谈(29)——射频接口芯片TRF7960
    的头像 发表于 11-14 11:58 1295次阅读

    基于RC系列射频芯片的天线设计

    个人感觉使用RC系列射频芯片开发卡片读写,主要的关键点有两个,分别涉及硬件和软件。软件上的关键是如何正确设置
    发表于 07-12 08:34

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

    射频识别技术漫谈(1)——概念、分类
    的头像 发表于 10-09 10:51 993次阅读

    射频识别技术漫谈(3)——能量、调制

    射频识别技术漫谈
    的头像 发表于 10-09 10:54 826次阅读

    射频识别技术漫谈(5)——防冲突

    射频识别技术漫谈
    的头像 发表于 10-09 11:40 983次阅读

    射频识别技术漫谈(7)——ID卡

    射频识别技术漫谈
    的头像 发表于 10-09 15:35 1678次阅读
    <b class='flag-5'>射频</b><b class='flag-5'>识别</b><b class='flag-5'>技术</b><b class='flag-5'>漫谈</b>(7)——ID卡

    射频识别技术漫谈(8)——动物标签

    射频识别技术漫谈
    的头像 发表于 10-10 17:53 1090次阅读
    <b class='flag-5'>射频</b><b class='flag-5'>识别</b><b class='flag-5'>技术</b><b class='flag-5'>漫谈</b>(8)——动物标签

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

    射频识别技术漫谈(11)——Mifare系列卡的共性
    的头像 发表于 10-11 15:38 1883次阅读

    射频识别技术漫谈(16)——Mifare UltraLight

    射频识别技术漫谈(16)——Mifare UltraLight
    的头像 发表于 10-16 16:13 2696次阅读
    <b class='flag-5'>射频</b><b class='flag-5'>识别</b><b class='flag-5'>技术</b><b class='flag-5'>漫谈</b>(16)——Mifare UltraLight

    射频识别技术漫谈(18)——Mifare Desfire

    射频识别技术漫谈(18)——Mifare Desfire
    的头像 发表于 10-16 16:34 1844次阅读
    <b class='flag-5'>射频</b><b class='flag-5'>识别</b><b class='flag-5'>技术</b><b class='flag-5'>漫谈</b>(18)——Mifare Desfire

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

    射频识别技术漫谈(20)——RC系列射频接口
    的头像 发表于 10-16 17:09 2147次阅读
    <b class='flag-5'>射频</b><b class='flag-5'>识别</b><b class='flag-5'>技术</b><b class='flag-5'>漫谈</b>(20)——<b class='flag-5'>RC</b><b class='flag-5'>系列</b><b class='flag-5'>射频</b>接口<b class='flag-5'>芯片</b>

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

    射频识别技术漫谈(21)——RC系列射频
    的头像 发表于 10-17 10:10 1306次阅读
    <b class='flag-5'>射频</b><b class='flag-5'>识别</b><b class='flag-5'>技术</b><b class='flag-5'>漫谈</b>(21)——<b class='flag-5'>RC</b><b class='flag-5'>系列</b><b class='flag-5'>射频</b><b class='flag-5'>芯片</b>的天线设计

    射频识别技术漫谈(25)——Felica简介

    射频识别技术漫谈(25)——Felica简介
    的头像 发表于 10-20 11:10 3303次阅读
    <b class='flag-5'>射频</b><b class='flag-5'>识别</b><b class='flag-5'>技术</b><b class='flag-5'>漫谈</b>(25)——Felica简介

    射频识别技术漫谈(30)——PN512的寄存器设置

    射频识别技术漫谈(30)——PN512的寄存器设置
    的头像 发表于 11-14 14:09 717次阅读

    射频识别技术漫谈(31)——射频卡的复位时间

    射频识别技术漫谈(31)——射频卡的复位时间
    的头像 发表于 11-14 14:14 586次阅读