关 闭

新闻中心

EEPW首页 > 工控自动化 > 设计应用 > 接触式IC卡接口原理与不同实现方式对比

接触式IC卡接口原理与不同实现方式对比

作者: 时间:2011-08-01 来源:网络 收藏

2 几种与分析

  IFD内的卡读写芯片,按其与IFD内的CPU的通信进行分类,有并行通信、半双工串行通信和I2C通信的读写芯片。图3是一个基于三种通信读写芯片的通用卡读写器的示意。这个系统可以同时对6片卡进行操作,其中每一个IC卡读写芯片都可以驱动2片IC卡。应用系统可以根据实际情况合理选用其中的一种或多种读写芯片。

2.1 IC卡读写芯片的硬件分析

(1)通信方式为并行通信的CTS56I01

  CTS56I01支持两个符合ISO/IEC7816-3标准的T0和T1传输协议的IC卡。它采用并行的方式与IFD内的CPU通信;可以检查到卡的插入与拔出,并自动产生激活与释放时序。CTS56I01内部每个通道都有发送缓冲空、ATR超时、释放检测完成、TS没有收到等10个独立的中断源,当CTS56I01内部的状态发生变化时,可以产生中断信号。系统通过P0口与CTS56I01的数据线相连,地址选择用P2[2:0],两个中断信号经过或门后接到89C51的INT0上。对IC卡的所有操作,只是对CTS56I01内部寄存器的读写操作,方便可靠。CTS56I01采用LQFP-32封装,仅占很小的空间。

(2)通信方式为半双工串行通信的WatchCore

  WatchCore是握奇公司为了方便各种嵌入式设备与IC卡的通信开发而推出的一款IC卡读写芯片,硬件平台采用ST7261单片机,内部掩膜有握奇公司对IC卡进行读写操作的全部程序;支持ISO/IEC 7816 T=0、T=1异步传输协议的各种智能卡,支持对Memory卡操作,支持双卡头操作,与CPU采用半双工串行通信。系统用P1.1和P1.2模拟一个串口与WatchCore进行通信。WatchCore采用SO-20装封,占PCB板很小的位置。

图5

  TDA8020是Philips生产的支持两个独立IC卡的读写芯片,IFD内的CPU采用I2C的方式向TDA8020发送命令和读取状态,通过TDA8020的I/OuC端口向IC卡发送和接收数据。它支持符合ISO/IEC7816-3 T=0、T=1标准的IC卡,也支持符合EMV3.1.1(Europay,MasterCard,VISA)标准的卡。与它Pin-to-Pin兼容的芯片还有ST公司生产的ST8020等。TDA8020有2个地址选择引脚。本系统的地址引脚接地,两个IC卡对应的地址分别为0x40和0x48。I2C的时钟信号和数据信号分别由89C51的P1.3和P1.4进行模拟,IC卡的数据通道I/OuC连89C51的P1.5和P1.6。TDA8020也采用LQFP-32装封。

2.2 IC卡读写芯片的软件设计

2.2.1 通信方式为并行通信的CTS56I01

  CST56I01只有3根地址线,内部却有37个寄存器。其中有8个寄存器可以直接访问,另外的29个寄存器要通过索引地址寄存器(IAR)来访问。其访问分为两步:第一步是将要间接访问的寄存器的地址写到IAR寄存器中;第二步就是从数据寄存器(DR)中读出数据或写入数据到DR寄存器中,来完成对要间接访问的寄存器的访问。

下面的C51子程序是基于图3的写一个字节到要间接访问的寄存器中的子程序。

#define SN2_IAR XBYTE[0x0000]

#define SN2_DR XBYTE[0x0100]

void WriteByteIndexed(BYTE bIndex, BYTE bData) {

P1.0=0;

SN2_IAR = bIndex;

SN2_DR = bData;

}

2.2.2 WatchCore的软件设计

  WatchCore是不带硬件的UART,其串行通信是用软件实时仿真的。通信速度采用9600bps;通信字节格式为1位起始位,8位数据位,1位偶校验位,2位停止位。TXD与RXD电气信号是标准的CMOS电平,可直接与TTL的电路相连。以下是通信时的数据包格式。

(1)命令包

命令包是IC卡读写器内的CPU发往WatchCore的数据,其包格式如下:

NAD

PCB

LEN

DATA

BCC

NAD为卡头选择, NAD=0x00/0x12为主卡头,NAD=0x13为从卡头;

PCB与通信无关,CPU卡T=1时使用,PCB通常设置为0x00;

LEN为数据的字节长度(仅DATA段的字节数);

DATA为发送WactchCore或IC卡内的命令(命令参考ISO7816-4的标准);

BCC为异或校验字节(BCC段前的4段所有字节的异或和)。

(2)数据包

数据包是WatchCore 收到命令包后返回的数据,其包格式如下:

NAD* 是WatchCore把命令包中NAD字节的高低4位互换后的返回。例如,命令包发送NAD=0x12,WatchCore则返回NAD*=0x21;

其它各段与命令包相同。

通信举例(以下数据都用十六进制表示)

对主卡进行复位

发送命令包如下:



评论


相关推荐

技术专区

关闭