学海荡舟手机网

主页 > 实用文摘 > 教育文摘_15 > > 详细内容

IC卡接口芯片TDA8007的读写器设计_接口电路论文

摘要:阐述t=0传输协议,给出ic卡读写器中使用的ic卡apdu指令流程和原理框图;重点介绍其中的ic卡接口芯片philips的tda8007,给出通过tda8007对cpu ic卡上下电过程、具体程序及tda8007使用中应注意的问题。

    关键词:cpu ic卡 tda8007 iso7816

ic卡(integrated circuit card)即集成电路卡,是将一个集成电路芯片镶嵌于朔料基片中,封装成卡的形式,外形与常用的覆盖磁条的磁卡相似。ic卡芯片具有写入和存储数据的能力。ic卡存储器中的内容根据需要可以有条件地供外部读取,或供内部处理和判定。根据卡中所镶嵌的集成电路的不同,可以分成存储器卡、逻辑加密卡、cpu卡三类。其中cpu卡即为由中央处理器cpu、eeprom、随机存储器ram以及固化在只读存储器rom中的片内操作系统cos(chip operation system)组成的ic卡。ic卡按与外界数据传送的形式来分,有接触式和非接触式两种。

图1 t=0的cpu卡apdu指令实现流程

1 cpu ic卡t=0的协议介绍

目前大多数cpu ic卡采用t=0模式。所谓t=0,即cpu ic卡与接口设备(即读写器)中数据传输方式为异步半双工字符传输模式。

从t=0协议的功能出发,该协议的实现可以分为物理层、数据链路层、终端传输层和应用层。其中层和数据链路层可以具体参看iso7816标准。在t=0协议应用,终端传输层和应用层实际上是不易分割来说明的,下面简单说明。

终端传输层根据卡片返回的过程字符和状态字节执行相应的操作,使读写器对数据的处理过程明朗清晰。卡片返回的过程字节和状态字节跟应用层发送给卡的apdu(application protocol data unit,应用协议数据单元)和vpp使用等有关。表1为vpp未用时的终端传输层中返回的过程字节。

表1 

字  节

结   果

ackinsvpp空闲,所有其余的数据字节相继续被传送
ins+'ff'vpp空闲,下一个数据字节随后被传送
sw1sw2vpp空闲,接口设备等待sw2字节

应用层即为由cla、ins、p1、p2、p3作为命令头组成的命令消息体的apdu响应和应答处理层。其中cla为指令类别,ins为指令码,p1、p2为参数,p3为根据apdu的不同格式为发送给卡的数据长度或期望响应的数据长度。apdu的几种情况如表2所列。

表2 

命令头发送数据长度发送的数据期望应答的数据长度
通用apducla ins p1 plcdatale
情况一cla ins p1 p   
情况二cla ins p1 p  le
情况三cla ins p1 plcdata 
情况四cla ins p1 p2lcdatale

cpu卡对接口设备(即读写器)的应答apdu情况如表3所列。

表3

数据datasw1 sw2

其中体中的数据字节数由命令apdu中的le指出;sw1、sw2是必备的,可以指明命令apdu执行正确或执行出错的错误类型。

2 基于t=0传输协议的cpu ic的apdu指令流程

根据目前cpu卡的常用t=0协议、自带编程升压电路的应用情况,以及本读写器接收ic卡数据报文直接发送pc机处理的特点,本读写器可行的apdu命令和响应的处理流程如图1所示。

3 读写器的硬件组成

读写器的硬件部分主要由ic接口管理芯片tda8007、mcuat89c52、外部数据存储器w24257s、串口电平转换芯片max3226、安全ic卡座(即sam卡座)、应用ic卡座、键盘口供电的串口通信线及其它相关元器件组成。

