MFRC500采用寄存器写数据和写命令的形式来控制卡片数据的读和写。大概有以下步骤:
① 请求之应答。Answer to Request(ATR) . Mifare卡片处在天线范围内时,读写器向卡发出REQUEST all(或REQUEST std)命令后,卡片ATR启动,将卡片Block0的卡片类型(TagType)号共2字节传送到读写器,这样建立第一步联系。卡片返回数据 0004H。
② AntiCollision模块。防止卡片重叠,当多张卡片一起放入天线范围时,AntiCollision模块的防重叠功能将被启动。MFRC500将与每张卡片进行通信,取得每张卡的序列号。由于每张Mifarel卡片都具有唯一的序列号,不会相同,因此MFRC500可以通过序列号来区别,区分选中的卡片。AntiCollision模块启动时,卡片读写器将得到卡片的序列号(Serial Number)。序列号存储在卡片的Block0中,共有5字节(实际用的是4字节,另一个字节为序列号的校验字节)。返回值为卡片序列号。
③ Select Application模块,主要用于卡片选择。当卡片与读写器完成了上述2个步骤,读写器要对卡片读写操作,必须对卡片进行“Select”操作,使卡片真正被选中。被选中的卡片将卡片上存储在Block 0中的卡片容量“Size”字节传送到读写器。当读写器收到这一字节后,将明确对卡进行深入操作。读写器收到的字节可能是88H。
④ Authentication&Access Control模块,认证及存取模块。在确认了上述3个步骤后,确认已经选择了一张卡后,在对卡进行读写之前,必须对其进行验证。如果匹配,则允许进行下一步的Read/Write操作。Mifare 1卡片有16个扇区,每个扇区都可分别设置各自的密码,互不干涉,采用三重认证方式。
做完上述所要求的步骤就可以对卡片进行读写了(以上步骤参看图3便一目了然)。在这个电路中,天线的设计和寄存器操作是值得一提的,也是 MFRC500的难点所在。MFRC500的这种卡片安全性很高,不大可能破解,所以用于电能表是很安全的。RFID读卡程序顺序如下:
char PcdReset()//复位
char PcdConfig()//配置
void Init_reg()//初始化寄存器
char Picc_Reguest(unsigned char cmd ,unsigned char snr_num[])//发送请求到卡
char Picc_SelectCard(unsigned char cmd ,unsigned char snr_cardsnr[]);//选择卡
char Picc_Anticoll(unsigned char cmd ,unsigned char snr_num[])//防冲突
char Picc_Auth(unsigned char data block,unsigned char data secret_key)//认证
char Picc_Read(unsigned char data addr,unsigned char data dataum);//读数据
char Picc_Write(unsigned char data addr,unsigned char data content);//写数据到卡

图3 RFID程序操作流程
结语
完成了硬件的设计后,主要就是如何协调各个子程序的工作了,在这里采取中断方式来处理各种模块。本课题已经完成第1版的设计,且运行良好。