3 系统的软件结构及特点
整个系统的软件结构框图如图2所示。
整个系统主要是由核心控制单元P89LPC932、与Mifare One卡通信的MFRC632、与PC机通信的RS232、提供时间基准的实时时钟芯片PCF8563和存储系统设置数据的存储器AT45DB021等。因此针对本系统整个软件系统的开发也主要分为系统启动、硬件驱动、任务调度等。
4 系统软件设计及实现
4.1 启动代码
在本系统中,主要指在系统刚一上电后先将所有的外围电路和CPU本身初始化成静止状态,然后根据系统的要求将所有的外围电路和CPU本身进行初始化设置。设置完毕后再将CPU的中断源打开。在本系统中,系统一上电首先执行Init_System()函数。部分代码如下:
程序执行完Init_System()函数后执行RcChipReady函数。此函数的功能是初始化MF RC630芯片。
4.2 硬件驱动
4.2.1 PCF8563驱动
由于本芯片是一款标准的I2C总线设备,所以硬件驱动实际上就是标准的I2C总线控制。由于篇幅有限,这里就不介绍了。
4.2.2 MF RC632驱动
MF RC632是MF RC500芯片的升级产品,所以MFRC630的大部分寄存器与MF、RC500均相同,它们对Mifare One卡的操作流程也基本相同。下面介绍对Mifare One卡的操作流程。
(1)Mifare One卡的操作流程
整个系统的工作由对Mifare卡操作和系统后台处理两大部分组成。由于篇幅有限,本文只对Mifare卡的操作流程进行简单介绍。Mifare One卡的操作可以分为以下几项:
①复位请求。当一张Mifare卡片处在卡片读写器天线的工作范围之内时,程序员控制读写器便向卡片发出REQUEST all(或REQUEST std)命令。卡片的ATR将启动,将卡片Block 0中的卡片类型(TagType)号共2个字节传送给读写器,建立卡片与读写器的第一步通信联络。如果不进行“得位请求”操作,读写器对卡片的其他操作将不会进行。
②反碰撞操作。如果有多张Mifare卡片处在卡片读写器天线的工作范围之内,PCD将首先与每一张卡片进行通信,取得每一张卡片的序列号。由于每一张Mifare卡片都具有其唯一的序列号,决不会相同,因此PCD根据卡片的序列号来保证一次只对一张卡操作。该操作PCD得到PICC的返回值为卡的序列号。
③卡选择操作。完成了上述2个步骤之后,PCD必须对卡片进行选择操作。执行操作后,返回卡上的SIZE字节。
④认证操作。经过上述3个步骤,在确认已经选择了一张卡片时,PCD在对卡进行读/写操作之前,必须对卡片上已经设置的密码进行认证。如果匹配,才允许进一步的读/写操作。
⑤读/写操作。对卡的最后操作是读、写、增值、减值、存储和传送等操作。
(2)MF RC500软件开发包移植
在本系统中,主要是将标准的MF RC500软件开发包进行移植来完成MF RC632驱动的编写。在本系统中使用的是SPI总线,所以只要将MF RC500标准软件开发包中对寄存器读/写的函数改成SPI总线的读/写函数即可。在本系统中主要是增加了SpiSendByte()和SpiReByte()函数,同时修改了 ReadRawRc(uchar Address)和WriteR-awRc(uchar Address,uchar value)函数。部分代码如下:
4.2.3存储器驱动
在本系统中主要是指AT45DB021的驱动。因为AT45DB021也是标准的I2C总线设备,所以硬件驱动实际上就足标准的I2C总线控制。由于篇幅有限,这里就不介绍了。
4.2.4其他电路驱动
其他电路驱动在本系统中主要是指一些硬件电路电源的控制,为降低功耗所有的外围电路都通过一个三级管来控制。所有三级管的基极均与CPU的I/O口相连,这样通过CPU的I/O口即可控制所有外围电路的电源。
4.3 任务调度
为提高CPU的工作效率和系统任务的处理速度,本系统使用分时处理流程。代码如下:
4.4 可靠性对策
由于本系统是一台标准的射频读卡器设备,所以在系统软件开发上为降低二次开发的难度,增强任务处理能力。在系统的任务调度上采用了比较流行的分时处理流程,这样只要所加的任务处理时间小于任务轮询的时间均可采用此种方式。同时为增加Mare I卡的使用寿命,在对Mare I卡的内存进行读写时采用平均读写的方式,即从长时间读写来看,Mare I卡的每块存储区所得到的读写次数相同,避免了由于单块存储区读写次数太多而损坏。
5 结 论
经过调试,由本系统软件所开发出的读写器具有 高性能、高稳定性和强兼容性。典型的读写距离为11 cm,在有效读写区域内无死区,读写操作可靠。在桌面工作环境中,卡片在有效感应区域内连续读写出错率低于0.01%。其兼容性表现在不仅能够读取标准的卡片,对于偏离标准很多的卡片也能够进行读取。