Mifare系列射频卡读写器的研制
扫描二维码
随时随地手机看文章
1 引言
IC卡按卡与外界数据传送的形式不同,分为接触式IC卡和非接触式 IC卡。接触式IC卡通过8个触点从读写器获取能量和交换数据;非接触式IC卡通过射频感应从读写器获取能量和交换数据,所以非接触式IC卡又叫射频卡。现在常见的是接触式IC卡,这类卡的读写操作速度较慢,操作也不方便,每次读写时必须把卡正确地插入到读写器的口槽才能完成数据交换。这样,在公交、考勤等需要频繁读写卡的场合就很不方便,而且IC卡的触点暴露在外,容易损坏和搞脏而造成接触不良。非接触式IC卡是根据电磁感应原理产生的。它的读写操作只需将卡片放在读写器附近一定的距离之内就能实现数据交换,无需任何接触,使用非常方便、快捷,不易损坏。因此,在公交、门禁、校园、企事业人事管理等方面有广泛的应用前景。目前我国引进的射频IC卡主要有PHILIPS公司的Mifare卡和ATMEL公司的Temic卡[1]。而PHILIPS公司的 Mifare卡现在是市场的主流产品,应用越来越广。其典型型号为Mifare1 S50,它有1K字节E2PROM用于存放数据,分成16个区,每个区都有自己独立的密码,完善的安全机制使之具有一卡多用的特性[2]。
Mifare 卡是一种智能卡(smart card),内建有中央微处理机(MCU)和ASIC等,使卡在安全保密性、认证逻辑、算术运算等微操作控制有序进行。 Mifare卡读写器的设计一般用PHILIPS公司生产的读写模块MCM200或MCM500。随着技术的进步,PHILIPS公司现在生产了功能及性能更好的读卡芯片,我们就是以这种芯片为基础来设计和开发Mifare射频卡读写器。
2 工作原理
射频IC卡读写器以射频识别技术为核心,读写器内主要使用了1 片Mifare卡专用的读写处理芯片(MF RC500)。它是一个小型的最大操作距离达100mm的Mifare读/写设备的核心器件,其功能包括调制、解调、产生射频信号、安全管理和防碰撞机制。内部结构分为射频区和接口区:射频区内含调制解调器和电源供电电路,直接与天线连接;接口区有与单片机相连的端口,还具有与射频区相连的收/发器、 64字节的数据缓冲器、存放3套寄存器初始化文件的E2PROM、存放16套密钥的只写存储器以及进行三次证实和数据加密的密码机、防碰撞处理的防碰撞模块和控制单元。这是与射频卡实现无线通信的核心模块,也是读写器读写Mifare卡的关键接口芯片。
读写器工作时,与Mifare卡专用的读卡芯片(MF RC500)相连的天线线圈[3]不断地向外发出一组固定频率的电磁波(13.56MHz),当有卡靠近时,卡片内有一个LC串联谐振电路,其频率与读写器的发射频率相同,这样在电磁波的激励下,LC谐振电路产生共振,从而使电容充电有了电荷。在这个电容另一端,接有一个单向导电的电子泵,将电容内的电荷送到另一个电容内存储。当电容器充电达到2V时,此电容就作为电源为卡片上的其他电路提供工作电压,将卡内数据发射出去或接收读写器发来的数据与保存。
3 系统组成
非接触式IC卡应用系统由Mifare卡、发卡器、读卡器和 PC管理机组成,如图1所示。其中Mifare卡存放身份号(PIN)等相关数据,由发卡器将密码和数据一次性写入完成。发卡器实际上是一种通用写卡器,直接与PC机的RS-232串行口相连或经过RS-485网络间接与PC机相连,由系统管理员管理,通过PC机设置或选择好要写入的数据,发出写卡命令完成对Mifare卡的数据及密码的写入。与读卡器不同,发卡器往往处于被动地位,不主动读写进入射频能量范围内的射频卡,必须接收PC机的命令才操作,即必须联机才能工作;而读卡器往往可以脱离PC管理机工作。读卡器是主动操作的,只要有非接触式IC卡进入读卡器天线射频能量范围,读卡器便可读写卡中相关指定扇区的数据。
图1 典型射频卡应用系统组成框图
发卡器与读卡器在硬件设计上大同小异,都是由单片机控制专用读写芯片(MF RC500),再加上一些必要的外围器件组成。图2为读卡器硬件系统组成。读卡器用P89C58BP单片机作主控制器;MF RC500射频芯片作为单片机与射频卡通讯的中介;74HC595作显示驱动器驱动LED数码显示器,PS/2总线作为通用编码键盘接口,键盘与LED显示器作为人机交互接口;AT24C256串行E2PROM作数据存储器;DS1302串行时钟芯片作硬件实时时钟;MAX232或MAX485作串口信号转换;DS1232作看门狗定时器;Q9012三极管作提示报警信号驱动,有卡进入并读卡成功指示灯闪一下,喇叭叫一声。Mifare射频卡进入距离射频天线100mm内,读卡器就可以读到卡中的数据。读卡器读到Mifare射频卡中的数据后,系统单片机要将所读数据及刷卡的时间一起存入存储器 AT24C256,并在LED显示器上显示卡数据。没有卡进入读卡器工作范围时,系统读出实时时钟芯片中的时间,在显示器上显示当前时间。读卡出错,显示出错标志。主控器P89C58BP内部有32KB的Flash存储器,256字节RAM,可方便反复擦写、修改程序,同时,由于外部不用扩展程序存储器,可以简化电路设计,减小读卡器的尺寸,同时有较多的I/O口提供给系统使用。
图2 读卡器硬件系统组成
4 硬件设计
4.1 射频芯片
MF RC500是Philips公司为Mifare卡设计的专用读卡芯片,它与非接触式IC卡之间通讯标准兼容ISO14443A,其功能框图如图3所示[4]。
图3 MF RC500功能框图
它内部包括微控制器接口单元、模拟信号处理单元和ISO14443A规定的协议处理单元,以及 Mifare卡特殊的Crypto1安全密钥存储单元。它可以与所有兼容Intel或Motorola总线的微控制器实现8位并行“无缝”接口(直接连接),其内部还具有64个字节的先进先出(FIFO)队列,可以和微控制器之间高速传输数据;其片内的ISO14443A协议处理单元包括状态和控制单元、数据转换处理单元;片内的模拟单元能够将数字信号处理单元的数据信息调制并发送到天线中,也可以将天线接收到的信息解调成数字信号传送给协议处理单元,带有一定的天线驱动能力。
MF RC500的工作频率为13.56MHz,它可以在有效的发射空间内形成一个13.56MHz的交变电磁场,为处于发射区域内的非接触式IC卡提供能量,同时卡或RC500需要传送的数据信息也被调制在这个频率上。RC500与非接触式IC卡之间能量的传递和数据双向传输的过程是初级和次级两个线圈之间的耦合过程,从读卡器发射给卡的数据信息在调制前采用弥勒(Miller)编码,而从卡到读卡器的数据信息采用曼彻斯特编码。
4.2 实时时钟
刷卡时要记录刷卡的时间,用外接硬件实时时钟芯片的办法,为系统提供一个准确可靠的时钟,用3V备用电池保证在系统掉电时也能正常走时。我们选用体积小、接口简单的实时时钟芯片DS1302。它是美国DALLAS公司推出的低功耗串行通信接口专用芯片,采用3线串行方式与单片机进行数据通信。DS1302片内还有31字节的静态RAM,可自动进行闰年补偿。数据可按单字节方式或多字节突发方式传送。DS1302为8脚DIP封装[5],与P89C58串行接口用3根线,SCLK接CPU的P2.2,同步时钟输入;RST接CPU的P2.3,通信允许信号;I/O接CPU的P2.4,串行数据输入输出。此外, X1,X2接32768Hz的石英晶振;Vcc1接3V备用锂电池,主电源接Vcc2。
每个数据传输都是先送命令字节,随后才是数据。单字节方式传送时,在RST=1期间(RST必须为1数据传送才有效),先送命令字节,紧接着发送一个字节的数据,DS1302在接收到命令字节后自动将数据写入指定的内部地址或从该地址读取数据。写数据在SCLK的上升沿有效,读数据是在SCLK的下降沿有效。多字节突发方式传送时,在命令字节后,是多个字节的数据。在RST=1期间,DS1302接收到命令字节后,接着进行8个字节日历时钟数据或31个字节内部RAM单元数据的读写操作。DS1302内部寄存器地址中,00H-06H分别对应存放秒、分、时、日、月、星期、和年信息的寄存器,07H为写保护控制寄存器,08H为电池充电控制寄存器。时钟数据以 BCD码格式存放在00H-06H这7个寄存器中。在DS1302中串行数据传送都是低位在前,高位在后,这与AT24C256的数据传送正好相反。[!--empirenews.page--]
4.3 串行存储器
我们用AT24C256作数据存储器。AT24C256是串行E2PROM存储器,支持I2C总线数据传输协议,32KB存储器容量,用两根线与CPU构成串行接口。SDA是双向数据线,接CPU的P2.1;SCL是时钟线,接CPU的P2.0;这两根线必须接上拉电阻。WP是写保护线,一般接地,表示允许读写操作。A0、A1是地址线,通过这二根地址线CPU最多可寻址4个AT24C256器件,4个芯片都有固定的地址,分别对应A0、A1为00到11,在此二根地址线上可扩充1~3片AT24C256串行E2PROM存储器。串行E2PROM读写格式和操作时序如图4所示。
图4 串行E2PROM读写格式和操作时序
写数据到AT24C256有字节写和页面写两种方式。在字节写模式下,主器件(单片机) 发送起始信号和从器件(AT24C256)地址信息,在从器件送回应答信号后,主器件发送两个8位地址字节给AT24C256,主器件在收到从器件的应答信号后,再发送数据到被寻址的存储单元。AT24C256再次应答,并在主器件产生停止信号后开始内部数据的擦写周期,在内部擦写过程中AT24C256 不再应答主器件的任何请求。页写模式下一次最多可以写入64个字节数据。从AT24C256中读数据有三种方式,即当前地址读、随机读和连续读。如随机读,允许主器件对E2PROM的任意地址进行读操作。分两步进行,首先主器件发起始信号、器件地址和两字节的存储器地址执行一个伪写操作,在 AT24C256应答之后,主器件再发起始信号和器件地址,AT24C256响应并发应答信号,然后输出8位数据,主器件收到数据后发停止信号结束本次操作。连续读可用随机读开始,在收到AT24C256发来的8位数据后,主器件不发停止信号,而发应答信号, AT24C256收到主器件的应答信号后,又传下一个地址的数据,一直进行下去,直到主器件发停止信号为止。
5 程序设计
5.1 单片机主程序流程图
单片机的程序包括:IC卡读/写/密码验证/擦除操作程序,与RC500通信中断处理程序,键盘中断处理程序,与PC机通信中断处理程序,显示程序及存储器读写程序等。读卡器的主程序流程图如图5所示:
图5 读卡器的主程序流程图
5.2 读/写卡程序设计
读写卡过程是一个很复杂的程序执行过程,要执行一系列的操作指令,调用多个C51函数。包括装载密码,询卡,防冲突,选卡,验证密码,读写卡,停卡。这一系列的操作必须按固定的顺序进行。在没有Mifare卡进入射频天线有效范围时,在低5位显示当前时钟,当有Mifare卡进入到射频天线的有效范围,读卡程序验证卡及密码成功后,将卡号和读卡时间及相关数据作为一条记录存入E2PROM存储器中,并在LED显示器高5位上显示卡号。
程序设计采用单片机汇编语言和KeilC51混合编程。看门狗定时器中断服务程序采用汇编语言编写,其它程序采用C语言编写。程序的每一部分按模块化设计成一个文件,单独调试通过后,再在KeilC51环境下加入到工程文件中汇编生成HEX文件,用仿真器进行仿真通过后,写入P89C58BP芯片中脱离仿真器运行。
6 结束语
本文设计的Mifare系列射频卡读写器能够读写多种 Mifare系列射频卡,如Mifare 1 S50、Mifare Light和Mifare Pro等,读写距离在10cm范围内。该读写器操作方便灵活,只要通过计算机串口按规定协议发送命令给它即可完成读卡、写卡、取消和更改密码等操作;也可设置为脱离计算机独立工作方式,必要时再将所存储的记录数据上传到上位机供其处理。本读写器已经实际应用在长沙某非接触式IC卡预付费电度表的售电系统中,系统运行良好、可靠性高。实际应用中证明:此射频卡读写器系统读写非接触式IC卡片迅速、方便、可靠、安全、稳定,深受用户欢迎。有足够的优势取代目前仍使用磁卡和接触式IC卡读写器的应用,具有巨大的市场竞争力和广阔的发展前景。