0 引言
磁条卡是一种使用磁性物质制成的标识卡。由于磁条卡具有携带方便,价格低廉,便于普及等优点,已经广泛应用于银行卡、会员卡、医疗就诊卡等应用领域。本文设计了一种基于GPRS的手持无线磁条卡信息终端。手持无线磁条卡信息终端通过磁条卡接口读取磁条卡上的用户标识后,通过GPRS无线网络把用户标识信息和操作信息发送到中心服务器,中心服务器进行相应的处理后,把响应信息返回手持信息终端处理显示。手持无线磁条卡信息终端可以不依赖PC独立工作,成本低廉,功耗低,可以用于会员消费积分查询、医疗就诊查询等应用系统中。
1 系统设计
磁条卡信息终端基于ARM单片机和μC/OS-Ⅱ实时操作系统。μC/OS-Ⅱ是由Jean J.Labrosse编写的一种公开源代码的实时操作系统。但是μC/OS-Ⅱ只提供了一个操作系统内核,没有提供网络协议栈、文件系统等支持。在μC/OS-II操作系统上移植开源的嵌入式TCP/IP协议栈LwIP,利用西门子公司的GPRS模块MC39i就可以实现无线Internet的接入。系统总体框图如图1所示。
2 硬件设计
系统硬件组成框图如图2所示。系统以ARM单片机为核心构成,主要包括NXP公司的单片机LPC2106/01,GPRS无线MODEM MC39i,磁条卡接口芯片BS100E,键盘和LCD模块等。
NXP的LPC2106/01微控制器是基于ARM7TDMI内核的高性能32位RISC微处理器。LPC2106内嵌了128 KB可在系统编程的FLASH和64 KB的SR-AM,同时集成了多个32位定时器、PWM输出、2个UARTs接口和32个GPIO。LPC2106支持的最高CPU时钟频率为60 MHz。
GPRS MODEM选用西门子公司的MC39i。MC39i是双频GSM/GPRS模块,支持标准的ITU-TAT命令集,支持GPRS Class 10功能,具有功耗低,接口简单等优点。MC39i模块需要外接SIM卡座和天线。LPC2106的UART1接口与MC39i模块的数据串口连接,并通过IGT信号启动触发MC39i模块。
磁条卡上的数据记录格式采用ISO7811国际标准,最多包含3个磁道。大部分应用中只使用二磁道信息。系统的磁条卡接口由磁头和接口芯片组成。磁条卡接口芯片选用了台湾Vikintek公司的单磁道F2F解码芯片BS100E,该芯片可以实现磁头信号的放大和F2F编码数据的恢复。 BS100E的MSIA+和MSIA-管脚接磁头输出;CLS(Card Load Signal)管脚为磁条卡的刷卡有效信号,信号低电平有效,接LPC2106的外部中断IO口;RDPA和RCPA分别为解码输出的数据信号和时钟信号,RDPA接LPC2106的GPIO口,RC-PA接LPC2106的外部中断IO口。RCPA设置为上升沿触发中断。
3 软件设计
3.1 磁条卡接口驱动的实现
(1)磁条卡数据帧格式。本应用系统中只考虑磁条卡的二磁道信息。二磁道以5个比特组成一个字符数据,最后一位表示奇偶校验位,使用奇校验,前面4位表示数据位,可以表示16种字符,包括10个阿拉伯数字和6个其他字符。
磁道上的数据帧包括前导冗余数据、起始标志、数据区、结束标志、纵向冗余校验位(LRC),后沿冗余数据6个部分(见图3),冗余数据区不含有效数据,只用作磁道数据的同步,由若干的0组成。起始标志为11010;结束标志为11111;LRC为磁道上有效字符的异或和。正向刷卡时,数据将按图3的数据帧格式输出;反向刷卡时,数据帧将会被前后反转输出,即先检测到LRC,再检测到结束标志、数据区、起始标志,同时每个字符的位顺序也是前后反转输出的。此外,BS100E解码芯片输出的数据采用负逻辑表示,即输出为1的数据,实际上表示的是数据0,必须取反后才能使用。
(2)读卡程序的实现
磁条卡解码输出接口的时序图如图4所示。
当CLS为低电平时,表示磁卡已经进入读卡器,开始刷卡;当CLS由低变高时,表示磁卡已经离开读卡器,结束刷卡。在CLS为低的时候,每次RCPA下降沿出现时,RDPA送出一位数据。
在译码数据时,为了提高实时性,所有的数据处理都在中断中进行。在每次RCPA上升沿触发中断时读取RDPA的数据并处理。在解码时,首先要确定字符的边界,即确定一个字符的起始位。字符的边界识别采用图5所示的状态机实现。
在搜索状态,每读入一位数据就与之前读入的4位数据一起进行奇校验,当奇校验正确时,认为识别出字符的边界,转移到预同步状态。在预同步状态,连续读入5位数据后,判断这5位数据奇校验是否正确。如果这五位数据奇校验正确,认为字符的边界判别正确,进入同步状态;否则返回到搜索状态。在同步状态中,按照图3的数据帧格式进行数据译码。在数据译码的同时进行奇校验检查,当出现奇校验错误时,认为字符的边界不正确,重新返回搜索状态。
译码成功后,中断程序通过信号量通知应用程序任务处理译码数据。