IC卡读写接口的可靠性设计

 

摘 要:从几个与可靠性紧密相关的问题入手,较为系统地阐述了 IC 卡读写接口的可靠性设计问题。
  关 键 词: IC 卡;读写接口;可靠性
  中图分类号:TP216 文献标识码:B
  文章编号: 1001-4551-(2000)04-0069-02
  How to Design the Reliable Reading/Writing Equipment of IC Cards
  SHEN Hong-wei 1,YANG Bo2
  1. Shaoxing College of Arts & Science, Science, Shaoxing 312000; 2. Shaoxing Shuilian Instrument Co. ,Ltd, Shaoxing 312000)
  Abstract: This paper sets forth the problem from several respects which they is closely related to the reliability.
  Key words: IC card ; reading /writing interface; reliability
  1 概 述
  IC 卡与磁卡等存储介质相比,在安全性等诸多方面具有不可比拟的优越性,它在国民经济各个领域的应用,是一种必然趋势。
  由于 IC 卡使用中均牵涉到货币的问题,因此,它的可靠性显得至关重要。如何最大限度地提高 IC 卡读写器(或接口)的可靠性,就成了 IC 卡全面推广应用的关键所在。
  IC 卡读写接口的可靠性,包括 3 个方面:
  (1)IC 卡读写过程能可靠地进行;
  (2)任意插拔 IC 卡不会引起 IC 卡损伤;
  ( 3 )在IC卡读写中出现问题引起异常时,能及时告警并恢复到正常状态。
  2 IC 卡读写接口的可靠性设计
  IC 卡读写接口的电原理,一般如图 1 示:
  

   2.1 微处理控制器(CPU)的选型
  在 IC 卡读写装置中,大多采用目前流行的单片机,例如 ATMEL 的 89C2051,或 MICROCHIP 的 PICI6 系列中的 PICI6X84 等。这些主流单片机的性 / 价比较高,而且真正能单片工作,既可减少 PCB 板面积,又可提高系统工作可靠性;特别是 PICI6F84单片机,除了具有非常适合新品试投运的现场可编程的 Flash Memory 外,内部还有 64 字节的 EEPROM ,尤其适用于存放 IC 卡数据动静态加(解)密因子,对于进一步提高 IC 卡数据的可靠性、安全性十分有利,应为 IC 卡仪表(水表等)首选的 CPU 单元。但由于 IC 单片机一般没有串行接口,因此对于 IC 卡读写器,则宜采用 89 系列单片机。
  2.2 IC卡电源的上下电控制
  IC卡的上电一般是可知的,即对 IC 卡读写时需要给 IC
  卡上电(送电源)。因此,IC 卡的上电控制比较简单。由于 IC
  卡读写电流很小,一般为几个 mA ,因此其实现可按照图 1 所
  示。由单片机来的 IC_PWR 信号通过小功率三极管 9012 控制系统的 +5V 电源切入 IC 卡座与否。当 IC 卡上电后,发光二极管 L1 被点亮,起读写指示作用。每次对 IC 卡读写完成后,即及时下电,以减少插拔时带电的可能性。
  要保证 IC 卡能任意插拔(有可能处于带电状态),不致引起 IC 卡损坏,必须要使得 IC 卡拔卡过程处于 IC 卡断电的状态。要做到这点,必须要保证 IC 卡的下电迅速及时。为此,可将IC 卡的拔卡处理由最高级中断程序来实现(注意:采用边沿触发方式)。如何及时检测拔卡动作是问题的关键。利用 IC 卡座的 IC 卡检测开关(常闭)可以解决此问题。
  但是,由于机械触点开关在动合过程中不可避免存在抖动,因此怎么避免因抖动引起中断重入进而引起系统死机的问题成为最终症结所在。如果采用硬件“去抖”(如施密特电路),不仅增加成本,而且实践发现也不是十分可靠;采用软件延时“去抖”,只要延时常数合适,不仅保证 IC 卡下电的迅速及时,而且十分有效地解决了抖动问题。 IC 卡下电中断程序框图,如图 2 示。
  

   2.3 IC卡与 CPU间串行信号的限流
  为了保证 IC 卡带电插拔的安全可靠,需对 IC 卡与 CPU 间串行通讯的数据信号与时钟信号进行限流(图 1 虚线框内两电阻即为限流电阻),限流电阻阻值一般可取 200Ω左右。具体如图1示。此限流电阻同时可以防止往 IC 卡座中插入导电的异物而引起系统损坏。
  2.4 IC卡的可靠读写
  IC 卡的可靠读写主要包括以下两方面:
  ( 1 )读写过程准确可靠;
  ( 2 )避免无卡时进行读写操作。
  为保证 IC 卡读写过程准确可靠,只要保证读写函数严格按照 IC 卡的读写时序外,采用“重读”和“回读”措施。即:读 IC 卡时,采用读两次的方式,如两次相符,则数据有效,否则再进行第三次读;写 IC 卡时,先将数据写入,再回读比较,相符则继续,否则重写一次,以免由于偶然的写失败导致得出 IC 卡失效的错误结论。
  为避免 IC 卡读写接口死机以及上位机死机,流程如图 3示。
  上位机收到无卡标志字节后,可以避免进行无卡状态下的误操作,进而避免死机现象。
  

   2.5 与上位机通讯的RS-232C通讯接口及可靠通讯的实现TTL 与 RS-232C 电平转换由诸如 Max202E 接口芯片实现,采用简单的软握手三线制通讯方式。为了确保串行通讯的可靠性,应着重从上下位机通讯软件的以下几个方面入手:
  ( 1 )通讯电缆尽可能采用屏蔽三芯电缆;
  ( 2 )合理选择通讯波特率;
  由于上下位机通讯的数据量很小(最多为 IC 卡的容量),因此通讯波特率可选低一些,如 2400 。但要高度重视下位机(即 IC 卡读写装置)的波特率参数整定问题,对于 51 系列 CPU 尤其要注意电源管理寄存器中 SMOD 位的设置。以 2400 波特率为例,当 SMOD = 0 时,波特率参数为 0F9H ,实际波特率为 2232 ,此时波特率相对误差是 7%;而当 SMOD = 0时,波特率参数为 0F3H ,实际波特率为 2404 ,此时相对误差是 0.16%,满足正常通讯所规定的波特率相对误差小于 5%的要求。
  ( 3 )上位机管理系统的开发平台目前较多采用基于Windows95环境的诸如 VFP3.0 、DELPHI 4.0等 RAD 开发平台,其中的串行通讯接口程序既可直接使用串行通讯控件 MSCOMM ,也可采 用基于直接对串口操作的动态链接库(DLL)方式。前者编程简单,后者则具有较强的硬件驾驭能力,但动态链接库一般要借助嵌入汇编实现。
  如果上位机的管理软件是基于 DOS 环境的,那么必须注意看通 讯接口程序采用调用BIOS,函数,例如 TC 2.0 的 BIOSCOM()函数时,要注意 BIOS 串行通讯函数对握手信号的奇特要求;否则,一般的三线制通讯程序无法正常运行。
  2.6 工作状态的有效提示
  大多 IC 卡读写装置一般有声光指示(报警)接口,提到的发光二极管即为 IC 卡读写工作状态指示;声音提示可采用效率高、体积小的有源或无源蜂鸣器来实现。
  2.7 死机后的恢复
  如何避免上下位机均不死机或能简单恢复正常工作呢?
  对于作为下位机的 IC 卡读写接口,我们利用 IC 卡能随意插拔,再结合 IC 卡的拔卡处理是一个高级中断的特点,将 IC 卡的拔卡中断程序设计成两个分支:
  (1)非 IC 卡读写且非与上位机通讯状态;
  (2)在与上位机通讯、或正在对 IC 卡读写状态。
  第一种情况下,中断子程序是简单的拔卡 Beep 告警后,直接中断返回;对于第二种情况,则会引起系统工作失常甚至死机,在恢复中断环境后,用强制跳转指令强制从主程序开始执行,达到复位的效果。程序框图,如图 2 示。
  对于上位机,为了避免由于基于查询方式的串行通讯失常引起死机现象,可采取限时通讯的办法。
  5 应用举例
  将可靠性设计思想成功地应用于本地的 IC 卡自来水预收费管理系统中。其中 IC 卡读写器采用 ATMEL 89C2051 单片机为内核,采用交叉技术的三线制串行通讯方式与上位机的基于 DELPHI 4.0 的预收费管理系统软件进行通讯 IC 卡水表则采用 PIC16F84 单片机。经过近两个月的实际运行,可靠性是令