一、ATR是什么
ATR也叫复位应答,是一个字节序列,这些字节是由卡作为对复位命令的响应发送给读卡器的。在I/O电路上,每个成功的复位操作都会导致I/O上的一个由初始字符TS开始,后跟最多32个字符的复位应答。ATR的作用是告诉读卡器,我是一张什么样的卡片,以便读卡器知道接下来该以什么样的方式和卡片通信。
二、ATR的基本数据结构
三、起始字符——TS
初始字符定义了所有后继字符的解码协议。它只有两种可能:3B-正向约定,3F-反向约定。正向约定就是高电平为1,低电平为0,且从一个字节的低位开始发送。反向约定就是低电平为1,高电平为0,且从一个字节的高位开始发送。
四、格式字符——T0
(一)TA1(重要)
- 高半字节 FI 用于确定 F 的值, F 为时钟速率转换因子。用于修改复位应答之后终端所提供的时钟频率。
- 低半字节 DI 用于确定 D 的值, D 为位速率调节因子。用于调整复位应答之后所使用的位持续时间。etu =F/D * (1/f)
(二)TC1
TC1为0时,表示不需要额外的保护时间。
五、ATR分析示例
ATR : 3B 70 13 00 00
Protocol : SCARD_PROTOCOL_T0
+ TS = 3B --> Direct Convention
+ T0 = 70, Y1=0111, K=0 (historical bytes)
+ TA1 = 13 --> Fi=372, Di=4
+ TB1 = 00 --> Vpp not connected
+ TC1 = 00 --> EGT=0
其中TA1的高4位为1,低4位为3,分别在下面两个表中查询,所以得出:Fi=372, Di=4。
Fi的编码
FI |
0000 |
0001 |