1、CPU卡的接口特性、传输协议与读写程序设计摘要 介绍 ISO78164 及中国金融集成电路(IC)卡规范所规定的 T=0协议的 CPU卡与终端之间的接口特性和传输协议,及以 C51语言设计的 CPU卡复位、下电及读写程序。关键词 IC 卡 CPU 卡 终端 复位 字符传输协议(T=0 协议)IC 卡的概念是 20世纪 70年代提出的。法国 BULL公司首创 IC卡产品,并将这项技术应用到金融、交通、医疗、身份证明等多个方面。IC 卡的核心是集成电路芯片,一般为 3m 以下的半导体技术制造。IC卡具有写入数据和存储数据的能力。IC 可存储其中的内容,根据需要可以有条件地供外部读取,或供内部信息处
2、理或校验用。根据各种集成电路的不同,IC 卡可以分为以下三类:存储器卡、逻辑加密卡与 CPU卡。其中,存储器卡仅有数据存储能力,没有安全措施;逻辑加密卡仅有几个字节的密码,卡中有一个错误计数器,如果指定次数验证密码失败,则卡中数据被自动锁死,该卡数据不能再更改;CPU 卡是这三类 IC卡中最高级的卡,一般有 ROM、RAM 和 EEPROM三种存储器。ROM 中存放的是程序,程序是为 IC卡的 CPU专门设计的,用来解释读写器终端送来的命令。IC 卡应用系统根据应用需要由终端送一系列命令到 CPU卡,通过改变命令的内容和命令的顺序就可以满足不同的需要,因此有较高的灵活性;同时,因为 CPU有计
3、算功能,存储容量又大,可以进行比较复杂的加密/解密运算,极大提高了安全性。EEPROM 主要用来存放一些应用数据,其容量比逻辑加密卡大,可实现一卡多用,是目前最安全的卡类型。因此,CPU 卡是目前 IC卡的重要发展方向之一。1 CPU卡的接口特性 1.1 触点定义触点的定义遵循 ISO78162 的规定,如图 1所示。符号说明如表 1所列。图 1 CPU卡的触点表 1 符号说明1.2 字符帧数据在 I/O上以图 2所示的字符帧方式传输。图 2 字符帧传输方式每个位宽是 1个 etu,etu = 372/f。在此处,f = 3.57 MHz。起始位由接收端通过对 I/O周期采样获得,采样周期应小
4、于 0.2 etu。2 个连续字符起始位上升沿之间的间隔时间等于(100.2)etu 加上 1个保护时间(最少 2个 etu)。在保护时间内,卡与终端都应处于接收模式(I/O 为高电平状态)。如果卡或终端作为接收方检测出奇偶错误,则 I/O被置为低电平,以向发送方表明出现错误。1.3 卡操作卡操作的步骤如下: 将卡插入终端接口设备,使两者的触点相接并激活触点; 将卡复位,建立卡与终端间的通信; 执行操作; 释放触点,并从接口设备取出卡片。以下是除第步(执行操作)以外,各步的时序要求。(1) 触点激活时序如图 3所示。图 3 触点激活时序(2) 卡复位卡利用低电平复位来完成异步复位应答,随着触点
5、的激活,终端将进行一个冷复位并从卡获得复位应答。冷复位时序如图 4所示。图 4 冷复位时序冷复位过程之后,如果收到的复位应答信号不满足标准的规定,终端将启动一个热复位并从卡获得复位响应。热复位时序如图 5所示。图 5 热复位时序在实际程序设计时,由 Reset子程序实现触点激活和卡复位。(3) 触点释放时序触点释放时序过程如图 6所示。图 6 触点释放时序2 传输协议与卡命令处理程序ISO78164 及中国金融集成电路(IC)卡规范所规定的异步半双工传输协议,是关于终端为实现传输控制和特殊控制而发出的命令的结构及其处理过程,包括了两种协议:字符传输协议(T = 0)和块传输协议(T = 1)。
6、本文着重讨论字符传输协议(T = 0)协议,它是 IC卡推荐使用的通信协议。2.1 命令命令包含 1个连续 4字节的命令头,用 CLA、INS、P1 和 P2以及 1个可变长度的条件体来表示。命令头定义如下: CLA:指令类别,除“FF“外的任何值; INS:在指令类别中的指令码,当最低位是“0“,并且高位半字节既不是“6“也不是“9“时,INS 才有效; P1、P2 完成 INS的参数字节。条件体定义如下: Lc(发送数据长度)占 1个字节,在命令中定义为发送数据的字节数,取值范围是 1255。 Data 为将要发送的命令数据域,字节数由 Lc定义。 Le (接收数据长度)占 1个字节,指出
7、命令响应中预期的数据最大字节数。Le 的取值范围是0255。如果 Le=0,预期数据字节的最大长度是 256。可能的命令结构的 4种情况定义如表 2所列。表 2命令全部由终端应用层(TAL)初始化。它通过终端传输层(TTL)向卡发送 1个由 5个字节组成的命令头,并等待一个过程字节。2.2 过程字节卡收到命令后,紧接着返回一个过程字节给 TTL,指明下一步该作什么,如表 3所列。表 3在(1)、(2)情况中,TTL 完成动作后将等待另一个过程字节。在(3)情况中,第二个过程字节或状态码(SW2)被收到后,TTL 将做以下事情: 如果过程字节为“61“,TTL 将发送一个最大长度(P3)为“XX
8、“的得到响应命令(GET RESPONSE)给卡,“XX“为 SW2的值。GET RESPONSE 命令仅适用于 T = 0协议。命令报文的结构如表 4所列。表 4 如果过程字节为“6C“,TTL 将立即重发前一个命令的命令头给卡,它的 P3值用“XX“代替。“XX“是SW2的值。 如果过程字节是“6X“(除“60“、“61“及“6C“之外)或“9X“,与前两者 TTL自己处理不同,TTL 将通过命令响应返回状态码给上一层-终端应用层(TAL),由 TAL处理,并等待下一个命令。2.3 卡命令处理程序流程图图 7 是卡命令处理程序,即终端与卡的信息交互过程的流程图,具体程序见本刊网站。图 7
9、卡命令处理程序流程图以下是引脚说明。ECPU:决定卡的 CLK触点上是否有 CLK信号的引脚;ICVCC:终端与卡的 Vcc触点相接触的引脚;ICIO: 终端与卡的 I/O触点相接触的引脚;ICCLK:终端与卡的 CLK触点相接触的引脚;ICRST:终端与卡的 RST触点相接触的引脚。以下是程序中函数介绍。 void isr_timer1(void) interrupt 3:定时器 1中断子程序,用于按位发送和接收数据字节; void Snd(void): 发送数据子程序,由定时器 1实现; void Rcv(BYTE bytenr,BYTE *Buffer):接收数据子程序(参数含义分别是:接收数据字节数、接收数据的存放处),由定时器 1实现; 函数 1 void Reset(BYTE *len, BYTE *resp):复位子程序(参数含义分别是:返回复位响应数据的长度、复位响应数据); 函数 2 void Power_off(void):触点释放子程序; 函数 3 WORD CPUC_Cmd(BYTE len,BYTE* comm, BYTE *lenr, BYTE* resp):CPU 卡命令子程序(参数含义分别是:发送命令长度、发送命令、返回字节数、返回数据),函数返回状态字节 SW1SW2。