DSP与IC卡接口设计
摘 要: 本文给出两种IC卡(存储卡和智能卡)结构、读写操作以及与DSP接口设计。
关键词: IC卡;存储卡;智能卡;DSP
图1 AT24C16SC结构框图
图2 AT24C16SC时序图
随着社会信息化程度的提高,IC卡的使用越来越普遍。IC卡分为接触式和非接触式两种。接触式IC卡分为存储卡和智能卡(又叫作CPU卡)。本文讨论了如何使用DSP的GPIO(通用输入输出)接口实现与IC卡的通信。
图3 写卡操作命令时序图
图4 读卡操作命令时序图
DSP和存储卡接口
存储卡只具有存储功能,是一片串行的EEPROM。以AT24C16SC为例,支持3V和5V电源,存取速度可达100KHz(3V)和400KHz(5V);容量为16Kbit,分为128页面;双向数据线(SDA)为OD(Open Drain)驱动,需加上拉电阻方可实施通信。该芯片可擦写10万次,内部数据可保持100年,具有3000V以上高压保护。内部结构如图1。
存储卡访问时序为I2C标准时序:在时钟线(SCL)为低时通过SDA实施对芯片读写;当SCL为高时,SDA处于保持状态(即数据有效期)。当SCL为高时,SDA的变化表示芯片处于不同状态:
● 开始状态:当SCL为高时,SDA由高变低表示一个开始状态,任何操作前均需一个开始状态。
● 停止状态:当SCL为高时,SDA由低变高表示一个停止状态,跟在每个操作后,将卡置于等待(Stand by)模式。
在读写时,地址和数据都是按照8bit的大小进行传输,接收的一方需要返回一个ACK信号表示确认,这个ACK信号用在第9bit的位置返回一个‘0’来表示。在读卡操作时,DSP在收到8bit后,第9个clock时应向卡发送‘0’,表示收到了正确的数据同时要求卡继续发送下一组8bit数据,如果没有这个ACK信号,则卡就会中止当前读操作返回等待模式。在写卡操作时,卡收到DSP发送的地址和数据后也应返回一个ACK信号,表示收到了正确的命令。开始和停止状态、确认信号时序图如图2。
一个读写操作的开始需要先发送一个Device Address字节,这个字节的高4bit是“1010”,接着3bit是卡的高位地址,比如AT24C16SC需要有11位地址(2K字节的大小),高3bit地址就是这里来指示,最后1bit是读写控制bit,若为‘1’,则表示后面进行一个读操作,若为‘0’,则表示后面进行一个写操作。
写卡操作分为字写和页写。字写时,当发送完Device Address字节(最后1bit为‘0’)后,发送一个Word Address字节(卡的低8位地址),接着发送一个字节的数据,最后发送停止状态。页写时,可连续发送16个字节数据后再发送停止状态位。需要注意的是页写时,低4位地址是卡内部自增的,当到达页末地址时会自动返回页首地址,所以要正确发送停止状态,否则继续写入的字节就会覆盖原来的数据(命令时序图见图3)。
读卡操作分为读当前地址、读任意地址和顺序读三种方式。以读任意地址为例,在发送完Device Address字节(最后1bit为‘1’指明读操作)后,发送Word Address字节,这一过程是要装载要读的地址,再发送一个Device Address字节(同样最后1bit为‘1’指明读操作),便可从卡读取一个连续8bit数据,最后发送停止状态(而不是ACK信号)结束读操作(命令时序图见图4)。
以上分析可见,DSP与存储卡接口的关键就是如何产生SCL和SDA时序。将DSP的GPIO接口分别与存储卡的SCL、SDA连接。需要注意的是,因为DSP的工作频率很高,改变状态之前需要插入等待周期。
写卡的函数编程实例从略(基于C5409)。
图5 智能卡的复位应答
图6智能卡的访问时序
DSP与智能卡接口
智能卡内部有CPU、ROM、RAM、EEPROM等资源,卡内驻有智能卡操作系统(COS),实施对卡的管理和维护。因为卡内有CPU和RAM,可根据需要进行一些运算和数据加密,卡内EEPOM用于存放用户资料(容量也较存储卡大)。智能卡较存储卡功能更强,更安全(数据都受到加密保护),因而应用面更广,价格也比存储卡高。
智能卡的操作遵循ISO7816-3规范,通信时序类似于双向RS-232通信协议。操作前需要对卡进行激活,激活的步骤为:VCC供电、RST为低、I/O设为输入、提供CLK;之后对卡进行复位,复位分为冷复位和热复位,两者区别在于冷复位时RST由低变高,而热复位时RST由高变低再变高。复位后,卡应发出复位应答;DSP接收到卡的复位应答后,便可向卡发送指令。取卡前需要进行“释放”,步骤顺序与激活相反:RST变低,CLK变低,VCC掉电。
卡的复位应答信息的组成如图5。
TS:初始化字节,用来进行bit同步和指示后续通信的编码方式,例如0x3f表示反码编码,0x3b表示正常编码;
T0:格式字节,高4个bit用来指示是否传输TA1、TB1、TC1、TD1,低4个bit用来指示有多少个历史字符;
TAi、TBi、TCi:接口字节,用来设置操作的一些参数,比如速率,保护时间,编程电压等;
TDi:接口字节,高4bit用来指示是否传输TAi+1、TBi+1、TCi+1,低4个bit用来指示传输类型T。T=0,字符半双工模式;T=1,块半双工模式,其他的T值保留。我们常用T=0即字符模式;
T1_TK:历史字符,由制卡商提供;
TCK:校验位,是T0_TK所有字节的异或,T=0时不传此字节。
访问卡的时序如图6所示。
可以看出,1个字节帧由13位组成,包括1个起始位、8个数据位、1个校验位、2个保护时间位。在外部提供时钟方式(常用方式)下,图6中每个位占的时间间隔(ETU)默认为外部时钟周期的372倍。例如,外部时钟为3.57MHz时,位的间隔是9600,相当于速率为9600。保护时间最长可以为外部时钟周期的254倍。
DSP与智能卡的连接跟存储卡不同,RST引脚用来对卡内CPU复位,可与DSP一个GPIO连接;智能卡的CLK为卡内CPU工作时钟,速度高(1MHz~5MHz),要求稳定,用DSP的GPIO产生这样的时钟不可能。通常使用DSP一个串口McBSP发送的时钟CLKX作为智能卡的时钟。与存储卡相同,DSP的一个GPIO与智能卡I/O相连。I/O是双向,需要正确设置DSP的GPIO方向,且有精确的速率要求的,即为CLK速率的1/372,可以采用DSP内部定时器产生。
读卡函数编程实例从略(基于C5409)。■
参考文献:
1. TMS320C54x DSP Reference Set:Enhanced Periherals,Texas Instruments,1999
2. TMS320C54x DSP Reference Set:CPU and Periherals,Texas Instruments,2001
3. AT24C16SC:2-Wire EEPROM Card Module,Atmel,2000