引言
非接触式IC卡通过射频感应从读写设备获取能量和交换数据,所以非接触式IC卡又叫射频卡.与传统的接触式IC卡相比,非接触式IC卡无论从其可靠性、易用性、安全性还是抗干扰性等方面都有着明显的优势,从长远角度看,非接触式IC卡必将取代当前广泛使用的接触式IC卡.目前,国内引进的射频IC卡主要有荷兰Philips公司的Mifare和美国TIMIC公司的E55xx系列卡等.而Philips公司的Mifare卡占世界范围同类智能卡销量的60%以上,成为市场的主流产品.在我们承担非接触式IC卡燃气表的开发之处,仔细分析了市场上现有的射频卡应用的成功经验与失败教训时发现,许多产品不同程度存在着射频信号读写不稳定和数据通讯不可靠等问题,因此,如何提高射频卡读写模块的稳定性和可靠性是本项目研究的重点.
1 MF1射频卡的工作原理和存储结构
1.1工作原理
非接触式IC卡燃气表中射频卡的电气部分由天线、1个高速(106Kb/s)的RF接口、1个控制单元和1个8K位EEPROM组成.其工作原理如下:燃气表内的读写模块向射频卡发一组固定频率的电磁波,卡片内有1个LC串联谐振电路,其频率与读写模块发射的频率相同,在电磁波的激励下,LC谐振电路产生共振,从而使电容内有了电荷,在这个电容的另一端,接1个单向导通的电子泵,将电容内的电荷送到另一个电容内储存,当所积累的电荷达到2V时,此电容可作为电源为其他电路提供工作电压,将非接触式IC卡(用户卡)内数据发射出去或接收读写模块的数据 。
1.2存储结构和组成
在射频卡具体选型时,考虑到通用性和安全性,首选Philips公司典型产品Mifare1ICS50(简称MF1)卡.
MF1卡片的存储容量为1K×8位字长,采用EEPROM作为存储介质.整个结构划分为16个扇区,编为扇区0~15.每个扇区有4个块(Block),分别为块0,1,2,3.每个块有16个字节.一个扇区共有16Byte×4=64Byte.每个扇区的第4块也称作尾块,包含了该扇区的密码A(6个字节)、存取控制(4个字节)、密码B(6个字节),是控制块.其余3块是数据块.
在本系统中,MF1卡片用作燃气表用户卡时,将扇区1、2用作存储用户相关信息,剩余空间可“一卡多用”,具体数据存储分布如图1所示.
MF1卡每个扇区的密码和存取控制都是独立的,可以根据实际需要设定各自的密码及存取控制,存取控制决定各块的读写权限与密码验证.16扇区中的每块(包括数据块和控制块)的存取条件是由密码和存取控制共同决定的.
2硬件设计
硬件主要包括MCU电路模块、基于RC500的基站模块、天线模块电路和相关的匹配电路等,系统原理连接示意图如图2所示.
2.1 MCU部分
单片机选用低功耗、安全性高和稳定性强的MC68HC908GP32(简称GP32)芯片[2].多年来,笔者一直致力于FreeScale公司(前身为原Motorola公司的半导体公司)所生产的芯片应用开发工作.公司的08系列MCU型号就有100多种,其中的GP32比较适合燃气表内射频卡的读写模块设计.GP32不仅性能稳定而且具有性能价格比高的突出优势.其自身有32KB的Flash存储器、支持在线编程、8MHz内部总线频率和低功耗等性能,尤其还具有8个字节(32位)Flash区的密码保护,这就大大加强了气表内信息的安全性.
2.2基站部分
系统的基站单元采用PHILIPS公司的MF-RC500芯片.MF-RC500是与射频IC卡实现无线通信的核心部件,也是读写模块读写MF1卡的关键接口芯片,该芯片为目前用于13畅56MHz频段非接触通信的主流读卡IC.MF-RC500芯片采用先进的调制和解调技术,支持13畅56MHz频段所有被动非接触式通信方式和协议,并支持ISO14443A中所有的层.MF-RC500芯片内的发送器部分在不增加外接有源电路时可直接驱动的天线操作距离为100mm,接收模块部分则提供一个稳健可靠的解调/解码电路,用于ISO14443A兼容的应答信号.MF-RC500芯片的基带部分包括ISO14443A帧处理、CRC校验和快速CRYPTO1加密算法,这都给燃气表内的信息安全和系统可靠运行提供了有力的保障[3].
2.3天线及相关匹配电路部分
MFRC500根据其寄存器的设定对发送数据进行调制得到发送的信号,通过由天线驱动引脚TX1和TX2驱动的天线以13畅56MHz的电磁波形式发送出去.在其射频范围内的非接触卡采用RF场的负载调制进行响应。天线接收到卡片的响应信号经过天线匹配电路送到MF-RC500的接收引脚RX,芯片内部的接收器对接收信号进行解调、译码,并根据寄存器的设定进行处理,最后将数据发送到并行接口由微控制器读取[4].为了获得稳定、可靠的射频信号,天线部分的电路设计非常关键,这也是一门很深入的技术.
2.3.1高频滤波电路
为了防止信号线上的干扰,使用了EMC高频滤波电路.MF-RC500的天线引脚TX1,TX2,RX以及参考电压VMID先经过EMC滤波电路,然后再与天线匹配电路连接.参见图3的EMC滤波电路图,L1, L2, C7, C8, C9, C10组成了MF-RC500射频发送信号的滤波电路;R1, R2, C5, C6组成了接收信号的滤波电路,为了达到良好的电磁兼容,在制作印刷电路板(PCB)时,这部分的电路必须紧靠MF-RC500的天线引脚RX,TX1,TX2.
2.3.2天线及匹配电路
为了给射频卡提供足够的能量,天线与卡片间必须实现紧耦合,耦合系数最少为0畅3(耦合系数为0时,即由于距离太远或磁屏蔽导致完全去耦;耦合系数为1即全耦合).因此天线线圈采用直径为1mm的导线,设计为3圈的65mm×54mm方形天线.此时,天线线圈产生的电感,有下列公式计算:
其中:L—天线电感;I—环形导体的长度(即1圈的周长),单位为cm;D—导体的宽度,即导线直径,单位为mm;N—线圈的圈数.
由公式(1)可计算出天线线圈的电感值约为1μH。为了使天线线圈接收的来自芯片天线引脚的射频信号尽可能减少损失与辐射,采用了如图3所示的天线匹配电路对其进行阻抗转换.天线匹配电路的电容 C1, C2, C3, C4的参数由天线的电感值决定.由于每块不同的天线电路板实际的天线线圈电感值总是会稍有差异,因此在天线匹配电路上使用了一个可调电容 C0,通过调整可调电容将每块天线板的读写距离调整到最佳.
射频天线电路原理图
3软件设计
软件部分主要由一个主程序和若干子程序(或函数)构成,在主程序中实现对子程序(或函数)的调用,软件均采用模块化程序设计方法.按气表与MF1卡片的通信流程,将读写模块与用户卡的通信操作使用函数的形式封装起来,构成读写模块的射频通信函数[5]通信函数有:询卡/应答函数mf_request_ans(),防冲突函数mf_anticoll(),选中卡片函数mf_select(),密码认(.)证函数mf_authen(),写气量函数mf_write(),卡清零函数mf_clear().对于这些函数的具体实行过程,限于篇幅,仅对密码认证过程的实现和主程序操作流程作详细介绍.
3.1密码认证过程实现
MF1内部的安全加密算法叫做Crypto1,使用的密码长度是48bit,即6个字节.MF1卡中的数据,都有密码保护.只有使用正确的密码,才能成功进行卡密码校验,然后才能访问存储在EEPROM中的卡片数据.在按照ISO14443A协议成功选中一张卡后,用户若要继续访问该卡,就必须首先进行卡的密码验证.
使用正确的密码进行有效的密码验证需要经过3个阶段:
1)通过LoadKeyE2(LoadKeyE2与下文中的LoadKey,Authent1和Authent2等均为MF-RC500命令)或LoadKey命令向内部密码缓冲区载入密码.
2)开始Authent1命令.命令执行后,可通过密码错误标志位(寄存器ErrorFlag的第6位)来检查命令的执行情况.
3)开始Authent2命令.命令执行后,可通过密码错误标志位(寄存器ErrorFlag的第6位)以及Crypto1On位(寄存器Control的第3位)来检查命令的执行情况.
若Authent2命令执行正确,则通过了对该卡的存储密码的校验,可以进一步对卡片存储区的用户数据(如:购买气量,上次剩余气量等)进行改写操作.
3.2主程序设计
读写用户卡主程序操作流程如图4所示,当燃气用户卡接收到读卡模块的指令后,经过指令译码,通过控制逻辑进行数据处理,并返回相应的处理结果.当用户卡位于气表读卡模块的有效工作范围之外时,卡上芯片处于无电状态,不能进行任何操作;当其进入读卡器的有效工作范围用户卡上电复位,进入等待状态,在此状态下可正确接收和响应读卡器发送的询卡/应答指令,并进行防冲突、相互认证、读、写、加、减、恢复、传输等操作.最后,将从用户卡中读出的气量数与GP32内存剩余的气量数相加,并存回内存,然后将卡清零后退出.
主程序操作流程
4结语
介绍了一种基于PHILIPS公司MF-RC500芯片的射频卡读写模块在非接触式IC卡燃气表开发中的应用,该模块经过测试,具有响应速度快、使用简便、读卡距离远和通信稳定可靠的显著特点.如果适当加以改装的话,完全可应用到水、电表中,实现这类传统仪表的升级换代