ISO7816-3标准ATR解析
ATR基本应答数据如下:
- TS 起始字符
- T0 格式字符
- TA1,TB1,TC1,TD1,… 接口字符
- T1,T2,… ,TK 历史字符
- TCK 校验字符
标准ATR格式为:
TS T0 TA1 TB1 TC1 TD1 TA2 TB2 TC2 TD2 TA3 TB3 TC3 TD3 …… T1 T2…TK TCK
以3B 95 11 81 11 FE 56 20 31 2E 50 D3为例:
1.起始字符TS
TS是ATR的强制部分,总是必须送出的。此字节只允许有两种编码:3B为正向约定,3F为反向约定。使用反向逻辑约定时, I/O的低电平状态等效于逻辑1,且该数据字节的最高位在起始位之后首先发送。使用正向逻辑约定时, I/O的高电平状态等效于逻辑1,且该数据字节的最低位在起始位之后首先发送。
起始字符:3B
- 格式字符T0:95
格式字符T0含有一组位表明将要传送哪个接口字符,它同时也指出后继历史字符的个数。像TS一样,每个ATR中都必须有这个字节。
高半字节( b5-b8) 表示后续字符TA1到TD1是否存在。(b5对应TA1,b8对应TD1);
低半字节( b1-b4) 表明可选历史字符的数目( 0到15);
高半字节( b5-b8) 表示后续字符TA1到TD1是否存在。(b5对应TA1,b8对应TD1);
T0 = 95(1001 0101)1001代表TA1和TD1存在,TA1=11,TD1=81
低半字节( b1-b4) 表明可选历史字符的数目, 历史字符为5;
- TD1字符比较关键, TD1的高4位决定了是否有TA2/TB2/TC2/TD2。
同理,TD2的高4位决定了是否有TA3/TB3/TC3/TD3,一直到TDx不存在。
TD1 =81(1000 0001) 高四位1000代表TD2存在。TD2 = 11
TD2 = 11 TA3 =11 , TD3不存在,循环结束。
- 很长一段时间,没有任何标准对历史字符做出规定,结果是随操作系统生产者而不同,它们包含了变化广泛的数据。
历史字符为: 56 20 31 2E 50
-
TCK具有一个检验复位应答期间所发送数据完整性的值。TCK的值应使从T0到包括TCK在内的所有字节进行异或运算的结果为零。
当没有TD1时,T=0,则TCK不存在。
如果在ATR中仅指出了T=0协议,TCK校验和可以不在ATR的尾部出现。在这种情况下,完全没有发送它,因为用奇偶校验已经知道了差错字节而在T=0协议中重复发送出错字节又是强制性的。相反,在T=1协议中,TCK字节必须出现,校验和的计算从字节T0开始,结束于最后的接口字符,如果有则是最后的历史字符。
TCK = D3
原文链接:https://blog.csdn.net/creator_ly/article/details/79622197