微波EDA网,见证研发工程师的成长!
首页 > 微波射频 > 射频工程师文库 > 基于RC522的读卡器设计

基于RC522的读卡器设计

时间:08-29 来源:维库开发网 点击:

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所示。

\

NVM初始值为20,表示该命令只含有2个字节,即"93+20",不含UID数据,MIFARE卡须返回全部UID字节作为响应。若返回的UID 数据有位冲突的情况发生,则根据冲突位置更新NVM值。可知在搜索循环中,随着UID已知比特数的加入,NVM不断增加,直到70为止。它表示除了 "93+70"两个命令字节外,还有UID0~UID3和BCC 5个UID数据字节。此时命令字节共有7个,防冲突命令转变为卡片选择命令。

防冲突流程中若遇到须发送和接收面向比特的帧的情况,则必须预先设置通信控制寄存器BitFramingReg。该寄存器可指明发送帧中最后一个字节和接收帧第一个字节中不完整的比特的位数。

2.2.2 读卡和写卡指令

14443A协议中并没有具体规定对射频卡的读写操作方式,故对每种卡的读写操作都必须考虑该卡的存储区域组织形式和应答形式。MIFARE卡内部存储器是由E2PROM组成的,共划分为16个扇区,每个扇区4个块,每块16字节。对E2PROM的读写都以块为单位进行,即每次读/写16字节。

以写卡指令为例,MIFARE卡要求有两步握手,指令格式分别如下所述。

Setp A:查询块状态。

\

若块准备好,则MIFARE卡返回4比特应答。若值为1010,则可进行下一步操作;若值非1010,则表示块未准备好,必须等待直至块准备好为止。

Step B:写数据。

\

若写入成功,则MIFARE卡返回4比特应答,值仍为1010;若非lOl0,则表示写入失败。

读卡指令格式如下:

\

若执行成功,则MIFARE卡返回18字节应答比特。需要注意的是,其中只有16字节是读取的块数据,另外2个字节为填充字节。若字节数不为18,则可判断读卡操作错误。

MIFARE卡数据加密时以扇区为单位,一次加密认证仅能操作一个扇区的数据。这为用户实现"一卡通"功能提供了便利,用户可在不同的扇区内采用不同加密方式互不干扰地存放各种目的应用数据。实际生活中常见的一种应用是电子钱包,对卡的写操作须按照一定的格式进行。一个块的数据组成如下:

\

注意:address值无意义,但value值写入时必须在4~7字节中存入取反值。

2.3 读卡器总体软件设计

读卡器的软件设计思路是利用RC522的Tranceive命令作为标准函数,通过调用此函数实现MIFARE卡操作指令。MIFARE卡的操作流 程如图6所示,其要点是将操作完成的卡转入休眠态,递减可能发生冲突的卡片数目直至所有卡片操作完毕,此时防冲突函数无卡片应答。

RC522芯片在每次使用前都必须复位,除了在复位引脚NRSTPD输入从低电平至高电平的跳变沿外,

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top