您的位置:首页 > 运维架构 > Linux

和菜鸟一起学linux总线驱动之smartcard复位应答ATR

2012-10-26 13:15 246 查看
通过根据定义,复位应答是一系列字节的值,这些字节是由卡作为对复位的应答发送给接口设备的。通过卡对接口设备作为复位的应答的字节传送的顺序的值在I/O电路上,每个字节通过异步字符来运送。

每个成功的复位操作都会在在I/O上产生,一个初始字符TS,TS后面按下列次序紧跟有最多32个字符,见图。

T0-----------------------------------------格式字符,必备的

TA(i) TB(i) TC(i) TD(i)----------------接口字符,任选的

T1 T2…TK------------------------------.历史字符,任选的

TCK---------------------------------------校验字符,有条件的

• 初始字符建立解码每个后续字符的约定用以设置条件以编译每个后面的字符。

• 格式字符显示用以告之第一组接口字符和所有历史字符。

• 接口字符的出现通过格式字符所启动的位图技术指出。

• 历史字符的出现通过编码在格式字符中的1个数指出。

• 校检字符的出现依赖于某些接口字符中参数T的值。

为了记法简化,以后T0TA(i)…T1…TCK不但表示字节而且也表示运送这些字节的字符




1、参数T

参数T指传输协议和/或限定接口字节数。在每个字节TD(i),TA(2)或PPS0(见7.3)中,位b4~b1编码参数T的值。

—— T=0
异步半双工字符传输。

—— T=1
异步半双工块传输。

—— T=2和T=3
保留用于将来的全双工操作。

—— T=4
保留用于增强的异步半双工字符传输。

—— T=5到T=13
保留待将来使用。

—— T=14
指未由ISO/IEC JTC1 SC17进行标准化的传输协议

—— T=15
不指某一种传输协议,仅限定了全局接口字节。



2、格式字节T0

按照图,字节T0由两部分组成:

——
位b8到b5构成Y(1);每个等于1的位指示了后续接口字节的存在;

——
位b4到b1构成K,K编码了历史字节的个数,从0到15。





3、 接口字节TA(i) TB(i) TC(i) TD(i)

3.1 TD(i)

按照图,字节TD(i)含有两部分:

——
位b8到b5构成Y(i+1);每个等于1的位指示后续接口字节的存在;

——
位b4到b1构成参数T的值。

因此,T0运送Y(1)而TD(i)运送Y(i+1)。在运送Y(i)的字节中,位b8到b5表示与b5对应的TA(i)、与b6对应的TB(i)、与b7对应的TC(i)、与b8对应的TD(i)按照这个次序运送Y(i)的字节之后是否存在(取决于相关的位是否等于1)。

如果TD(i)不存在,则接口字节TA(i+1)、TB(i+1)、TC(i+1)和TD(i+1)也不存在。

如果两个或更多个参数T的值存在于TD(1)TD(2)……中,它们应当按照数字升序存在。如果存在,T=0应是第一个,T=15应是最后一个。TD(1)中禁止值T=15。

“第一次提供的协议”定义如下:

——
如果TD(1)存在,则第一次提供的协议是T。

——
如果TD(1)不存在,则提供的唯一的协议是T=0。




3.2 TA(i) TB(i) TC(i)

接口字节TA(i)、TB(i)和TC(i)(i=1,2,3,…)是全局的或特定的。

——
有关卡上集成电路参数的全局接口字节。

——
有关卡提供的传输协议的参数的特定接口字节。

接口字节TA(1)TB(1)TC(1)TA(2)TB(2)是全局的。接口字节TC(2)是特定的;它是为T=0定义的。i>2时对接口字节TA(i)TB(i)TC(i)的解释依赖于TD(i-1)中参数T的值。

——
如果T≠15,则接口字节是协议T特定的。

——
如果T=15,则接口字节是全局的。

如果为参数T的同一个值定义了超过三个的接口字节TA(i)TB(i)TC(i),并且这些接口字节在复位应答中出现,则它们应相继出现于指明相同T值的TD(i-1)TD(i)…(i>2)之后;因此,当这些接口字节在TD(i-1)(i>2时)中的T第一次、第二次或第n次出现之后出现,就被无二义性地识别出来。



4、历史字节T1 T2……TK

历史字节指明一般信息,例如卡制造商、插入卡内的芯片、芯片的掩膜ROM、卡的寿命状态。GB/T 16649.4规定了历史字节的内容。

如果K不为0,则复位应答在K个历史字节T1 T2……TK上继续。



5、校验字节TCK

字节TCK的值应是这样的,以致使它与T0至TCK的所有字节(包括T0和TCK)的异或运算结果为0。

如果只有T=0存在(可能通过默认来指明),则字节TCK应不存在。如果T=0和T=15都存在,或者在其他所有情况下时,字节TCK应存在。



6、全局接口字节的内容

