IC卡复位应答ATR

一、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

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的编码

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


续...TA2

最近在同方某款ARM芯片上实现ISO7816的通信协议,其中有个PPS的概念涉及到了ATR中的TA2,所以这里介绍一下TA2的作用。卡片复位后的第一件事是发送ATR,读写器接收并解析ATR。ATR中的TA2字段存在与否表明了卡片的两种模式:

  • TA2(有) - 卡片为协议模式,此时采用ATR中指定的协议和参数进行通信。
  • TA2(无) - 卡片为协商模式,此时读写器根据具体情况决定进行PPS数据交换,还是发送工作命令。只有当卡片处于协商模式下时,读写器才有必要根据具体情况进行PPS交换还是直接发送工作命令。

以上是TA2字段的作用。通过以上作用我们大概也能知道TA2中都存储了些什么。具体如下:

  • bit8 - 是否支持在协议模式和指定模式之间切换。0-支持,1-不支持。
  • bit6~7 - 预留。
  • bit5 - 指定传输使用的参数和F/D。0-使用TA1中指定的Fi和Di参数。1-使用隐含参数,即默认参数(非ATR中接口字符中定义的值)
  • bit1~4 - 指定传输使用的协议T。

简而言之,TA2指定了传输使用的协议T和参数F/D,同时TA2也表明是否支持模式切换。

续...TC2

7816-3 10.2 中提到“If present in the Answer-to-Reset, the interface byte TC2 encodes the waiting time integer WI over the eight bits, except the value '00' reserved for future use. If TC2 is absent, then the default value is WI = 10.”。而这个“WI”是计算T=0协议中WTX的一个重要参数。也就是说如果是T=0的卡,那么每次卡片上电都要从ATR中获取TC2的值当做WI,然后据此计算WTX。当然,计算WTX不只从ATR中获取了WI,还有Di。

续...TD1

TD1表示是否还要发送更多的接口字符以及后续传输所使用的协议类型,其中:  

  • 高半字节用于表示字符TA2到TD2是否存在,这些位(b5~b8)设置为逻辑1状态时,分别表示TA2到TD2字符的存在。
  • 低半字节用于表示后续信息交换所使用的协议类型。
  • 当选用T=0协议时,IC卡不回送TD1,并且T=0协议作为后续传输类型的默认值。
  • 当选择T=1协议时,IC卡将回送TD1=0x81,表示TD2存在,且后续传输协议类型为T=1协议。
  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值