图2所示为通过pc机控制管理的外置于pc机的接触式cpu ic卡读写器。通过定制的数据线,该读写器的5v直流电源可直接由键盘口提供,同时数据线还负责pc机与读写器的串行数据交换。在大部分ic卡读写应用中,都涉及到ic卡的认证和数据读写的国解密问题,所以本读写器除了提供一个供用户使用的ic卡接口卡座外,还内置了一个sam卡,即安全ic卡卡座,以方便安装sam卡,保证应用ic卡读写时的数据安全,保护用户的利益。

    硬件的其它组成部分,如处理器,目前采用atmel的89c52。其4kb的flash程序存储器可以满足读写器的程序空间需要。由于pc机与89c52、89c52与tda8007的数据交换要求的暂存数据空间比较大,89c52提供的256字节不够,需外加一片数据存储器。本读写器中使用的是华邦的w24257s。其有32kb存储容量,ic接口部分的主要芯片为philips的tda8007。

4 ic卡接口芯片应用

下面介绍一下tda8007及其应用。tda8007的原理结构如图3所示。

tda8007芯片能够提供两个能同时满足iso7816标准及emv和gsm11-11标准的ic卡读写接口。在本读写器中,一个用于与应用ic通信,另一个用于与安全ic卡通信。与上文cpu卡的触点图相对应,clki、rsti、vcci、i/oi、gndci、presi、c4i、c8i(其中i=1,2;c4i、c8i未用;presi可用于检测ic卡是否插入。具体应用可参看tda8007的技术文档)都直接由tda8007提供给ic卡接口相连,mcu只需通过其接口控制并行通信来管理tda8007,便可实现对ic卡的上电、下电及读写数据处理。其中,微处理器既可以通过总线复用把tda8007内部的所有寄存器作为外部存储器,用movx寻址,也可以通过非总线复用方式访问,此时tda8007用ad0~ad3来区分内部各寄存器。另外,tda8007的片选信号和外部中断信号线可以方便读写器处理多个ic卡头。tda8007的特别硬件esd处理、接口短路处理、电源出错处理等也给ic卡和ic卡读写器提供了比较高的安全保护;同时,tda8007内部集成的电源管理功能允许tda8007的供电范围可达2.7~6.0v,并且tda8007通过电源管理可以给ic卡提供5.0v、3.0v及1.8v的电源,以适合不同工作电压的ic卡应用。

图3 ic卡接口芯片tda8007的原理框图

    本读写器是通过总线复用对tda8007的寄存器进行控制的。其中mcu的p1.5为tda8007的片选,p0口为与之通信的8位数据线,tda8007的各寄存器预先被宏定义的成微处理器的一个外部数据单元(下面电程序处的定义),从而方便mcu访问。下面结合tda8007寄存器的定义和位分配,给出应用tda8007接口芯片对ic卡进行上电激活和下电的程序。tda8007的寄存器主要三类。第一类,通用寄存器:①卡槽选择csr;②硬件状态hsr;③定时器tor1、tor2、tor3。第二类,iso7816串行处理寄存器:①串行状态usr;②混合状态msr;③串行发送utr;④串行接收urr;⑤队列控制fcr。第三类,卡专属寄存器:①可编程分频pdr;②保护时间gtr;③串行控制ucr1、ucr2;④时钟配置ccr;⑤上电控制pcr。注意:对于卡专属的寄存器,即卡接口1、卡接口2分别对应的寄存器,逻辑上具有相同的名及访问地址,因而,对不同的瞳操作,需要通过csr选择对应的卡槽来切换卡专卡属寄存器的映射的空间。所以,接口设备每次从一个卡的上下电或读写转向另一卡,都需要访csr设定对应的卡槽。对于每个寄存器的位定义不再多述,主动性者可参看tda8007的技术文档。

5 上下电过程及具体程序

图4为ic卡的上电时序图。要实现之,需对pcr进行写操作。其中start=pcr.0,rstin=pcr.2,vup上升表示激活了tda8007中的电压转换电路。当start置高时,只要能检测到选定卡槽中的ic卡存在,且没有tda8007能检测到并在hsr中指示的硬件错误出现,则对应ic卡接口的vcc1或vcc2将能被提供响应的电平(5v、3v或1.8v)。随后对应卡的i/o数据线被置成高状态(z状态),给ic卡提供设定的时钟信号,常用为3.5712mhz。大约在start置高108etu后,rstin置高。因为rst为rstin的拷贝,则对应卡的rst被置高。然后,用tda8007提供的定时器tor3、tor2设定对atr(answer to request)即复位应答首字节的最大等待时间120etu(element time unit),toc设定定时器工作方式,便开始等待atr首字节到来后做相应处理。至此,ic卡上电激活工作完成,随后可以根据atr字节的要求的工作方式对ic卡进行相应的读写处理。具体见上电程序。

图4 tda8007产生满足iso 7816标准诉ic卡上电激活时序

    tda8007寄存器访问的预定义

#include<absacc.h>

#define xxx xbyte[0x8000]//xxx表示csr等各寄存器上电程序如下:

p1.5=0; //片选tda8007

csr&=0xf8;

csr|=ncard; //选择卡,ncard=1,2

csr&=0xf7;

csr|=0xf7;

csr|=0x08; //复位uart的寄存器

ucr2&=0xf7; //异步模式,san=0

ccr&=0xdf; //时钟停止于低电平

ucr2|=0x60; //关闭附加中断及收发中断

gtr=0xff; //保持时间12etu

if(v==1) //v为函数变量

pcr|=0x08; //1.8v卡用

else if(v==3)

pcr|=0x02; //3v卡用

else

pcr&=0xfd; //5v卡用

ucr2&=0xfc; //cku=psc=0,--31

fcr=0x00; //1奇偶校验1fifo

pdr=0x0c; //divider=12

ccr=0x00; //不分频

pcr&=0xfb; //rstin=0

ucr2|=0x04; //不自动转换

ucr1=0x01; //正向约定

ucr1&=0xf7; //接收模式

flag3=0; //复位定时标志

flagatr=0; //接收atr首字节定时标志

pcr|=0x01; //激活

tor2=0x6c;

tor3=0x00;

toc=0x61; //rst拉高前等待108etu

while(flag3==0); //定时时间到,在中断中设置flag3=1

toc=0x00; //关闭定时器

pcr|=0x04; //给复位拉高

tor2=0x78;

tor3=0x00;

toc=0x61; //rst拉高前等待

flagatr=1;

atr(); //复位应答处理函数

图5为ic卡的下电时序图。相对于上电时序,下电过程对时间的要求不是很严格,只要设计者控制tda8007按照一定的顺序置低start、rstin和停止clk即可,然后tda8007会自动逐步释放rst、i/o、vcc及vup。具体处理见下电程序。

下电程序:

p15=0;

pcr&=0xfe; //start=0;下电

pcr&=0xfb; //卡的复位脚保持0

ccr&=0xdf; //停止时钟于低

ccr|=0x10; //停止时钟

p15=1;

6 使用tda8007应当注意的问题

tda8007对于vcc、rst出错,芯片过热(如图ic卡为电源短路卡或金属片),或ic卡插入拔出时都会产生中断输出。每次中断处理结束,应注意把hsr中的值读入一个临时地址,以便清楚hsr中的标志。

每次发送数据到ic前,即接收ic卡的最后一个数据之前,应设置寄存器ucr1中的lct位,以便接收完ic卡的数据后,自动切换成发送状态。

对tda8007部分布线时应注意,时钟信号线与其它线的隔离:最好被地线包围。

对于电路板上tda8007部分的电容应尽量靠近tda8007,其中电容cap、cbp、cup尤其如此,并最好不要在这些电容连向tda8007引脚过程中使用过孔;同时,cap、cup、cbp电容的esr要尽量小。

对tda8007处理的两个ic卡座中的任何一个执行上电、下电、读写卡操作之前,必须执行选择卡座的操作函数,以便选中具体的ic卡进行处理。

对ic卡操作中上电时序中的定时,读写卡字节间等待定时等都可使用tda8007中的定时器及定时控制器操作,注意其定时器为向下计数方式。

结语

本文主要从cpu ic卡的t=0的协议出发,介绍此类ic读写器设计的一些技术问题。值得指出的是,t=0协议仅仅是ic卡与外界数据交换的一种传输协议,只要在软件上适当修改并利用接口芯片tda8007突出的处理能力,本读写器完全可以实现对其它iso7816卡、emv、gsm`11-11卡的读写。