字节TA(1)TB(1)TC(1)TA(2)TB(2)和TD(i-1)(i>2)中T=15第一次出现后的字节TA(i)。这些字节以二进制的形式对无符号整数FI、DI、II、PI1、N、PI2、XI和UI进行编码,这些无符号整数等于或用于计算此后出现的参数F、D、N、P、I、X和U的值。

——
如果出现,为正确处理任一协议应解释该字节;

——
如果该字节不出现,则当需要时,对于相关参数使用默认值。

TA(1)对以下内容进行编码

—— FI,对位b8到b5上的时钟速率转换因子的引用。

—— DI,对位b4到b7上波特率调节因子的引用。

若b8=0,TB(1)对以下内容进行编码

—— II,对位b7、b6上最大编程电流的引用,。

—— PI1,对位b5到b1上编程电压的值。

注:
接口设备可以忽略TB(1)的位b8。

TC(1)对以下内容进行编码

—— N,对计算8位上的额外保护时间的引用。

TA(2)是特定方式字节

TB(2)使用8位上的编程电压值PI2代替PI1进行编码。

TA(i)在TD(i-1)(i>2)中的T=15第一次出现后对以下内容进行编码

—— XI,对位b8、b7上的时钟停止指示符的引用。

—— UI,对位b6到b1上的类别指示符的引用。



6.1、传输因子F、D

参数F和D分别是时钟速率转换因子和波特率调整因子。在I/O电路上所使用的etu依赖于传输因子F和D的实际值。etu应等于F/D时钟周期。

etu = F/D×(1/f)

频率f的最小值应为1MHz。最大值作为FI的函数在表7中给出。默认最大值是5MHz。

为了计算etu,F和D因子对应当采用下面三对值之一:

—— Fi和Di,由卡按照在TA(1)中给出;如果TA(1)不存在,则Fi和Di置为默认值;

—— Fd和Dd,默认值为372和1;

—— Fn和Dn,由成功的PPS交换在Fd到Fi和Dd到Di范围内协商所得的值。

在复位应答期间,应使用Fd和Dd。复位应答后,F和D的值取决于操作方式。

——
在可协商方式中,应继续使用Fd和Dd,直到PPS交换成功完成。PPS成功交换后,应立即使用Fn和Dn。

——
在特定方式中

 
如果TA(2)中b5=0,则在复位应答成功完成之后应立即使用Fi和Di。

 
如果TA(2)中b5=1,则应使用隐含值。



6.2、额外保护时间N

参数N是将字符从接口设备发送到卡的额外保护时间。没有额外保护时间用来将字符从卡发送到接口设备。默认值N=0。

在0到254范围内,N表示在准备好接收下一字符之前,卡要求从前一个字符(也是由卡或接口设备发送的)的起始沿开始的下列延迟:

etu +(Q×(N/f))

公式中,Q应取下面两个值中的一个:

—— F/D,即用于计算etu的值,当T=15不存在于复位应答中时,

—— Fi/Di,当T=15存在于复位应答中时。

N=255表示在传输协议期间,两个连续字符的起始沿之间的最小延迟在传输的两个方向上是相同的。这个最小延迟值是

—— T=0时,12etu

—— T=1时,11etu



6.3、编程参数P和I


编程参数P和I分别是编程电压和最大编程电流;它们定义了触点VPP上的编程状态。

——
编程电压:VPP=PV

——
最大编程电流:IPP=ImA

在5到25范围内,PI1给出了P的值,单位为伏。PI1=0表示在卡中VPP在电路上未连接,卡使用触点VCC提供的电源在内部生成编程电压。PI1的任何其他值保留作将来使用。

在50到250范围内,PI2给出了P的值,单位是十分之一伏。PI2的任何其他值保留作将来使用。如果PI2存在,则PI1的值应被忽略。

如果T=15不存在于复位应答中,默认值是P=5和I=50。如果T=15存在,则VPP在卡中不连接,除非TB(1)和/或TB(2)存在。



6.4、时钟停止指示符X

参数X表示卡支持(XI≠00)或不支持(XI=00)时钟停止,以及支持时,当时钟停止时,在CLK上优先选用哪个电气状态。默认值是X=“不支持时钟停止”。



6.5、类别指示符U

参数U表示了卡所接受的操作条件的类别。UI的每个位代表了4.2.1中定义的一个操作条件类别:b1对应A类,b2对应B类。默认值是U=“仅支持A类”。



6.6、特定方式字节TA(2)

TA(2)是特定方式字节。按照图,它描述了卡操作的特定方式的相关特征








我得到的ATR数据时:3b 6c 00 00 4e 54 49 43 30 27 73 00 4a 03 00 00

1、3b:
表示正向卡(3f表示反向卡,这个定死的)

2、6c: 即0110 1100,其中6表示TB1和TC1存在,TA1和TD1不存在,所以由此可以

推定传输协议T=0,没有TCK。其中的c表示历史字节为12个

3、00 00:表示TB1和TC1的值

4、4e 54 49 43 30 27 73 00 4a 03 00 00
:历史字节0x0c个
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: