支持B类CPU卡的5 V接触式读写器设计
扫描二维码
随时随地手机看文章
接触式集成电路(IC)卡国际标准(ISO/IEC 7816)由国际标准化组织(ISO)和国际电子技术委员会(IEC)共同制定,该标准对接触式IC卡领域的物理特性、电信号和传输协议等各个方面进行了统一规范。根据该标准,按照供给卡的电源电压不同而将卡分为A、B两类,即5 V电压的A类卡和3 V电压的B类卡[1]。传统的接触式IC卡读写器大多采用A类接口设备或B类接口设备,只能对单一的A类卡或B类卡进行操作,而具有AB类接口设备的读写器却应用不多。随着接触式IC卡在日常生活中的广泛应用,具有AB类接口的读写器将有广阔的市场。本文设计的读写器采用5 V的电源电压供电,可以实现对B类卡的全功能读写,该技术可以解决在5 V的系统中对A类卡和B类卡进行同时读写的问题。
1 系统硬件设计
本文中的IC卡读写器采用ATMEL公司的高性能、低功耗的8位AVR微处理器ATMEGA32,电平转换芯片采用美国国家半导体公司(National Semiconductor)的LM1117-3.3,可以给卡座提供3.3 V的电源电压。微处理器与卡座之间的接口转换电路采用德州仪器公司(TI)的SN74TVC3010器件,该芯片可以对10路信号同时进行转换,完全可满足读写器设计的需要。读写器硬件电路结构如图1所示,该读写器主要由3部分组成。
(1)电源。主要是为整个读写器提供稳定的5 V和3 V的电源电压。5 V电源通过USB口由上位机直接提供,可以作为读写器内微处理器、蜂鸣器电路、光电指示电路的电源。5 V电源电压通过LM1117-3.3芯片的转换后可以得到稳定的3.3 V的电平,为后续的SN74TVC3010接口电路、卡座提供电源电压。具体的电路如图2所示。
(2)数据交换。PC机与读写器的数据交换也即是与ATMEGA32单片机之间的数据交换,PC机通过上位机软件向单片机发送命令以实现对卡片的读写操作。本读卡器采用RS232串口与PC机进行通信,由于接口电平的不同,在读卡器内部应用MAX232芯片实现了不同电平间的转换[2]。
(3)读写器与CPU卡的通信。在读卡器上有一个常闭型接触卡座,这是读写器与CPU卡进行通信的接口,通过符合ISO 7816标准要求的8个触点实现与CPU卡的连接[3]。
SN74TVC3010为一双向电平转换器件,在转换过程中不需要方向控制信号。SN74TVC3010芯片包含由11个N 沟道导通晶体管组成的晶体管阵列,阵列中的所有晶体管都具有相同的电气特性,它们的门在内部连接在一起,因此,其中的任一个晶体管都可以作为参考晶体管,其他的作为导通晶体管,每个导通晶体管的低压端上的最大正电压限制为由参考晶体管设置的电压。由于晶体管是对称制造的,且I/O 信号是双向经过每个晶体管,所以每位的任一端口连线可用作低压端[4]。
本文设计的读写器中参考晶体管的一端通过1个200 kΩ电阻接5 V电源,另一端接3.3 V电源,如图3所示。当数据从卡座向单片机传输时,电压达到3.3 V,导通晶体管关闭,单片机管脚上的电平通过上拉电阻拉至5 V。当数据从单片机向卡座传输时,卡座端的电压被钳位在3.3 V左右。这样可准确地实现单片机与卡片之间的正常通信。
2 底层固件设计
本读写器固件编程采用C语言编写,编程环境为IAR Embedded Workbench,仿真及下载底层固件在AVR Studio 4中完成。固件的整体结构如图4所示。
单片机通过RS232串口接收上位机发送的命令,主程序按照预先设计的通信协议格式对其解析之后,如果是正确的命令,则转到相应的命令处进行执行,否则向上位机返回错误信息,并继续接收新的命令。该固件程序可以实现读写器与上位机之间通信速率在9 600 b/s、19 200 b/s、38 400 b/s、57 600 b/s、76 800 b/s、115 200 b/s内任意选择。
本读写器可以对符合T=0、T=1协议的B类CPU卡进行读写操作,也可以对其他的存储卡、逻辑加密卡进行程序扩展。T=0的协议卡以单字节的字符为基本单位,T=1的协议卡以有一定长度的数据分组为传输的基本单位。程序设计过程中,通过判断复位应答来获得卡片的协议类型,再根据不同协议的要求执行相应的处理。如图5所示为主程序执行流程。
系统上电后,首先执行系统初始化,包括串口的初始化、系统声光电路的指示设置等,如果发光二极管显示正常,表明读写器已经打开,可以正常工作。在卡片插入之后,常闭型接触卡座的查询卡片状态管脚被弹开,电压变为高电平,说明卡片已到位,此时按照从串口接收的有效命令对卡进行复位、密码校验、读写数据等操作。
3 应用软件设计
读写器的应用软件是读写器系统的一个重要组成部分,它主要实现对读写器参数的设置、数据的读写和显示、IC卡状态的判断等,是操作读写器的最直观接口[3]。
该应用软件的设计环境为Microsoft Visual C++ 6.0。在软件设计过程中采用了Visual C++提供的ActiveX控件MSComm来实现对串口的访问,该控件的使用不需要了解较为复杂的API函数就可以非常方便地进行串口编程[6]。
该应用软件界面友好、使用非常方便,只需要把串口通信的串口号、通信速率设置好,就能成功对读写器进行操作,其界面如图6所示。设置好串口参数,输入相应的读写指令后,在OUTPUT框内就可以看到读写器返回的结果。
该接触式读写器经检测在Windows环境能够对B类CPU卡进行全功能读写,可以广泛应用于金融、医疗、保险等行业。同时该读写器的读写速度没有因应用了电平转换电路而受到明显的影响,所以真正实现了在5 V的系统中对B类卡的读写,这对设计AB类接口设备具有指导意义。
参考文献
[1] 王爱英.智能卡技术-IC卡(第二版)[M].北京:清华大学出版社,2000.
[2] 何英慧,张其善.接触式智能卡读写器的研制[J].电子测量技术,2006,29(3):65-66.
[3] 张国云.加密型IC卡与AT89C51单片机接口程序设计[J] .电子与自动化,2000(5):32-34.
[4] Texas Instruments Incorporated. SN74TVC3010 10-bit voltage clamp datasheet,1999.
[5] 李瀛,王欣,吴晓波,等.基于USB接口的lC卡读写器[J]. 东北大学学报,2004,25(11):1046-1049.
[6] 李现勇.Visual C++串口通信技术与工程实践(第二版)[M].北京:人民邮电出版社,2004.