| 摘 要:T=0异步半双工字符传输协议是接触式IC卡国际标准ISO/IEC 7816中规定的一种通信协议。本文首先分析了ISO/IEC 7816-3中对于电信号和传输协议的规定,在此基础上介绍了T=0异步半双工字符传输协议的硬件实现方法。 关键词:ISO/IEC 7816;异步半双工字符传输协议;CPU卡
引言 CPU卡作为IC卡家族中功能最强、安全性最高的成员,已经逐渐在各种应用中占据主导地位。在ISO/IEC 7816-3中介绍了两种通信协议:T=0和T=1通信协议。T=0是异步半双工字符传输协议,T=1是异步半双工块传输协议。目前大多数接口设备都支持T=0通信协议,因此该协议应用较为广泛。 T=0通信协议可以通过软件编程来实现。但在软件实现过程中,需要通过软件编程来控制数据收发,对于实时性很强的通信处理,CPU的处理能力常常满足不了要求,而且通信的可靠性和稳定性也不是很理想,而硬件电路实现不存在上述问题。
传输协议描述 ISO/IEC 7816-3规定了IC卡的电气特性和传输协议。包括该类卡和接口设备间的电源、电气信号协议和信息交换协议。通信过程中,由接口设备给IC卡提供电源(Vcc),复位信号(RST)和时钟(CLK),卡和接口设备间通过I/O端口进行串行通信。 定义I/O端口有两种可能状态: 传号或高电平(状态Z):当卡和接口设备均处于接收状态时,I/O端口处于状态Z。也可由发送方强制定义为状态Z。 空号或低电平(状态A):可由发送方强制定义为状态A。 根据T=0异步半双工字符传输协议,IC卡和接口设备之间以字符为单位(简称字符帧)进行传输,采用偶校验,每个字符由10bit组成,如图1所示。传输字符帧之前,I/O线处于状态Z,第1bit为起始位(状态A);后面8bit为数据位D1~D8;第10bit为偶校验位,即8位数据和奇偶校验位中1的个数为偶数。 串行通信是按位传送的,每位信息宽度(持续时间)定义为基本时间单位etu(elementary time unit)。在复位应答期间的信息宽度称为“初始etu”,它等于372个时钟周期,即1etu = 372/f 。复位应答后的信息宽度称为“当前etu”,其计算公式为: 当前etu 其中:F是时钟频率变换因数;D是比特率调整因数;f是时钟频率。
硬件实现方案 按照上述标准实现的可编程串行接口系统如图2所示。 可编程串行接口内部的特殊功能寄存器有: 1. 串行接口控制/状态寄存器SCON(复位后为00H)。 寄存器各位定义如下: SCON[0]:接收中断标志位; SCON[1]:发送中断标志位; SCON[2]:发送出错标志位; SCON[3]:接收出错标志位; SCON[4]:允许发送标志位; SCON[5]:允许接收标志位; SCON[6]:保留; SCON[7]:可编程串行接口允许标志位。 SCON[4]、SCON[5]不能同时为1,否则I/O接口将处于逻辑混乱状态。 2.串行接口数据缓冲器SBUF(复位后为00H) 。发送时,SBUF作为发送数据缓冲器,用于缓存待发的数据。接收时,SBUF作为接收数据缓冲器,用于缓存收到的数据。 3. 波特率寄存器MR、BR (复位后MR=0BH,BR=13H,串行接口工作于基本速率)。为了简化硬件电路设计,将复位应答信号中TA1包含的F1和D1对应的波特率译码工作交由软件完成,由软件设置通信波特率。内部13bit定时器根据波特率寄存器MR、BR 值( &)对CLK信号 进行分频,以确定信息宽度。因为1etu,所以MR,BR寄存器设定为MR[7?]&BR[4?]= -1,例如,基本速率时,F=372,D=1,可得,设置MR=0BH,BR=13H,即“00001011,10011”=371;对于手机中常用的增强速率,F=512,D=8,可得,设置MR=01H,BR=1FH,即“00000001,11111”=63。 下面介绍可编程串行接口的工作过程。在发送和接收数据前,按以下步骤初始化串行接口: 1. 根据应用,通过设置MR、BR寄存器来设定通信速率。 2. 清除SCON[0]和SCON[1]中断标志。 3. 置位串行接口允许标志位SCON[7],使能串行接口。 初始化工作完成后,可选择发送模式或接收模式。 发送模式 首先将发送数据写入SBUF,数据移位寄存器data_shift_reg [10~0]将自动写入 “ ”,其中P为奇偶校验位,为欲发送数据,0为起始位,1代表状态Z,最低两位“01”用于产生起始位下降沿。 置位SCON[4],数据开始发送。根据波特率寄存器中设置的值,接收/发送控制模块中,13位定时器在每位数据将结束时产生计数脉冲。当计数脉冲有效时,数据移位寄存器右移1位,最低位输出到I/O线,最高位补入I/O线采样数据。 当校验位发送完毕后,I/O线变为高阻态,发方在11etu处对I/O线进行采样,如果为状态Z,则认为接收正确;如果为状态A,则认为传输出错,根据结果刷新串行接口控制/状态寄存器中相应位。 当一帧数据发送完毕后,无论发送是否正确,SCON[1] 都将硬件置位,产生发送中断申请。如果发送正确,SCON[4]将被硬件自动清0;如果发送出错,发送出错标志位SCON[2]将被硬件置位,SBUF中的数据将从检测到错误那一刻起2etu后自动重发,如图3所示。在重发完毕前,必须软件清除SCON[1]及发送出错标志位SCON[2],否则将会出现循环重发错误。 接收模式 置位SCON[5] ,系统处于接收状态。 起始位的检测是通过对I/O线进行周期性采样判决得到的。为了提高抗噪声性能,当检测到起始位后,在每位数据中间进行3次采样,根据采样判决结果产生采样数据,根据波特率寄存器中设置的值,接收/发送控制模块中13位定时器在每位数据中间产生计数脉冲。在计数脉冲控制下,将采样数据串行移入数据移位寄存器。 当一帧数据接收完毕后,进行数据校验。根据校验结果,在起始位下降沿后第10.5个etu起发送确认位。确认位为状态Z,表示接收正确,为状态A,表示接收出错。确认位信号宽度为1个etu,如图4所示。无论接收是否正确, SCON[0]都将在起始位下降沿后第10.5个etu置位,产生接收中断,并根据校验结果刷新串行接口控制/状态寄存器中相应位。如果正确接收,SCON[5]将被硬件自动清除,数据移位寄存器中收到的8bit数据将自动加载到SBUF中;如果不正确,则置位接收出错标志位SCON[3],等待数据重发。软件清除SCON[0]和SCON[3] 必须在下一帧数据接收完毕前完成。 由于设有数据移位寄存器和SBUF缓冲器,从而能在一帧数据接收完,由数据移位寄存器装入SBUF后,立即开始接收下一帧信息,CPU应在下一帧数据接收结束前从SBUF缓冲器中将数据取走,否则前一帧数据将丢失。 通过上述可编程串行接口,当接收或发送完一帧数据后,内部硬件自动置位SCON[0] 或SCON[1],CPU可以通过查询中断标志位或响应中断申请来进行串行通信处理。两个中断请求标志位不能由硬件自动清0,而必须通过软件清0。
结语 ISO/IEC 7816,T=0异步半双工字符传输协议的硬件实现电路具有如下特点:对每位数据采取多次采样判决的方式,提高了接口抗干扰能力;通信波特率软件可调,满足不同系统对通信速率的要求;T=0协议基于字符帧检错重发。为了避免可能出现的无限次的重发现象,在软件中可设置最大重发次数。同T=1协议相比,在通信质量不理想的情况下,T=0协议只需要重发错误字符帧,提高了工作效率。■
参考文献 1 International Standard ISO/IEC 7816-3 . Identification cards. Integrated circuit(s) cards with contacts,Part 3:Electronic signals and transmission protocols,1997 2 王爱英. 智能卡技术-IC卡第二版. 清华大学出版社,2000.10
作者简介: 龚宗跃,工程师,硕士,研究方向为数字集成电路前端设计;孙东昱,工程师,硕士,研究方向为数字集成电路前端设计。
|