简介
在现实生活中,磁卡是最常见的用来识别用户的卡片,无论是国际标准化组织还是中国国标均对这种使用磁介质的存储技术制定了相关标准。磁卡技术广泛被商业,政府,医疗等机构所采用,但最大规模使用还是银行发行的各种信用卡,借记卡等卡片。国际标准化组织ISO发布了ISO 7811系列磁卡的国际标准,从1995年发布第一版标准后持续再修订和增加内容,涵盖了从机械结构到存储方式以及数据格式等一系列的内容。
以前的银行系统中,读取卡片的工作主要交给收银机或者ATM以及销售终端来完成,这些设备都是由商家提供的,维护成本较高。这一切随2009年出现在美国的方形支付(square)而出现改变,方形支付使用非常廉价的小型终端,这些终端非常小巧,售价低廉甚至免费提供给客户,利用客户的智能手机进行银行交易。仅仅2年时间,这一新的商业形式得到大规模发展,并且在国内出现了多家类似生产厂商且已经成功推出一系列产品。因为这种商业模式中重头还是在网银平台支持,本参考设计仅关注终端本身的设计。
硬件系统
1 硬件框图
本设计包含硬件和软件部分,其中软件部分包括MCU侧的固件以及智能手机侧的应用(安卓平台)。如图1,系统硬件由MCU,供电电路,磁头信号调理电路,加密电路以及通讯电路构成。
图1.硬件框图
2 硬件设计
2.1MCU
MCU采用MSP430F5310,供电范围较宽(1.8V~3.6V),且运行功耗以及待机功耗均非常低。其运行在8MHz@3V 时功耗仅为195uA/MHz。具有多种工作模式,待机时仅1.1uA@3V(RAM保持),在此模式下可以实现快速启动。另外该器件具有较大的RAM以及丰富的外设,定时器资源较丰富。这些特点非常适合本应用的特点即要求绝对的低功耗。
2.2 供电电路
供电电路的选择比较多,如图1中所示:可以利用智能手机的耳机接口获得运行所需的电力,但是这种方式的限制是手机的硬件各不相同,耳机电路输出功率从几毫瓦到数十毫瓦不等。为了能够让设备工作,需要20毫瓦左右甚至更多的功率输出,但是相当多的手机的耳机电路无法输出足够的功率供本设备使用。为了兼容尽可能多的手机,较实际的做法是在设备内置小型锂电池或者纽扣电池,以相近的成本提供了较高的兼容性。当设备整体功耗降低到几毫瓦数量级时,使用一颗小型纽扣电池可以支持足够的使用次数。本文的方案为通过耳机获得电力和使用小型锂电池两种场合设计了相应的电路,可以按照性能和成本需求选择。
2.3 磁头及磁卡介绍
2.3.1 磁头
读卡设备的核心部件就是磁头,磁头是将磁信号转换为电信号的关键器件,只有将磁卡上的磁信号转换成电信号,上面存储的信息才能够被读取使用。磁头主要由磁性材料以及盘绕在其上的线圈构成,如图2所示,当有磁场的磁条通过磁头时,因为磁头磁性材料的磁阻较小,磁条磁场的磁力线会从磁头磁性材料中通过,从而在磁头线圈中感应出电信号,这个信号被进一步放大以后就可以进行处理。
图2.磁卡读取示意图
2.3.2 磁卡
磁卡的读取与以前广泛使用的磁带机相似,磁卡和磁带都是使用磁场来保存变化的信号,也都是通过磁道与磁头的相对运动以实现磁场到电场的转换。如图3,按照标准规定,磁卡上最多可以有三个磁道,这三个磁道中一和二磁道是只读磁道,第三个磁道是读写磁道。磁道中存储的信息由标准决定,使用哪些磁道受实际应用需求决定。在国内来说,银行磁卡主要是信用卡和借记卡,除了一二磁道外,很多信用卡并未使用第三磁道,而大部分借记卡都会使用第三磁道。
图3.磁道分布示意图
2.3.3 磁道
在磁道上覆盖有磁性材料,当需要写入数据时,将磁头线圈通电,电流按照信号变化,由电流产生的磁场将磁道磁化即可,是读取的反向操作。本文只涉及的读取操作,对写入过程不做介绍。对于银行卡来说,上面存储的都是数字信号即“0”和“1”,数字信号是利用磁场的方向的变化和频率的变化来表示的。
图4.磁条磁场分布示意图
如图4,是ISO-7811中对于磁条信号的规定。左边是磁条表面实际磁场强度的分布情况,可以看到磁条上的磁场的方向始终在交替变化,即每一个数据位(bit)之间反向都是相反的。此外,为了表示“0”和“1”,标准还规定在单位时间内磁场方向变化一次为“0”,而在相同时间内磁场方向变化两次则为“1”。所以,ISO-7811 规定的信号编码实际是基于频率变化的,如图4中的右侧图所示,每个位都携带了时钟信息,不会产生累积误差。
2.3.4 数据及编码格式
从前面描述可知,在磁条上面可以有3个磁道,每个磁道都由一系列“0”和“1”构成。ISO-7811规定下,这些“0”和“1”组成了一个个字符。不同磁条的编码方式不同,本文只针对磁条2和磁道3,这两个磁条的编码格式相同如图5所示。从表中可以看出,该编码方式下只有16个可能的字符,即仅仅能表示数字和一些特定的控制字符如开始字符和结束字符等。该编码用5个bit组成一个字符,最高位是奇校验位,剩下4个位是字符本身。
图5.字符编码格式
有了字符编码,我们就可以在知道在磁条上面到底存放了什么信息。ISO-7811对于磁条的高层应用格式也做了规定如图6.一个磁道的数据以字符“SF”(即“;”)开始,以“EF”字符(即“?”)结束。最后一个字符“LRC”是校验码,也由5个bit组成。该校验码的每一个bit都是由前述所有字符的相应bit的奇校验得到,所以磁条上的数据是进行了双重奇校验。
图6.磁条数据格式
2.4 通讯接口
当我们完成了卡片的读取后,需要将加密处理后的卡片信息发送到上层软件进一步处理,本文中的上层软件就是智能手机系统如Android/iOS中的应用程序。由于手机的通信接口有限,目前大都是使用耳机插孔做为接口,这是每台智能手机一定会具备的基本硬件。由于历史原因,带有话筒功能的耳机插孔的信号排布并未被标准化,造成了所谓的“正向”和“反向”接口之分。如图7,左右是两个不同型号手机配备的耳机信号定义,主要区别是话筒和地线的互换了位置。至于哪个是“正”哪个是“反”,是没有定义的也是无所谓的。
图7.耳机接口定义:正向和反向
2.4.1 手机发送信息给终端
当手机内的应用软件运行后,会通过耳机发送音频信号给终端,可以通过左声道或者右声道,信号由终端接收并解码。
2.4.2 终端发送信息给手机
当终端有信息需要与手机通信时,由于手机的耳机是手机的输出设备,只能利用手机的话筒进行。该通信过程是通过话筒发送音频信号给手机应用软件,并由软件接收解码。
软件系统
本设计软件部分包括单片机中的固件以及运行在智能手机操作系统中的应用软件,通过自定的通信协议进行通信及应答,以实现从刷卡到卡片信息传递的任务。
3 固件框图
图8.软件架构
4 固件设计目标
本应用面向微型低功耗读卡器,对于功耗非常敏感,故必须尽可能降低主MCU自身的功耗。降低MCU功耗既要充分利用MSP430F系列单片机所具备的低功耗特质,如多种工作模式,智能外设等,有关这方面的应用数不胜数,这里不在赘述;更重要的另一方面,也要从降低解码时的主频入手,尽量减少正常工作时的能量的损耗。
对于刷卡器而言,要求能够稳定的读取卡片内容,适应不同的刷卡速度,同时也要能够同时读出两个磁道(磁道2和磁道3)的内容。
5 磁头信号的软解码
为了读取磁卡中的内容并转换成协议规定的字符,我们需要对磁头信号进行调理放大,然后通过MSP430F5310 单片机的ADC单元进行实时转换分析,并最终得到相应的数据流。
首先,我们要了解磁头信号是什么样子的。图-9是一段真实的信号,这个经放大后的磁头感应信号拥有与磁条磁场类似的波形。从前面对ISO-7811的介绍中我们知道,这些交变的信号就隐藏着我们需要的信息。
图 9. 调理放大后的磁条信号
利用ADC,我们可以对这些波形进行实时采样,并计算分析这些电流脉冲之间的时间。而这些时间间隔的长短就成了我们判断“0”或者“1”的依据。一旦能够确定这些“0”“1”组合,根据图5中的表格,我们可以最终知道在一张磁卡上到底隐藏了什么内容。
6 与手机软件通信
最终我们需要将磁卡中的内容发送给上位机,这里就是发送给手机端的软件,通过耳机插孔。当然在传送这些账户信息之前,很可能我们需要对这些信息进行加密处理,可以使用包括RSA,3DES等各种方法,本设计并未实现此功能。
6.1.1 通信格式
通信格式由设计者定义,以下为本应用笔记自定义的格式。
如图-10所示,通信过程中,使用不同的脉宽表示数位的“0”和“1”。其频率分别是2.2KHz(“0”)及 1.1KHz(”1”),占空比固定为100%。终端和手机应用软件均使用相同的格式。
图10.通信的位格式
有了位格式定义,终端和应用软件之间的高层命令帧格式也可以制定。本参考设计使用如图-11中所示数据帧格式:首字节为命令,且以“1”开始,高位在前。第二个字节为后续数据中包含的字符(4bit)长度。
图11.命令帧格式
在真正的产品设计中,由于所有的数据需要加密后才能发送给上层应用软件,所以实际的数据/命令帧格式一定会有所区别。此外,为了确保通信正确,也可以附加校验码如CRC16等。