本系统选用具有公共读写选通和挂钩功能的MCU连接方式,图6为MF RC500与MCU的接口原理。由图中可以看出,本系统采用中断(INT1)工作模式,即MCU利用MFRC500提供中断信息对其进行控制。另外,根据系统的需要,可以采用查询方式对MF RC500进行操作。
4系统软件设计
软件设计主要包括对MF RC500进行初始化、接收上位计算机的指令、控制MF RC500,并且把MF RC500的状态信息反馈给计算机。程序流程如图7所示。
(1) 初始化并行接口
首先读Command 寄存器直到Command的6位值为00H,内部初始化阶段此时结束,MF RC500准备接收控制;将80H 写入Page寄存器以初始化微处理器接口;读Command寄存器,如果该值为00H则微处理器接口初始化成功;在接口初始化之后通过将0X00 写入页寄存器,激活线性地址模式。这个过程可以用以下代码表示:
do{PReset=1; Delay(10); PReset=0;} // 给复位脉冲
while (ReadRC(RegPage) != 0x80);
do{ WriteRC(RegPage,0x0);}
while(ReadRC(RegCommand) != 0x00);
if (ReadRC(RegCommand) != 0x00)
status = MI_INTERFACEERR;//接口初始化错误
else
status = 0; //接口初始化成功
(2) 对Mifare1卡的操作
MCU对Mifare1卡操作的命令主要有空操作、装载密码、验证密码、读卡、写卡和关卡等。无论哪种操作都必须先把命令代码写入到Command寄存器,比如执行验证密码则需要执行WriteRC(RegCommand,0x0c)命令。
从操作流程上,可以把Mifare1卡的操作分为以下几项:
复位请求:当一张Mifare1卡处在读写器天线的工作范围之内时,读写器向卡发出REQUEST all(或REQUEST std)命令。卡的ATR将启动,将卡Block 0中的卡类型(TagType)号共2个字节传送给读写器,建立卡片与读写器的第一步通信联络。如果不进行复位请求操作,读写器对卡的其它操作将不会进行。
反碰撞操作:如果有多张Mifar1e卡处在读写器天线的工作范围之内时,读写器首先与每一张卡进行通信,取得每一张卡的ID号。由于每一张Mifare1卡都具有唯一的ID号,因此读写器根据卡的ID号来保证一次只对一张卡操作。
卡选择操作:完成了上述二个步骤之后,读写器必须对卡进行选择操作。执行操作后,返回卡上的SIZE字节。
认证操作:经过上述三个步骤,在确认已经选择了一张卡片时,读写器必须对卡上已经设置的密码进行认证。如果匹配,才允许进一步的读写操作。
读写操作:对卡的读、写、增值、减值、存储和传送等操作。
5结论
本文的创新工作:基于PHILIPS公司生产的MF RC500芯片,提出了一种结合单片机AT89S52的通用射频卡读写器的设计与实现方案。系统实现了对Mifare1卡读写操作的同时,具有以下优点:(1) 由于接口方式比较多,对IO口操作简单,可以方便地对MF RC500进行控制并获取相应信息;(2) 由于该系统在天线设计合理的情况下可靠性比较高,有效距离可达10cm;(3) 计算机只需通过一定的方式发送命令,即可对卡操作,在此基础上可以根据不同的需要开发出相应的软件产品,具有很大的实用价值。
实际应用表明该读写器架构具有响应速度快、使用简单、读卡距离远和通信稳定可靠的显著优点。