新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 基于RC522的读卡器系统设计

基于RC522的读卡器系统设计

作者:时间:2010-09-29来源:网络收藏

本文引用地址:http://www.eepw.com.cn/article/173194.htm

  根据和MIFARE卡问传送的控制流数据的不同,通信过程中可能会出现不同的状态。对各种状态须作不同处理,这正是软件开发的难度所在。下面给出命令集中2个最基本命令(Tranceive和MFAuthe-nt)执行过程中可能遇到的通信状态及处理。这两个命令分别实现向MIFARE卡发送/接收数据和加密认证功能。实际上,通过它们即可完成对MIFARE卡的所有操作,包括Request、Anticollision、Select、READ、WRITE等。

  2.1 命令集的实现

  RC522主要的状态指示寄存器包括ComIrqReg、Er-rorReg、Status2Reg和FIFOLevelReg等。软件处理的思路:通过ComIrgReg得到RC522内部中断状态;由中断判断RC522与MIFARE卡的通信流程信息,从而决定是否进行下一流程处理;若中断指示有错误发生,则需进一步读取ErrorReg的内容,据此返回错误字。

  2.1.1 Tranceive命令

  Tranceive命令的具体执行过程;读取RC522 FIFO中的所有数据,经基带编码和数字载波调制后通过通信接口以射频形式发送到MIFARE卡;发送完毕后通过通信接口检测有无MIFARE卡发送的射频信号回应,并将收到的信号解调、解码后放入FIFO中。分析以上Ttanceive命令执行过程,可以得到处理该命令的算法流程图,如图4所示。

  

  为了处理MIIFARE卡在产生的电磁场中激励后,未完成处理义从激励场中拿开的情况,软件中启用了RC522芯片内部的定时器。若超过设定的时间未得到卡片应答,则中止与卡的通信,返回“卡无反应”的错误信息。

  从图4中可以看出Tranceive命令的核心处理方法:根据相关通信状态指示寄存器的内容返回各种错误状态字,若有位冲突错误,则进一步返回位冲突位置。Tranceive命令不处理面向比特的帧,这种帧只可能在MIFARE卡防冲突循环中出现。为了保持Tranceive命令对各种MI-FARE卡命令的普适性,该命令只完成帧的发送和接收,不对帧信息作处理,所有位冲突处理留在函数外进行。

  需要注意的是,Tranceive命令不能自动中止,在任何情况下从该命令返回时必须先执行IDLE指令使RC522转入空闲态。

  2.1.2 MFAuthent命令

  RC522简化了与MIFARE卡的加密认证操作,用一个MFAuthent命令代替了原来RC500需要的Authentl和Authent2两条命令。MFAuthent命令执行的最终目的在于开启RC522的加密认证单元。该指令执行成功后,RC522芯片与MIFARE卡间的通信信息将首先加密,然后再通过射频接口发送。从本质上讲,MFAuthent是一条变相的Tranceive命令,其算法流程图与图4一致。但RC522芯片内部已经对通信过程中的各种通信状态作了相应处理,且该命令执行完后自动中止,因此用户只须检测定时器状态和错误寄存器状态来判断执行情况。实际上,MFAuthent只可能有一种错误状态(RC522与MI-FARE卡通信帧格式错误),此时该命令不能打开加密认证单元,用户必须重新执行认证操作。

  MFAuthent执行过程中RC522将依次从FIFO中读取1字节认证模式、l字节要认证的E2PROM块号、6字节密钥和4字节射频卡UID号等信息,在命令执行前必须保证这12字节数据完整地保存在FIFO中。认证模式有A密钥认证和B密钥认证两种,一般选用A密钥认证。

  一次MFAutllent认证只能保证对MIFARE卡的一个扇区中的4个数据块解密,若要操作其他扇区的数据用户还须另外启动对该扇区的认证操作。

  2.2 MIFARE卡操作指令

  对MIFARE卡常用的操作指令包括查询、防冲突、选卡、读/写E2PROM块等。其中,防冲突指令是14443A协议的精华部分,实现难度较大。下面将重点介绍防冲突算法的软件实现方法。

  2.2.1 防冲突指令

  14443A标准定义的防冲突算法本质上是一种信道时分复用的信道复用方法。在某一时刻若多个射频卡占用射频信道与通信,则将会检测到比特流的冲突位置;然后重新启动另一次与射频卡的通信过程,在过程中将冲突位置上的比特值置为确定值(一般为1)后展开二进制搜索,直到投有冲突错误被检测到为止。MIFARE卡内有4字节的全球惟一序列号UID,而RC522防冲突处理的目的就在于最终确定MIFARE卡的UID。14443A标准的防冲突指令格式如下:

  

  其中:命令代码“93”代表要处理的射频卡UID只有4字节;NVM表示此次防冲突命令的UID域中正确的比特数;BCC字节只有在NVM为70(即UID的4字节都正确)时才存在,它表示此时整个UID都被识别,防冲突流程结束。

  防冲突算法流程图如图5所示。

  



评论


相关推荐

技术专区

关闭