两种加密IC卡在同一系统中的共存技术

2008-02-20 18:31:49来源: www.laogu.com

  

  摘要两种读写时序完全不同的IC卡在同一种系统中共存时,系统必须能够正确识别卡类型,然后才能按对应的读写时序对其读写。文章以AT88SC1604加密卡SLE4442加密卡为典型样例,通过分析具体时序,给出获取卡型的方法及完整程序。

  关键词AT88SC1604卡 SLE4442卡 卡型识别 程序设计

  引言

  随着国家“金卡工程”的不断发展,各种IC卡应用方案不断涌现。如预付费系统、门禁系统、保险系统等。在某一特定系统中,很可能不同用户对象使用两种不同IC卡。如本文设计的电能预付费系统中,管理员采集数据时,使用的是Atmel公司出品的大容量加密IC卡AT88SC1604;而普通用户使用的是Siemens公司出品的小容量预付费卡SLE4442。这两种卡的读写时序完全不同。这就需要系统在对IC卡读写之前,能够自动识别卡的类型,然后才能按照对应的时序对其读写。下面谈谈AT88SC1604卡与SLE4442卡在系统中的共存技术。

  1IC卡简介

  国际标准化组织针对IC卡在不同领域的不同应用,制定了IC卡应用时所应参考图1IC卡引脚或遵循的标准——ISO7816标准。然而该标准只严格定义了IC卡的物理特征及某些特定时序,预留了某些特性供不同厂家自己扩充。IC卡引脚示意如图1所示。

  AT88SC1604卡为Atmel公司出品的大容量加密IC卡,内部有4个分区(分等分区卡和不等分区卡两种),每个分区均有独立的安全验证逻辑。整张卡还有一个总的验证逻辑。对于等分区卡,内部前三个分区每个分区的EEPROM容量为4096×1位,分区四的容量为3656×1位,EEPROM按位组织。SLE4442卡为Siemens公司出品的小容量加密IC卡,EEPROM容量为256×8位,按字节组织。二者引脚特性如表1所列。

  图2SLE4442卡的命令帧格式AT88SC1604的FUS引脚为编程信号端,PGM为擦、写控制信号端。这是与SLE4442卡在硬件特性上的不同之处。

  表1引脚特性

  引脚号〖〗C1〖〗C2〖〗C3〖〗C4〖〗C5〖〗C6〖〗C7〖〗C8AT88SC1604〖〗VCC〖〗RST〖〗CLK〖〗N.C.〖〗GND〖〗N.C.〖〗I/O〖〗N.C.SLE4442〖〗VCC〖〗RST〖〗CLK〖〗FUS〖〗GND〖〗N.C.〖〗I/O〖〗PGM

  2AT88SC1604卡与SLE4442卡时序分析

  AT88SC1604与SLE4442卡均符合ISO78163规定的同步协议,也就是在时钟的下降沿后读取数据。对于AT88SC1604卡,某个地址读、写时,需要先设定其内部地址计数器到指定地址,然后才能开始对该地址读写。时钟信号的每个下降沿,都会令其内部地址计数器的值自动增1;每次的复位操作,都会令其内部的地址计数器归零。由于其内部地址计数器的值是不可读的,因此在对该卡读、写之前,必须先复位一次,才能确保让其内部的地址计数器到指定的地址。而SLE4442卡则无需繁琐的地址计数器。SLE4442工作在命令/响应模式,每帧命令为3字节。对其内部某个地址读、写时,3字节的指令包含了该地址信息。其命令帧格式如图2所示。其中Control字段为命令关键字,Address字段为地址信息,Data字段为写操作时的待写入数据。这一点与AT88SC1604卡是截然不同的。

  因此,当对插入的IC卡进行读写之前,必须先得到卡类型,才能按照对应的时序对其读写。SLE4442卡的复位与应答(ATR: Answer To Reset)时序如图3所示。

  从图2中可以看出,SLE4442卡在复位后,需要额外的32个脉冲。此时输出的32位数据为卡对复位的应答响应。

  图3SLE4442卡ATR操作AT88SC1604卡的复位操作时序如图4所示。

  图4AT88SC1604卡复位操作AT88SC1604卡在复位后,地址计数器被清零,内部第0单元的数据被送到数据线上。以后每个时钟的下降沿,地址计数器自动增1,同时该地址单元的数据自动图5IC卡接口电路被送到数据线上。按照SLE4442卡的ATR复位方式对卡复位,会令AT88SC1604卡复位的同时,其内部地址计数器的值提高到32。如果接着按SLE4442卡的读时序发送3字节读命令,会将AT88SC1604卡的位地址计数器提高到56(字节地址为7)。此时按照统一的读时序就可以读出此字节地址的值。对于AT88SC1604卡,此地址为发行者区(IZ);对SLE4442卡,此地址为厂商标识区(FZ)。若二者此地址的数据不同,则系统便能正确识别出该卡类型。这两个地址的数据出厂时可以根据需要定制,默认情况下AT88SC1604卡为0xFF,SLE4442卡为0x15。因此,可以按照读SLE4442卡的方式读第7字节地址。根据该地址的数据判断卡的类型。

  3程序设计

  系统IC卡接口电路如图5所示。

  需要注意的一点是,IC卡在上电前,RST引脚必须保持低电平,上电后卡才会被“激活”。否则对于AT88SC1604卡,验证密码的操作将不会通过。

  获取卡类型的程序如下:void ICReset (void)

  {unsigned char i,ATRBuf\[4\];

  IC_DAT=1;_nop_();_nop_();

  /*释放数据口线*/

  IC_RST=1;_nop_();_nop_();

  IC_CLK=1;_nop_();_nop_();

  IC_CLK=0;_nop_();_nop_();

  IC_RST=0;_nop_();_nop_();/*复位操作结束*/

  for(i=0;i<4;i++)

  {ATRBuf\[i\]=ICReadByte ();

  /*对于SLE4442卡,这是ATR操作*/

  }

  }

  unsigned char ICReadByte (void)

  {unsigned char i,RData=0;

  IC_DAT=1;IC_CLK=0;_nop_();_nop_();

  for(i=0;i<8;i++)

  {RData<<=1;

  RData =IC_DAT;

  IC_CLK=1;_nop_();_nop_();IC_CLK=0;

  }

  return (DataInvert(RData));

  /*将读出的数据逆序返回,为实际读取的数据*/

  }

  void ICSendCmd (unsigned char *CmdBuf)

  {unsigned char i,j,ch;

  IC_CLK=1;_nop_();_nop_();

  IC_DAT=0;_nop_();_nop_();

  IC_CLK=0;_nop_();_nop_();

  /*IFD:SLE4442卡的启动条件*/

  for(i=0;i<3;i++)

  {ch=CmdBuf\[i\];

  for(j=0;j<8;j++)

  {IC_DAT=ch&0X01; /*输出数据到IC卡*/

  IC_CLK=1;_nop_();_nop_(); IC_CLK=0;

  ch>>=1;

  }

  }

  IC_DAT=0;_nop_();_nop_();

  IC_CLK=1;_nop_();_nop_();

  IC_DAT=1;_nop_();_nop_();/*停止卡*/

  }

  unsigned charICGetCardType(void)

  {unsigned char CmdBuf\[3\]={0x30,0x07,0xFF},ch,CardType=0;

  ICReset (); /*发送32个脉冲*/

  ICSendCmd (CmdBuf);/*发送24个脉冲*/

  ch=ICReadByte (); /*读取该地址的值*/

  switch(ch) {/*卡型判断*/

  case0x15:CardType=CARD_TP_4442;

  break;/*这是4442卡*/

  case0xFF : CardType=CARD_TP_1604;

  break;/*这是1604卡*/

  default:break;

  }

  return CardType;/*返回卡类型编号*/

  }

  结语

  通过分析两种卡读写时序的异同来编写控制程序,系统可以正确识别所插入IC卡的类型。之后,系统就可以分别按照相应的读写逻辑对其读写,达到了读写时序不同的两种卡在同一种系统中共存的目的。

  参考文献

  1于宏军,赵冬艳. 智能(IC)卡技术全书. 北京:电子工业出版社,1996

  2Atmel. AT88SC1604 Datasheet

  3Siemens. SLE4442 Datasheet

  本文使用海纳锐利编辑并转载, 版权归原作者所有。

关键字:nop_  同步协议  加密卡  IC卡读写  SLE  下降沿  IC_CLK  unsig

编辑:ssb 引用地址:http://www.eeworld.com.cn/designarticles/sape/200802/article_17773.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
论坛活动 E手掌握
微信扫一扫加关注
论坛活动 E手掌握
芯片资讯 锐利解读
微信扫一扫加关注
芯片资讯 锐利解读
推荐阅读
全部
nop_
同步协议
加密卡
IC卡读写
SLE
下降沿
IC_CLK
unsig

小广播

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 安防电子 医疗电子 工业控制

北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2016 EEWORLD.com.cn, Inc. All rights reserved