整个系统的工作由对Mifare卡操作和系统后台处理两大部分组成。本节只介绍对Mifare卡的操作流程。Mifare卡的操作可以分为以下几项:
图2-20 MF RC500与AT89S52的部分接口电路
图2-21 AT89S52与RS232的接口电路
1.复位请求
当一张Mifare卡片处在卡读写器的天线工作范围之内时,程序员控制读写器向卡片发出Requestall(或Request std)命令。此时卡片的ATR(复位应答)将启动,并将卡片Block0中的卡片类型(TagType)号共2个字节传送给读写器,从而建立卡片与读写器的第一步通信联络。如果不进行该位请求操作,读写器对卡片的其他操作将不能进行。
2.反碰撞操作
如果有多张Mifare卡片处在卡片读写器的天线工作范围之内,读写器将首先与每一张卡片进行通信,以取得每一张卡片的序列号。由于每一张Mifare卡片都具有其唯一的序列号而绝不会相同,因此,读写器根据卡片的序列号来保证一次只对一张卡进行操作。该操作将使读写器得到接近式IC卡的返回值作为卡的序列号。
3.卡选择操作
完成了上述两个步骤之后,读写器必须对卡片进行选择操作。执行该操作后,将返回卡上的SIZE字节。
4.认证操作
经过前面叙述的三个步骤以后,便可以在确认已经选择了一张卡片时,在读写器对卡进行读写操作之前,使系统对该卡片上已经设置的密码进行认证。如果该认证匹配,便可允许进一步的读写操作。(www.daowen.com)
5.读写操作
对卡的最后操作即是读、写、增值、减值、存储和传送等操作。
6.读卡程序
根据上面的流程,便可采用基于KeilC的C语言进行编程,程序如下:
MFRC500发送请求时,req_code是请求模式,一共有Request all和Request std两种模式。Request all指令是非连续性读卡指令,只读一次。但有一个例外,即当某一次Request all指令读卡失败时,如卡片没能通过密码认证或其他原因而出错时,Request all指令将连续地读卡,直到读卡成功才进入非连续性的读卡模式。Request std指令的使用与Request all指令相反。Request std指令是连续性的读卡指令。当某一张卡片在读写器天线的有效工作范围(距离)内时,Request std指令在成功地读取这一张卡片之后,将进入读写器对卡片的其他操作。如果其他操作完成,程序员又使读写器进入Request std指令操作,那么,Request std指令将连续地再次进行读卡操作,而不管这些片卡是否被拿走。只要有一张卡片进入读写器的天线有效工作范围(范围)内,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缓存中,接着进行认证
IC卡以其高度的信息集成及安全性已经融入当今信息技术的主流,并越来越受到人们的青睐。本节介绍了飞利浦公司的MF RC500非接触式IC卡的内部结构和工作原理,给出了基于MF RC500的嵌入式读写模块的软硬件设计方法。此读写模块的使用使复杂的IC卡技术变得非常简单,因而对非接触式智能卡的推广具有重要意义。目前,该系统已用于考勤、门禁、售饭等多种系统中。与磁卡、只读射频卡(EM卡)组成的系统相比,该系统的性能大大改善,并且为“一卡通”的实现提供了必备条件。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。