非接触式 IC卡是根据射频电磁感应原理产生的。它的读/写操作只需将卡片放在读卡器附近一定的距离之内就能实现数据交换,无需任何接触,使用非常方便、快捷,不易损坏。因此,在 公交、门禁、校园、企事业等人事管理、娱乐场所等方面有广阔的应用前景。目前,我国引进的射频IC卡主要有Philips 公司的Mifare卡和Atmel公司的Temic卡。下面以Philips公司的Mifare卡为例,介绍校园 一卡通IC卡读写器的实现方法。
1工作原理
非接触式IC卡读卡器以射频识别 技术为核心,读卡器内主要使用了1片卡专用的读/写处理芯片——MMM微模块。其功能包括调制、解调、产生射频信号、 安全管理和防碰撞机制。内部结构分为射频区和接口区:射频区内含调制解凋器和电源供电电路,直接与天线连接;接口区有与单片机相连的端口,还具有与射频区相连的收/发器、16字节的数据缓冲器、存放64对传输密钥的ROM、存放3套密钥的只写存储器,以及进行3次证实和数据加密的密码机、防碰撞处理的防碰撞模块和控制单元。读卡器工作时,不断地向外发出一组固定频率的电磁波(13.6MHz)。当有卡靠近时,卡片内有一个LC串联谐振电路,其频率与读卡器的发射频率相同,这样在电磁波的激励下,IC谐振电路产生共振,从而使电容充电有了电荷。在这个电容另一端,接有一个单向导电的电子泵,将电容内的电荷送到另一个电容内存储。当电容器充电达到2V时,此电容就作为电源为卡片上的其他电路提供工作电压,将卡内数据发射出去或接收读卡器发出的数据并保存。
2硬件组成
校园一卡通系统结构复杂,非接触IC卡的读卡器至少应包括充值卡机、消费机及自动挂失机等,其硬件组成大体相同。图1为非接触IC卡及其读卡器硬件电路原理,主要由MMM微模块、单片机、 键盘、显示器、存储器、天线和监控电路,以及能构成校园一卡通网络系统的CAN总线节点电路等部分组成。
读卡器采用单片89C52。其片内有8KB的ROM,256字节的RAM以及32个I/O口。P1口与串行器件24C64和显示、 报警电路连接。其中的显示模块采用串行方式进行通信,分别采用P1.0、P1.1模拟时钟信号线和数据线。24C64用来存储本消费终端机地址和其他数据信息。P0口分别与MMM微模块及CAN总线控制器SJA1000相连,用作数据线。P3口用于读/写控制和中断。监控电路采用DS1232L芯片。它是个看门狗定时器,其功能是:上电和掉电时给89C52、MMM模块及CAN总线控制器SJA1000产生RESET信号;看门狗对系统进行监控,防止死机。由于单片机的I/0口资源比较紧张,而键盘需要8个I/O口,因此,键盘处理过程是使用一个独立的cPU(89C2051)。这个CPU专门负责键盘处理,从按键扫描码的获得到通过扫描码再查键码表来获得键码。最后以串行的方式与主CPU进行通信,主CPU获得键码后再做相应的后续处理。
CAN总线采用一种串行数据通信协议,它是一种多主总线,其数据长度为8字节,不会占用总线时间过长,从而保证了通信的实时性。CAN协议采用CRC检验并可提供相应的错误处理功能,保证了数据通信的可靠性。CAN协议的一个最大特点是废除了传统的站地址编码,而代之以对通信数据块进行编码。采用这种方法的优点是可使网络内的节点个数在理论上不受限制,因此非常适合校园一卡通系统中的各终端机及服务器互联从而构成网络系统。
3软件设计
IC卡读卡器在校园一卡通中一般有3种功能:消费终端、充值卡终端及挂失卡终端机等。其中充值卡终端和挂失卡终端分别读出IC卡序列号,交给服务器进行相关数据处理,并保存到服务器数据库中。消费终端机不但要读取IC卡号交给服务器,还要从服务器数据库中下载与此卡号相对应的金额数据并显示,以及对此数据进行消费运算处理,然后传回服务器数据库(为了安全和管理上的考虑,相关信息并不写入IC卡内)。本文主要以消费终端为例,因此程序主要包括Ic卡读操作程序、键盘扫描程序、显示程序、存储器读/写程序和通信程序。
(1)主程序流程:主程序主要完成系统变量的初始化,检测操作IC卡,通过串口接收键值,与服务器建立通信,从服务器下载与卡号相关的信息并参与运算和显示等,具体流程如图2所示。
(2)键盘扫描流程:键盘扫描程序可以采用扫描法和反转法两种方式,本系统键盘扫描功能模块是采用反转法实现的。这个方法实现起来比较方便,先置列线为低电平,对行线进行扫描,查看是否有低电平出现。如果有就是有健按下,再反转置行线为低电平,对列线进行扫描,查看是否有键按下。如果列线中有低电平出现,就表示有键按下;否则,就是无键按下。利用这种方法可以得到按键的扫描码,再根据扫描码查找键码表来确定按键的键码值,然后将键值通过串口发送到主控制器。键盘扫描程序的流程如图3所示。
(3)显示程序说明:根据图1,在显示电路中,用P1口的3根I/O口线(P1.0、P1.1、P1.2)分别提供时钟信号(CIK)、串行数据(DA)和使能信号(EN)。MC14499每一次可接收20位串行输人数据,前4位用于控制数码管的小数点显示,后16位是4个数码管的BCD码输人数据。在每帧数据传送之前,必须将EN置0,然后传送20位数据。数据传送完后,再将EN置1。
(4)对Mifare卡的操作流程:本系统采用中断(INT1)工作模式,即MCU利用MifareRC500提供中断信息对其进行控制。另外,根据系统的需要,可以采用查询方式对MifareRCS00进行操作。整个系统的工作由对Mifare卡操作和系统后台处理两大部分组成。由于篇幅有限,本文只介绍对Mifare卡操作流程。Mifare卡的操作可以分为以下几个步骤:
①复位请求。当一张Mifare卡片处在卡片读写器天线的工作范围之内时,程序员控制读写器向卡片发出“REQUESTall”(或“REQUESTstd”)命令。卡片的ATR将启动,将卡片Block0中的卡片类型(TagType)号共2字节传送给读写器,建立卡片与读写器的第一步通信联络。如果不进行得位请求操作,读写器对卡片的其他操作将不会进行。
②反碰撞操作。如果有多张Mifare卡片处在卡片读写器天线的工作范围之内时,读卡芯片将首先与每一张卡片进行通信,取得每一张卡片的系列号。由于每一张Mifare卡片都具有其唯一的序列号,决不会相同,因此读卡芯片根据卡片的序列号来保证一次只对一张卡操作。该操作得到的返回值为卡的序列号。
③卡选择操作。完成了上述2个步骤之后,读卡芯片必须对卡片进行选择操作。执行操作后,返回卡上的SIZE字节。
④认证操作。经过上述3个步骤,在确认已经选择了一张卡片时,读卡芯片在对卡进行读/写操作之前,必须对卡片上已经设置的密码进行认证。如果匹配,才允许进一步的读/写操作。
⑤读/写操作。对卡的最后操作是读、写、增值、减值、存储和传送等操作。相关代码如下:
每调用一个函数,函数执行完毕都返回一个相应的状态代码(status)。如果成功调用,返回值为0;如果返回值不为0,说明该函数未成功执行从而转到其他操作。
结语
本文介绍了校园一卡通系统中非接触IC卡读写器的设计。在此读写器的基础上,只要稍加修改就能开发出不同的射频识别应用系统,如考勤系统、门禁系统、公交车收费系统等。这些都是笔者在学习和实践中得来的,相信能对相关工作人员有一定启发。