随着信息技术的飞速发展,越来越多的地方要求对用户身份的识别以及重要数据的安全存储。而智能卡(SmartCard)又称集成电路卡(Integrated Circuit Card 即IC卡),是具有高的可靠性安全性和灵活性的数据承载设备,现已被广泛应用于政府、金融、电信、交通及公共事业等领域。
智能卡控制器是连接智能卡和主控设备的桥梁,由于智能卡的应用不断增加,越来越多的SOC芯片内嵌了智能卡控制器IP核。这种基于IP核的设计方式已成为IC设计的主流,这里主要介绍智能卡控制器IP核的数字逻辑实现方法以及其在硬盘加密芯片中的应用。
3、微体系结构
3.1、接口信号
该IP核接口主要分为CPU总线接口、中断信号和智能卡控制接口,这里主要介绍一下有关智能卡控制的接口信号,即连接或控制智能卡上有效触点的信号,它们为:
1) 智能卡是否存在信号IC_PRES:用于探测智能卡座上是否有智能卡存在,当有智能卡插入或拔出时,该信号的电平发生跳变,本IP核能够探测该信号的电平的变化,并以中断等方式报告给CPU;
2) 智能卡电源控制信号IC_PWR:用于控制智能卡的电源VCC或VPP(触点C1或C6),用于打开和关闭智能卡电源;
3) 时钟信号IC_CLK:同智能卡触点C3相连接,用于向智能卡输入一定频率的时钟信号;
4) 复位信号IC_RST:同智能卡触点C2相连接,用于向智能卡发出复位信号;
5) 双向串行数据信号IC_IO:同智能卡触点C7相连接,用于实现与智能卡的双向数据通信。
3.2、模块和功能
智能卡控制器核内部有发送和接收模块(Transmitter and Receiver)、中断仲裁模块(Interrupt Arbitrator)、函数模块(Function Generator)、时钟模块(Clock Generator)、智能卡接口模块(Interface Device)和访问寄存器模块(Register Access Control)六大模块,这些模块之间的关系见图1所示:
图1 ISO7816智能卡控制器模块结构图
主要模块功能及特征描述如下:
1. 发送和接收模块
发送和接收模块负责处理数据帧的发送和接收。发送模块是将FIFO发送队列中的数据按照设定的格式把并行数据转换为串行数据帧,并通过发送端口送出去。接收模块则监视接收端信号,一旦出现有效开始位,就进行接收,并实现将接收到的异步串行数据帧转换为并行数据,存入FIFO接收队列中,同时检查数据帧格式是否有错。智能卡控制器的帧结构是通过LCR(Line Control Reg)寄存器设置的,接收和传送器的状态被保存在LSR(Line Status Reg)寄存器中。
2. 中断仲裁模块
当任何一种中断条件被满足时,并且在中断使能寄存器(IER, Interrupt Enable Reg)中相应位置1,那么智能卡的中断请求信号INT被置为有效状态。为了减少和外部软件的交互,智能卡控制器把中断分为四个级别,并且在中断标识寄存器(IIR, Interrupt ID Reg)中标识这些中断。四个级别的中断按优先级级别由高到低的顺序排列为:智能卡插拔中断、接收线路状态中断、接收数据准备好中断和传送拥有寄存器为空中断;。
3. 函数模块
该模块产生智能卡的相关时序。通过向函数寄存器(FR, Function Register)相应的位置入相关的参数来探测智能卡、管理电源和产生复位时序等。
4. 时钟模块
时钟模块产生相应频率的时钟供给智能卡,时钟的频率由CPU总线的时钟频率和写入时钟分频寄存器(CDR, Clock Divisor Register)的值来决定,关系表达式如下:
fIC_CLK = fCPU /(2 * CDR)
5. 智能卡接口模块
该模块将相关信号进行适当的调整,以便适合于IC智能卡的通信。
6. 访问寄存器模块
当智能卡控制器被总线控制器选中时,CPU可通过读或写操作访问被地址线选中的寄存器。
4、设计实现
这部分将对本智能卡控制器中主要模块的数字逻辑的实现方法逐一作简单说明。
4.1、数据接收模块
在设计接收模块的过程中,关键是如何实现Receiver Shift的逻辑电路,下图是本智能卡控制器数据接收模块中有关Receiver Shift逻辑电路的主控状态转换图:
图2 接收模块主控状机
该状态机共有十个状态,其中主要状态是:状态1(REC_START)用来探测数据的起始位Start;状态2(REC_BIT)用来接收数据ba到bh,组成一个字节;状态3(REC_PARITY)用来接收数据的奇偶校验位;状态4(REC_STOP)探测Stop位。
下面是该状态机控制有关逻辑读入数据的仿真波形图:
图3 接收一个字节数据的状态变换波形图
4.2、数据发送模块
同样, 对于发送模块的设计,主要问题也是如何实现Transmitter Shift的逻辑电路,下图是本智能卡控制器数据发送模块的主控状态转换图:
该状态机共有五个状态:状态1(SEND_START)用来发送数据的起始位Start;状态2(SEND_BYTE)用来发送数据ba到bh;状态3(SEND_PARITY)用来发送数据的奇偶校验位;状态4(SEND_STOP)发送Stop位,最后状态机转入空闲状态0(SEND_IDLE)。
4.3、函数模块
函数模块可以在软件控制下产生激活智能卡和关闭智能卡所需的相关时序。这里简单介绍一下本控制器在软件的支配下,激活智能卡的过程,见下面的波形图。
图6激活智能卡时的波形图
在该波形图中,信号IC_PRES首先变低,表明有智能卡插入。接着智能卡控制器通过IC_PWR打开智能卡的电源。待电源稳定后,智能卡控制器通过IC_CLK向智能卡输出时钟信号。同样,在时钟稳定后,智能卡控制器通过IC_RST向智能卡输出复位信号。最后智能卡控制器在数据信号IC_IO上探测到智能卡复位应答(ATR,Answer to Reset),这样就完成了智能卡的激活工作。
5.结论
本方案所设计的智能卡控制器IP核,采用Verilog HDL语言,以较少的硬件代价,在本公司研发的硬盘数据加密芯片中,成功实现了对智能卡密钥的读写控制,并且该方案具有较强的灵活性,可以方便地移植到其它嵌入式应用系统中,具有较高的使用价值。