实现以RFID卡仿真磁卡的模块设计 - 中国一卡通网
用户名密码 [免费注册] [找回密码] 推广技巧 发布求购 建商铺  发产品  会员体制比较  
 

实现以RFID卡仿真磁卡的模块设计

来源:中国一卡通网  作者:沈文龙  发布时间:2008-01-07 14:05:42  字体:[ ]

关键字:rfid卡  射频识别卡  u2270b  磁卡  仿真模块  射频卡  

摘   要:设计一种能从射频识别(RFID)卡读取数据,而后又仿真磁卡格式输出的模块,借助这种模块,能在不改变原有应用系统的基础上,将系统的磁卡替换为RFID卡.本文介绍的模块选择H4001作为替代磁卡的RFID卡,模块本身则主要由天线、非接触式射频卡读写基站芯片U2270B和单片机AT89C2051构成.在介绍应用电路的同时,分析了RFID卡、磁卡的相关编码格式,提出实现RFID卡信息读取、磁卡仿真输出的方法和步骤,并给出了相应的程序流程图.


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道数据编码字符集

第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所示.

 H4001卡数据的解码程序流程图

图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卡上数据.

更多

新闻投稿合作邮箱:yktchina-admin@163.com    字体[ ] [收藏] [进入论坛]

推荐文章

论坛热帖