一、ATR是什么
ATR也叫复位应答,是一个字节的序列,这些字节是由卡作为对复位命令的响应发送给读卡器的。在I/O电路上,每个成功的复位操作都会导致I/O上的一个由初始字符TS开始,后跟最多32个字符的复位应答。ATR的作用是告诉读卡器,我是一张什么样的卡片,以便读卡器知道接下来该以什么样的方式和卡片通信。
二、ATR的基本数据结构
三、起始字符——TS
初始字符定义了所有后继字符的解码协议。它只有两种可能:3B-正向约定,3F反向约定。
四、格式字符——T0
(一)TA1(重要)
- 高半字节 FI 用于确定 F 的值, F 为时钟速率转换因子。用于修改复位应答之后终端所提供的时钟频率。
- 低半字节 DI 用于确定 D 的值, D 为位速率调节因子。用于调整复位应答之后所使用的位持续时间。etu =F/D * (1/f)
(二)TC1
TC1为0时,表示不需要额外的保护时间。
N、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 |
0010 |
0011 |
0100 |
0101 |
0110 |
0111 |
F |
372 |
372 |
558 |
744 |
1116 |
1488 |
1860 |
RFU |
FI |
1000 |
1001 |
1010 |
1011 |
1100 |
1101 |
1110 |
1111 |
F |
RFU |
512 |
768 |
1024 |
1536 |
2048 |
RFU |
RFU |
DI |
0000 |
0001 |
0010 |
0011 |
0100 |
0101 |
0110 |
0111 |
D |
RFU |
1 |
2 |
4 |
8 |
16 |
32 |
RFU |
DI |
1000 |
1001 |
1010 |
1011 |
1100 |
1101 |
1110 |
1111 |
D |
12 |
20 |
RFU |
RFU |
RFU |
RFU |
RFU |
RFU |
DNFM0005(5)