TA的每日心情 | 难过 2024-5-26 18:39 |
---|
签到天数: 2 天 [LV.1]初来乍到
管理员
- 积分
- 2497
|
楼主 |
发表于 2012-5-7 23:08:18
|
显示全部楼层
2、单片机软件设计
下位机程序主要包括对MF RC500进行初始化、接收上位计算机的指令、控制MF RC500,并且把MF RC500的状态信息反馈给计算机。MCU对Mifare1卡操作的命令主要有空操作、装载密码、验证密码、读卡、写卡和关卡等。无论哪种操作都必须先把命令代码写入到Command寄存器,比如执行验证密码则需要执行WriteRC(RegCommand,0x0c)命令。
整个系统的工作由对Mifare卡操作和系统后台处理两大部分组成。由于篇幅有限,本文只介绍对Mifare卡操作流程。Mifare卡的操作可以分为以下几项:
(1)复位请求
当一张Mifare卡处在读写器的天线的工作范围之内时,复位请求开始工作,并按以下步骤进行操作:
1)读写器向卡片发出Request all(或Request std)命令。Request all指令是连续性的读卡指令。Request all指令是非连续性的读卡指令,只读一次。
2)Request all指令在成功地读取一张卡片之后,会一直等待使用者拿走这一张卡片,直到有新一张卡片进入MF的天线有效工作范围之内
3)卡片的ATR将启动,将卡片Block 0中的卡片类型(TagType)号共2个字节传送给读写器,建立卡片与读写器的第一步通信联络。
具体代码如下:
void SerialIRQ() interrupt 4
{ if(RI){RI=0;
if(SBUF=='[')//开始接收
point_in=0;
else if(!Request all)
{ Request std[point_in]=SBUF;} // 放入缓冲
(2)反碰撞操作
如果有多张Mifare卡片处在卡片读写器的天线的工作范围之内时,读卡器将:
1)与每一张卡片进行通信,取得每一张卡片的系列号。由于每一张Mifare卡片都具有其唯一的序列号,决不会相同。
2)读卡器根据卡片的序列号来保证一次只对一张卡操作。
3)读卡器得到PICC的返回值为卡的序列号。
(3)卡选择操作步骤
1) MCU向MF RC500发送“SELECT”命令。
2)同时在“AntiCollision”操作中得到Mifare 1卡片的40bit长的序列号的前四个字节以及前四个字节的异或结果。
3)同时再重新发送给Mifare 1卡,只有本身的序列号和接收的序列号相同的卡片才被真正地选中。
4)Select指令成功执行后,MCU将得到DATA寄存器传来的一个字节长的卡片容量信息(SIZE字节)。SIZE字节被存储在Mifare 1卡片上的第00H扇区中的第00H 块中。
(4)认证操作步骤
1)设置密码控制寄存器KEYSTACON,使AL=1。
2)然后设置KS0和KS1以指定一套密码集。
3设置密码地址寄存器KEYADDR。
4)通过写"Authentication" 认证命令代码和写“地址”(Mifare 1卡要认证的扇区地址是0~15)到DATA寄存器。如果三遍认证的每一个环都为“真”,且都能正确通过验证,则整个认证成功。这时读写器即可对刚刚认证通过的卡片上的这个扇区进行下一步READ/WRITE 等操作。
(5)读写操作步骤
1)“Authentication” 认证指令完成。
2)对数据扇区或数据块进行“Write”写指令操作。
3)完成数据块的初始化。
3、MF RC500编程方法
除了复位以外。对MF RC500的绝大多数控制是通过读写MF RC500的寄存器来实现的。MFRC500共有64个寄存器,分为8个寄存器页,每页8个。每个寄存器都是8位。单片机将这些寄存器作为片外RAM进行操作。最常用的是FIFODATA(数据堆栈)、COMMAND(命令)、FIFOLENGTH(堆栈长度)和PRIMARYSTATUS(标记)等。要实现某个操作。只需将该操作对应的代码写入对应地址即可。例如MF RC500休眠模式对应的控制寄存器名为Contr01,地址为09H的bit4且为1有效,那么让MFRC500进入休眠模式只需要将Contr01写入0x10即可。
当对应的RFlD卡S50进入阅读器的有效范围时,天线的能量使RFID卡耦合出自身工作的能量,并建立通信。MF RC500对卡的操作主要是通过写通讯命令、参数和数据到FIFODATA,再通过写命令到120MMAND,实现与RFID卡的通讯。
工程中用到的函数主要有:系统初始化、验证密码、复位射频卡、认证状态、防重叠认证、读取MIFARE卡、写EEprom、蜂鸣器响、命令执行标志置 1、冲掉FIFO等。其他就不一一列举了。很多函数只是在基本的读写寄存器操作的基础上做了一个封装,使得调用起来更加方便,这种模块化的程序设计方法在项目中得到了很好的体现。
五、结束语
物联网的研究以及应用涉及到很多方面,本着专而精的原则,再加上时间的限制,我选择了应用最为广泛,且最贴近人们日常生活的基于单片机与非接触式IC射的频读卡器作为本次的课题。本文介绍了基于 Philips公司MF RC500型芯片和atmel公司AT89c51型单片机的RFID阅读器的低成本软硬件设计。且重点放在这两块芯片的I/O接口设计及相互通信方面,对 MF RC500与IC卡片之间的射频通信及单片机与上位机之间的通信则未作过多的介绍。经实践验证,本系统可成功实现对符合IS014443协议的 MifareS50卡的读写,并且能对范围内的多个卡准确无误地读写,读写距离达到8 cm。本系统成本低廉,足协速度快,可靠性高,操作便利,可以方便地和包括PC在内的有申口的设备连接。它可以作为简单模块与其他系统相连。对RFID的推广有重要意义。
通过本次课题的设计,我也从对单片机及射频方面的知识一点也不懂进步到对单片机的工作原理、接口设计、射频的原理、系统的整合等都有一定了解。由于之前并没有相关知识,所以平时主要以看书及查资料为主,边查边学习,进步较快。同时也认识到要进行一个项目一定要先进行市场调查,全面把握,对各方面都要考虑到。 |
|