IC卡的终端驱动芯片采用AT83C26,这款芯片是目前使用比较广泛的IC卡读卡芯片,AT91SO系列是atmel公司针对安全芯片领域开发的芯片系列,其中内嵌了83c26芯片,其使用原理同单独使用主芯片控制83c26方法相同。
IC卡主要遵循ISO-7816的协议,下面主要介绍下本人在IC卡驱动开发过程中的经验和心得。
At83c26对于ic卡的控制已经很成熟,对于数据比特流的大多数分析读取都通过硬件完成,但是对于总体的控制和释放还是需要非常严格的程序代码控制。Ic卡主要通过四个io进行通信,Vcc,Rst,Clk,Cio。
Vcc:就是提供ic卡电压,目前主要有2种ic卡,分别支持不同的电压,A类卡5v,B类卡3.3v,一般使用A类卡。
Rst:复位信号管脚,通过制高该管脚,产生复位应答。
Clk:时钟输出。
Cio:数据读取。
Sam卡只需要上面四种接口就可以通讯,Ic卡和sam卡协议相同,但是还有c4和c8管脚,是留作未来使用的管脚。
对于ic卡的数据读取,都必须严格的遵照时间基本单元,即ETU。
Etu = 372 / f ; f 为系统驱动ic卡的时钟频率
首先介绍复位应答:
对于复位应答的介绍,emv协议中有详细的阐述,对此,并不想照搬的说一遍,而是加入本人对于这块内容的理解,emv协议介绍的很详细,但是想要好好的理解却要花费不少的功夫,本人归纳了下,对于复位应答的流程,就是先上电,就是vcc端先上电,说白了,不上电,什么都做不了,然后这段时间可以由你控制,你可以什么都不做,等在那儿,都没关系,这里emv协议都没有做出明确规定,然而,当你准备启动时钟的时候,即clk输出的时候,就要严格按照emv规定了,从clk启动开始,就开始计时,在200个时钟周期内,cio必须制高,进入等待接收模式,同时,在40000~45000个时钟周期内,rst脚必须制高电平,当然,在这之前必须保持低电平,当rst制高的那一时刻,就是ic卡复位,从这一时刻开始,在某段时间内,cio必须收到卡发出的应答信号,这段时间也很严格,必须是400~40000个时钟周期范围内,如果超出这个时间,还没有收到,那么就当做错误处理了。以上这个过程叫做冷复位,就是读卡的第一步操作,当然有了冷复位,就有热复位了。
热复位紧跟冷复位之后,当冷复位失败后,就启动热复位了,热复位流程相对少点,首先将rst脚制低电平,这时必须保持clk和vcc不变,然后在200个时钟周期内,将cio口制高,在rst制低的400~40000个时钟周期内,将rst制高电平,这一时刻,ic卡复位,接下去和冷复位的步骤一样,如果在40000个周期内还是没有收到应答,那么就当作复位失败了。
那么不管复位是成功还是失败,都是要进行释放的,释放的过程也必须严格按照emv协议上规定的,首先,cio制为z,紧跟着,ret制z,然后clk也这么做,最后vcc制低,整个过程就结束了,每一步之间没有严格的时钟控制,只要按照这一步骤就可以。
复位应答成功后,会收到一连串字符,长度不等,跟ic卡有关,这串字符就是ic卡能够进行下一步操作的关键了,所谓的字符,就是长度不等的一串字节,当然,对于每一个字节的定义,在emv协议中都做出的明确的规定,这里主要介绍几个关键的,或者说本人在开发过程认为比较关键的字节,其中TA(1)就是控制etu的关键字节,在复位应答开始前,默认将etu设置为 372/f,这是默认配置,就是不管什么卡,都是通用的配置,在得到复位应答后,根据分析后,如果有TA(1)存在,那说明卡告诉读卡设备,要用TA(1)来重新配置etu,这时,etu = F/(Df),而F,D就是通过TA(1)确定的,如果没有TA(1),那么也不要紧,采用缺省配置,即Fd = 372,Dd = 1,这样,etu就等于复位应答时的etu了。当然,如果在选择协议时,加入了pps协商,那么在复位应答后,还要再加上一步pps协商应答,在应答前,也采用默认的Fd和Dd,协商完成后,采用协商得到的Fn和Dn,这样,F和D可以通过三种形式来得到,当然,具体的操作模式也影响F和D的选择,当TA(2)存在时,说明采用专用模式,如果TA(2)的b5 = 0,复位应答后立刻采用Fi和Di,如果b5 = 1,则使用缺省值,当TA(2)不存在时,采用协商模式,使用缺省的Fd和Dd,直至获得pps协商的Fn,Dn为止,别的字节,参照emv协议,基本就差不多了。
这样,复位应答能够得到,后面的协议应答也就基本没有问题了,emv的levle1就是基于这个基础来完成的。