解析基于MF RC500的射频识别读写器设计
时间:2009-09-17 18:38:26点击:次
射频识别技术(radio frequncy identification)开发的非接触式IC识别器,在系统寿命、防监听、防解密等性能上具有很大的优势,利用MCU 89C52、MF RC500、、Mifare卡等构建非接触式IC读写器,并在该读写器基础上能很容易地开发出适用于各方面的自动识别系统。
1 MF RC500介绍
MF RC500是应用于13.56MHz非接触式通信中高集成读卡IC系列中的一员。该读卡IC系列利用先进的调制和解调概念,完全集成了在13.56MHz下所有类型的被动非接触式通信方式和协议。MF RC500支持ISO14443A所有的层,内部的发送器部分不需要增加有源电路就能够直接驱动近操作距离的天线(可达100mm);接收器部分提供一个坚固而有效的解调和解码电路,用于ISO14443兼容的应答器信号;数字部分处理ISO14443A帧和错误检测(奇偶&CRC)。此外,它还支持快速CRYPTO1加密算法,用于验证Mifare系列产品。方便的并行接口可直接连接到任何8位微处理器,给读卡器/终端的设计提供了极大的灵活性。
2 系统组成
从图1可以看出,系统主要由MCU、时钟芯片、MFRC500、液晶屏、看门狗以及485通信模块组成。系统的工作方式主要是,先由MCU控制MF RC500驱动天线对Mifare卡,也就是应答器(PICC),进行读写操作。然后,根据所得的数据对其它接口器件,如液晶屏、EEPROM、时钟芯片等,进行响应操作。最后,与PC机之间进行通信,把数据传给上位机。
MCU采用89C52,是因为89C52开发简单,运行稳定。EEPROM采用24C256,用于存储系统的数据。24C256是串口操作方式,是一种性价比较高的存储芯片。液晶屏采用带字库的ST7920,是因为它是并口操作方式的,操作方便。时钟芯片采用DS12C887。DS12C887是Dallas公司生产的新型产品,内置电池,可连续使用10年,可以方便记录事件的发生时间。为了防止系统“死机”,使用x5045作为看门狗。X5045是串口工作方式,内置EEPROM,可用来存储一些系统参数。与上位机的通信采用RS-485通信模块,通信距离可以达到1000m左右。
整个系统由24V电源供电,再由稳压模块7805稳压成5V的电源。由于7805的工作热量很高,故在7805上安置一个散热片。
3 系统工作原理
系统数据存储在无源Mifare卡,也就是PICC中。从图2可以看出,PCD的主要任务是传输能量给PICC,并建立与之的通信。PICC是由一个电子数据作载体,通常由单个微型芯片以及用作天线的大面积线圈等组成;而PCD产生高频的强电磁场,这种磁场穿过线圈横截面和线圈周围的空间。因为MF RC500提供的频率为13.56MHz,所以其波长比PCD的天线和PICC之间的距离大好多倍,可以把PICC到天线之间的电磁场当作简单的交变磁场来对待。PCD天线线圈发射磁场的一小部分磁力线穿过PICC的天线线圈,接着PICC的天线线圈和电容器C构成振荡回路,调频到PCD的发射频率。回路的谐振使PICC线圈的电压达到最大值,将其整流后作为数据载体(微型芯片)的电源。PICC启动之后 ,可与PCD之间进行数据通信。
如上所述可以看出,PCD的性能与天线的参数有着直接的关系。在对天线的性能进行优化之后,PCD的读卡距离可以达到10cm。
4 PCD的天线设计
由于MF RC500的频率是13.56MHz,属于短波段,因此可以采用小环天线。小环天线有方型、圆形、椭圆型、三角型等,本系统采用方型天线。天线的最大几何尺寸同工作波长之间没有一个严格的界限,一般定义为:
L/λ≤1/(2π) (1)
式(1)中,L是天线的最大尺寸,λ是工作波长。对于13.6MHz的系统来说,天线的最大尺寸在50cm左右。
在天线设计中,品质因数Q是一个非常重要的参数。对于电感耦合式射频识别系统的PCD天线来说,较高品质因数的值会使天线线圈中的电流强度大些,由此改善对PICC的功率传送。品质因数的计算公式为:
Q=(2πf0·Lcoil)/Rcoil (2)
式(2)中的f0是工作频率,Lcoil是天线的尺寸,Rcoil是天线的半径。通过品质因数可以很容易计算出天线的带宽:
B=f0/Q (3)
从式(3)中可以看出,天线的传输带宽与品质因数成反比关系。因此,过高的品质因数会导致带宽缩小。从而减弱PCD的调制边带,会导致PCD无法与卡通信。一般系统的最佳品质因数为10~30,最大值不能超过60。
5 MF RC500与MCU 89C52的部分接口电路
图3为MF RC500与MCU的接口原理。由图3可以看出,本系统采用中断(INT1)工作模式,即MCU利用MFRC500提供中断信息对其进行控制。另外,根据系统的需要,可以采用查询方式对MF RC500进行操作。
6 对Mifarel卡操作流程
整个系统的工作由对Mifare卡操作和系统后台处理两大部分组成。由于篇幅有限,本文只介绍对Mifare卡操作流程。Mifare卡的操作可以分为以下几项。
(1)复位请求
当一张Mifare卡片处在卡处读写器的天线的工作范围之内时,程序员控制读写器向卡片发出REQUEST all(或REQUEST std)命令。卡片的ATR将启动,将卡片Block 0中的卡片类型(TagType)号共2个字节传送给读写器,建立卡片与读写器的第一步通信联络。
如果不进行得位请求操作,读写器对卡片的其它操作将不会进行。
(2)反碰撞操作
如果有多张Mifare卡片处在卡片读写器的天线的工作范围之内时,PCD将首先与每一张卡片进行通信,取得每一张卡片的系列号。由于每一张Mifare卡片都具有其唯一的序列号,决不会相同,因此PCD根据卡片的序列号来保证一次只对一张卡操作。该操作PCD得到PICC的返回值为卡的序列号。
(3)卡选择操作
完成了上述二个步骤之后,PCD必须对卡片进行选择操作。执行操作后,返回卡上的SIZE字节。
(4)认证操作
经过上述三个步骤,在确认已经选择了一张卡片时,PCD在对卡进行读写操作之前,必须对卡片上已经设置的密码进行认证。如果匹配,才允许进一步的读写操作。
(5)读写操作
对卡的最后操作是读、写、增值、减值、存储和传送等操作。
7 读卡程序
根据上面的流程,采用基于Keil C的C语言进行编程,程序如下:
char M500Reset(void)
{ char status;
RC500RST=0; //RC500在RSTPD脚由高变低的时候复位
delay_1ms(25); //注意延时的长度,本系统的晶振频率是11.0592MHz
RC500RST=1;
delay_50us(200);
RC500RST=0;
delay_50us(50);
.
.
.
return status;
}
char M500Config(void)//对RC500的寄存器进行初始化
//RC500发送请求。req_code是请求模式,一共有request all和Request std两种模式。Request all指令是非连续性的读卡指令,只读一次。但有个例外,当某一次Request all指令读卡片失败时,例如,卡片没能通过密码认证或其它原因而出错时,Request all指令将连续地读卡,直到读卡成功才进入非连续性的读卡模式。Request std指令的使用和Request all指令刚巧相反。Request std指令是连续性的读卡指令。当某一张卡片在MCM之天线的有效的工作范围(距离)内,Request std指令在成功地读取这一张卡片之后,进入MCM对卡片的其它操作。如果其它操作完成之后 ,程序员又将MCM进入Request std指令操作,则Request std指令将连续地再次进行读卡操作,而不管这些片卡是否被拿卡。只要有一张卡片进入MCM之天线的有效的工作范围(范围)内,Request std指令将始终连续地再次进行读卡操作。对于Mifare1卡,该函数反回值为0004H。
char M500PiccCascAnticoll(unsigned char bcnt,unsigned
char *snr) //反碰撞函数,得到一张卡的序列号
//存入snr中
char M500PiccCascSelect(unsigned char *snr,unsigned char *sak) //选中snr指定的卡,对于Mifarel卡返回值为0008H,值存入sak中
char M500PiccAuthKey(unsigned char auth_mode,unsigned char *snr,unsigned char *keys,unsigned char block)
//这是三轮认证函数,整个过程包括:先将所要访问的区密码加密(如区0的初始密码为6个FFH),再将加密后的密码通过Loadkey存入MF RC500的Key缓存中,接着进行认证。
Char M500PiccRead(unsigned char addr,unsigned char *_data) //最后读卡,读到的数据存入_data中