实现以RFID卡仿真磁卡的模块设计
2O世纪8O年代,以磁卡和条形码作为信息载体,各种身份识别逐渐广泛应用于我国服务领域、物流与企业管理领域.射频识别(radio frequency identification,RFID)卡具有非接触、操作方便、可靠、识别率高、寿命长等突出优点,2O世纪9O年代起大规模应用于众多领域.目前仍有大量基于磁卡和条码的应用系统正在或即将投入使用,这些系统在设计时不少是把磁卡或条码解码部分作为独立的模块加以考虑.基于此,提出以下设想:若能够采用廉价只读RFID卡取代磁卡或条码,而让RFID卡阅读模块直接替换原来的磁卡机芯或条码解码模块,那么,整个系统不需做什么改动,即可投入运行或继续使用.这样,不论改造旧系统或过渡到采用RFID卡的新系统,都可提高效率,减少浪费,在当前仍有市场和积极的意义.本文介绍的模块只考虑以只读的RFID卡替代不需修改信息的磁卡(其他情况读写卡程序有所不同).
1 模块组成和工作原理
本仿真模块的功能就是解码读取只读RFID卡的信息(通常就是简单的序列号,并仿真磁卡机芯输出美国银行家协会(American banker S association,ABA)磁卡格式数据,其组成框图见图1.
图1 仿真模块的组成框图
模块的关键部分是天线、ATMEL的射频卡读写基站芯片U2270B和单片机AT89C2051.工作时,基站芯片U2270B通过天线(一般使用铜制漆包线绕制直径3 cm、线圈100圈即可,电感值为1.35 mH)以约125 kHz的调制射频信号为RFID卡提供能量(电源),同时能接收来自H4001的信息,并以曼彻斯特编码(Manchester)输出.而AT89C2051则是从U2270B得到H4001卡的64位信息,根据曼彻斯特编码规则进行解码,对数据加以校验,获取其中代表1O位十进制序列号的32位二进制数,并转换成对应的ABA磁卡格式数据,再从/CLD、CLK、DATA 3根信号线仿真磁卡机芯输出数据.
2 RFID卡H4001及曼彻斯特编码
图1所示模块中,配套使用的RFID卡是EM Microelectronic公司的H4001,该卡属于无源的低频RFID卡,典型工作频率为125 kHz,工作所需要的能量是通过电磁耦合单元或天线,以非接触的方式传送.当获得足够能量后,H4001便不断循环地往外部发送其自身的序列号等64位信息.
发送时要对数据进行曼彻斯特编码和信号调制.规则如下:在每个时钟周期(对应1位数据)的中间位置,当数据位为“0”时电平由高向低跳变,而数据位为“1”时电平由低向高跳变;本模块的另一种表示方法则恰好相反,其波形如图2所示.
图2 一个典型数据序列的Manchester编码波形图
对于采用曼彻斯特编码的H4001,其数据速率为RF/64.假设基站工作时的射频频率是125 kHz,则对应1位的时钟(CLOCK)的周期( T)µs.
3 基站芯片U2270B与模块电路
射频卡的读写需要由射频卡基站芯片来完成数据的调制、发射和射频的接收以及数据的解调任务.ATMEL公司生产的U2270B是一种低成本、性能完善的低频(100—150 kHz)射频卡基站芯片,采用Man—chester编码和双相编码,可用于读取H4001 RFID卡.参照文献[3]和[5],针对H4001 RFID卡,采用U2270B设计的射频识别卡读取模块的电路见图3.
图3 基于U2270B的REID卡读取模块电路图
通过调整U2270B的第15脚(RF端)所接电阻的大小,可将内部振荡频率固定在125 kHz.计算公式如下:
读卡时,RFID卡发射来的经过125 kHz载波调制后的信号由基站天线接收后,馈送到U2270B的第4 脚(Input)处,在第2脚(Output)输出解调后的Manchester编码的数据信号,送给微处理器.应当说明,射频卡H4001返回的是采用Manchester编码的数据流,基站U2270B负责信号的接收、整流和解调工作,而解码工作由单片机AT89C2051完成.
4 磁卡的磁道及ABA编码
根据ISO有关标准规定,磁卡或存折上的磁条划分为3个磁道.第2道数据标准最初由ABA规定,第2磁道上记录信息包含SS、PAN、FS、ADATA、ES和LRC等6项内容.其中,SS为起始标志,其代码0BH;PAN为主帐号;FS为域分隔符0DH;ADATA为附加数据;ES为结束标志,其代码0FH;LRC为纵向冗余校验字符,低4位分别是从SS到ES各字符的值按位异或操作的结果.具体应用时可根据实际情况做些修改,在本模块中用RFID卡的序列号取代PAN,无需FS域和ADATA域.在SS之前及LRC之后都增加若干同步时钟.
ISO有关标准还规定了该磁道编码字符集(表1).
表1 第2道数据编码字符集
表1中各字符编码由BCD码(4位二进制数)另加1位奇校验表示,即用P、B3、B2、B1、B0表示1个十进制位或控制/标志符,且P+ B3+B2+B1+B0=1.如ES(结束标志)的代码是0FH,加了校验的BCD码则为1FH,对应的字符是‘?’.
刷卡时按上述规定解码磁卡信息,各字符的装配顺序由低位到高位.这需要磁头、放大整形电路、时钟与数据分离解码电路(可用专门电路或软件解码),解码后由3根信号线CLK、DATA和/CLD 把信息传递给有关处理单元进行解释处理.本模块并不需要解码磁卡信息,但是要求仿真ABA磁卡信息,并由CLK、DATA、/CLD信号线输出.3根信号线的用途如下.(1)CLK(CLOCK)同步时钟信号,1个周期对应1位二进制.(2)DATA数据输出端,在各CLK周期中间位置之前,确定其输出电平.若发送“0”,则DATA置为高;反之,发送“1”则DATA置为低.(3)/CLD(CARD LOAD),有效(低电平)时表示已检测到磁卡,正在刷卡.接收处理单元应做好接收准备.它必须比CLK、DATA先有效,后撤消.
手工刷卡速度范围一般是10—120 cm·s-1,对应的CLK周期变化范围很大.为了便于后续处理,仿真输出可取一个稳定的较大值,满足绝大多数应用系统的要求,因此,本模块设定为3 ms.
5 模块的软件设计
参照图1,U2270B接收114001的信息,并通过U2270B的Output脚把解调的数据输出给AT89C2051 进行解码.AT89C2051除了对H4001卡信息解码,还需进行二进制到十进制数据转换,仿真ABA编码格式输出数据等.本文介绍AT89C2051软件核心部分的设计思路和程序流程.
5.1 H4001输出的64位数据的解码
参照图2的Manchester编码,其解码方法如下:在每个位时钟周期的中间位置检测电平的变化情况,如果检测到电平由低变高则该位解码为“0”;反之,电平由高变低则解码为“1”.若未发生变化则视为信号异常进行出错处理.
这里存在如何检测、界定时钟周期的起始位置、中间位置问题,各种卡的做法并不一致.H4001没有专门的硬同步信号,不能检测特殊信号作为起始标志,而是规定64位数据位的前9位固定为全“1”,最后1位设定为“0”,作为起始和结束标志或设定为同步信息.分析连续的若干位“1”和连续若干位“0”,其波形非常相似,所以实际解码时,应该先检测到1位“0”,再接着检测连续的9位“1”,那么可以肯定,后续的54 个信息位便是40位真正的数据和14位相关的奇偶校验位,有关数据排列顺序见文献[4].可以想象,这里不应该实际上也不可能再次出现1位“0”后跟随连续的9位“1”.接下来是最后1位,必须是“0”,如此继续下一循环,否则便是出错.为了提高效率,可以在循环内边检测校验,边解码保存H4001卡的信息,其程序流程如图4所示.
图4 H4001卡数据的解码程序流程图
图4未对解码得到的40位二进制(BIN)数据进一步分解.其中前8位是客户标识代码,用于区别不同的系或客户;后32位表示该卡的序列号,一般需要转换为l0 位的十进制数.例如,在该模块上检测到某卡的64位二进制数据串如下:111111111 00011 10001 00000 00000 10010 10100 00000 10111 10010 0001l 1001 0.其中最先出现的是起始标志9位“1”,然后l0组5位的数据,各组的最后1位是本组的偶校验码(从实际解码得到的数据看,它们都是正确的),接着的1组4位数据“1001”是这l0组数据的纵向冗余校验码(LRC)或偶校验码,最后1组是1位的结束标志“0”.第1组、第2组数据“0001”、“1000”(剔除校验码,下同)代表客户编号或版本号,第3组到第1O组数据是以二进制表示的本卡号:0000 0000 1001 1010 0000 1011 1001 0001(高位在先),转换成十进制,得到的序列号是0010095505.再分别计算这l0组第1,2,3,4位的偶校验码,应该分别是1,0,0,1,正好是解码得到的LRC.所以,这64位数据串是正确读出的0010095505号H4001 RFID卡上数据.
5.2 仿真ABA格式磁卡的解码输出
在得到l0位十进制的序列号后再仿真ABA磁卡格式数据输出.先把每1位十进制数位以BCD码再加1位奇校验码表示(统称字符),输出时在这些表示序列号的字符前后还需增加其他附加字符或代码,用作同步信号、起止标志、校验码.典型的输出卡号的程序流程如图5所示.
图5 仿真ABA格式磁卡输出卡号的程序流程图
无数据输出时,/CLD信号应一直为高电平,检测到正确卡号后准备发送数据时把它置低,并维持到发送过程结束;CLK信号线在延时3—5 ms后开始以设定的频率发出占空比为50% 的方波(时钟),直到全部发送完毕;DATA在具体数据的前后,要发送5位以上“0”,作为同步信号,起始标志0BH(加校验位,发送顺序ll010),数据之后发送结束标志0FH(加校验位,发送顺序11 1 11),5位LRC,还有5位以上“0”.⋯0’的表示方法是在CLK上半周结束前,把DATA线置高,一直维持到下一CLK周期;“1”则是在CLK上半周结束前,把DATA线置低,一直维持到下一CLK周期.
6 结束语
根据上述方案设计的模块能较好地读取H4001的信息并仿真ABA磁卡格式输出数据(卡号).在调试过程中发现,即使卡片没有进人模块发送与接收的有效区域,或者说模块未真正收到H4001的信息,在U2270B的OUTPUT端也偶有信号输出,但是没什么规律;在卡片进人有效区后,信号渐渐变得有规律,信号周期接近标准的512信号.在判断“O1”信号时一定要确认其周期在512左右,如果不合则应舍去,继续等待,直到检测出满足符合周期要求的“O1”才开始接着往下解码,提取数据.
另外,不排除在接收过程中由于干扰等因素造成错误.由于H4001不断循环发送64位卡内信息,因此,可以直接放弃本循环的解码与转换,而等待下一轮(相隔约33 ms)再进行解码与转换.这样牺牲33 ms时间换取低误码率、漏码率,整体性能远超出磁卡阅读器.这种模块实现方案性能可靠,具有高性价比,完全满足应用需求.
作者简介:沈文龙(1963一),男,福建莆田学院电子信息工程系,高级工程师.研究方向:嵌入式系统及其应用.
Emafl:williptxy@126.com.
参考文献
[1]晓玲,王正华.从Ic卡到RFID[J].中国集成电路,2007,16(4):75.
[2]陈大才.射频识别(RFID)技术[M].北京:电子工业出版社,2001:193.
[3]王文理,田云霞,王丽.TEMIC系列射频卡读写器的开发设计[J].自动化技术与应用,2006,25(7):39—40.
[4]朱伟,薛有为,高玉.H4001非接触式Ic卡读卡程序的研究[J].电子工程师,2002,28(7):39—40.
[5]马秀丽,李莹,华宇宁.一种非接触式射频卡基站读写电路的设计与应用[J].金卡工程,2003,7(8):53—55.
[6]许丹,徐平.维根及ABA磁卡编码产生器[J].金卡工程,2004,8(5):5l一52.