接触式IC卡接口原理与不同实现方式对比_接口电路论文
关键词:iso/iec7816 接口技术 接触式ic卡 并行通信 半双工串行通信 i2c总线通信
引 言
牐營c卡 (integrated circuit card,集成电路卡)是继磁卡之后出现的又一种新型工具。ic卡在有些国家和地区也称智能卡(smart card)、智慧卡(intelligent card)、微电路卡(microcircuit card)或微芯片卡等。它是将一个微电子芯片嵌入符合iso 7816标准的卡基中,做成卡片形式;已经十分广泛地应用于包括金融、交通、社保等很多领域。
ic卡读写器是ic卡与应用系统间的桥梁,在iso国际标准中称之为接口设备ifd(interface device)。ifd内的cpu通过一个接口电路与ic卡相连并进行通信。ic卡接口电路是ic卡读写器中至关重要的部分,根据实际应用系统的不同,可选择并行通信、半双工串行通信和i2c通信等不同的ic卡读写芯片。
1 接触式ic卡接口技术原理
ic卡读写器要能读写符合iso7816标准的ic卡。ic卡接口电路作为ic卡与ifd内的cpu进行通信的唯一通道,为保证通信和数据交换的安全与可靠,其产生的电信号必须满足下面的特定要求。
1.1 完成ic卡插入与退出的识别操作
ic卡接口电路对ic卡插入与退出的识别,即卡的激活和释放,有很严格的时序要求。如果不能满足相应的要求,ic卡就不能正常进行操作;严重时将损坏ic卡或ic卡读写器。
(1)激活过程
为启动对卡的操作,接口电路应按图1所示顺序激活电路:
◇rst处于l状态;
◇根据所选择卡的类型,对vcc加电a类或b类,正常操作条件下vcc的电特性见表1;
表1 正常操作条件vcc的电特性
符 号 | 最小值 | 最大值 | 条 件 |
vvcc/v | 4.5 2.7 | 5.5 3.3 | a类 b类 |
icc/ma | 60500.5 | a类,在最大允许频率 b类,在最大允许频率时钟停止 |
◇vpp上升为空闲状态;
◇接口电路的i/o应置于接收状态;
◇向ic卡的clk提供时钟信号(a类卡1~5mhz,b类卡1~4mhz)。
图3
如图1所示,在t’a时间对ic卡的clk加时钟信号。i/o线路应在时钟信号加于clk的200个时钟周期(ta)内被置于高阻状态z(ta 时间在t’a之后)。时钟加于clk后,保持rst为状态l至少400周期(tb)使卡复位(tb在t’a之后)。在时间t’b,rst被置于状态h。i/o上的应答应在rst上信号上升沿之后的400~40 000个时钟周期(tc)内开始(tc在t’b之后)。
在rst处于状态h的情况下,如果应答信号在40 000个时钟周期内仍未开始,rst上的信号将返回到状态l,且ic卡接口电路按照图2所示对ic卡产生释放。
(2)释放过程
当交换结束或失败时(例如,无卡响应或卡被移出),接口电路应按图2所示时序释放电路:
◇rst应置为状态l;
◇clk应置为状态l(除非时钟已在状态l上停止);
◇vpp应释放(如果它已被激活);
◇i/o应置为状态a(在td时间内没有具体定义);
◇vcc应释放。
图4
1.2 通过触点向卡提供稳定的电源
ic卡接口电路应能在表1规定的电压范围内,向ic卡提供相应稳定的电流。
1.3 通过触点向卡提供稳定的时钟
ic卡接口电路向卡提供时钟信号。时钟信号的实际频率范围在复位应答期间,应在以下范围内:a类卡,时钟应在1~5mhz;b类卡,时钟应在1~4mhz。
复位后,由收到的atr(复位应答)信号中的f(时钟频率变换因子)和d(比特率调整因子)来确定。
时钟信号的工作周期应为稳定操作期间周期的40%~60%。当频率从一个值转换到另一个值时,应注意保证没有比短周期的40%更短的脉冲。
2 几种实现方式的对比与分析
ifd内的ic卡读写芯片,按其与ifd内的cpu的通信方式进行分类,有并行通信、半双工串行通信和i2c通信的读写芯片。图3是一个基于三种不同通信方式读写芯片的通用ic卡读写器的原理示意。这个系统可以同时对6片ic卡进行操作,其中每一个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
(3)通信方式为i2c的tda8020
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;
其它各段与命令包相同。
通信举例(以下数据都用十六进制表示)
对主卡进行复位
发送命令包如下:
12 00 05 00 12 00 00 00 05
若主卡头中无卡,则watchcore返回:
21 00 02 62 00 41
若主卡头有一张t=0的cpu卡,则可能返回:
21 00 11 3b 7a 18 00 00 21 08 11 12 13 14 15 16 17 18 90 00 d8
2.2.3 tda8020的软件设计
tda8020与ifd内cpu的通信是用i2c总线方式进行的。通过i2c接口,ifd内的cpu可以向tda8020发送命令或读取tda8020的状态。tda8020有两个地址选择引脚(sad0和sad1)。在图3中,这两个地址选择引脚接地,对应两个ic卡的i2c总线地址分别是40h和48h。如果系统中有别的i2c总线器件,可以按表2的方式进行寻址。
表2 tda8020的i2c地址选择表
sad1 | sad0 | card1 | card2 |
0 | 0 | 40h | 48h |
0 | 1 | 42h | 4ah |
1 | 0 | 46h | 4ch |
1 | 1 | 48h | 4eh |
(1)向tda8020写入命令的格式
图4为向tda8020写入命令的格式。按图3所示,对卡1的地址和写的字节为40h。
其中控制字节各位的含义如表3所列。
表3 命令控制字节各位的含义
名 称 | 位 | 说 明 |
start和/stop | 0 | 为1,产生一个冷复位的激活时序:为0,产生一个释放时序 |
warm | 1 | 为1,产生一个热复位时序 |
3/5v | 2 | 为1,设定卡的操作电压为3v;为0,设定卡的操作电压为5v |
pdown | 3 | 为1,设定卡为下电模式;为0,设定卡为正常工作模式 |
clkpd | 4 | 为1,设定下电模式下clk停在高电平;为0,设定下电模式下clk停在低电平 |
clksel1 | 5 | 两位设定卡在正常工作模式时的工作时钟频率见表4 |
clksel2 | 6 | |
i/oen | 7 | i/o使能位。为1时,i/o与i/ouc相连;为0时,i/ouc是高阻状态 |
(2)读tda8020内部状态的数据格式
从tda8020读出状态的格式如图5所示。按图3所示,对卡1的地址和读的字节为41h。
其中状态字节中各位的含义如表5所列。
表4 工作时钟频率选择方式
clksel2 | clksel1 | clock ou |
0 | 0 | clkin/8 |
0 | 0 | clkin/4 |
1 | 0 | clkin/2 |
1 | 1 | clkin |
表5 状态字节各位的含义
名 称 | 位 | 说 明 |
pres | 0 | 卡的状态指示。为1时,检测到卡:为0时,没有检测到卡 |
presl | 1 | 为1时,卡的状态还没有读;当为0时,卡的状态已读出 |
i/o | 2 | i/o为高时,这位为1;当i/o为低时,这位为0 |
supl | 3 | 为1时,表示电源监控器已输出,上电后就为1,直到读出后为0 |
prot | 4 | 为1时,表示过热或过载状态 |
mute | 5 | 为1时表示卡在规定的时间内没有发出atr信号 |
early | 6 | 为1时表示卡在规定的时间前就已经发出atr信号 |
active | 7 | 为1时,卡处于激活状态;为0时,卡处于释放状态 |
3 总 结
以上比较详细地介绍了三种不同接口的ic卡读写芯片。这三种方式最大的区别在于其与ifd内的cpu的通信方式不一样,并且也都符合iso/iec7816的标准。但是,这三个读写芯片有一些地方也存在一些差异。
tda8020支持a类和b类卡,但是watchcore和sniper ii cst56i01只支持a类卡。(虽然sniper ii cst56i01内部寄存器中有一位是卡类选择,但却只支持a类卡。)
tda8020和sniper ii cst56i01其esd保护达6kv,但是watchcore却没有esd保护功能。
tda8020对卡的电源可以直接支持,并有过流保护功能;但是watchcore和sniper ii cst56i01却只有通过一个功放管来实现,并且没有过流保护功能,只有外接保护电路(如加可复位保险丝)。
就其接口方式来说,i2c总线的tda8020和串口的watchcore虽然与ic卡读写器内的cpu的连接方便,但是一般cpu没有多余的串口和i2c总线接口给这两个芯片,一般要用通用i/o口来模拟串口和i2c总线接口才能进行通信。而sniper ii cst56i01与ifd内的cpu的并行通信虽然连接线较多,但其相应的软件就方便多了。
综上所述,这三个ic卡读写芯片各有不同,在实现应用的过程中,只有根据不同的资源情况来选用不同的读写芯片。