ISO-7816-3 集成电路卡 part3 电气接口及传输协议

引用协议

ISO/IEC 7816-2
ISO/IEC 7816-4

电气特性

待补充。

卡片操作流程

激活

  1. RST设置成状态L。
  2. VCC供电。
  3. IO设置成接收状态(接口设备在RST为L状态时应该忽视IO状态)。
  4. CLK提供1-55MHz的时钟信号。

冷复位

卡激活和冷复位示意图

  1. 如上图所示, 在时钟信号生效之后(Ta),卡应该在200个时钟周期之内(ta)将IO状态设置为H。
  2. 在时钟信号生效之后(Ta),处在状态L的RST应该在400个时钟周期之内(tb)将状态设为H。
  3. 在Tb,RST状态已经被设置成H, IO应该在400-40000个时钟周期之内(tc)进行应答。如果在40000个时钟周期之内都没有进行应答, 接口设备应该进行去激活操作。

热复位

在这里插入图片描述
在VCC保持供电和CLK持续供应有效的时钟信号期间,将RST设置成状态L持续至少400个时钟周期,如上图所示,卡应该在Tc之后的200个时钟周期之内(td)将IO状态设置为H, 在RST状态变回H之后(Td),卡应该在400-40000个时钟周期之内进行应答,否则接口设备应该进行去激活操作。

时钟停止

在这里插入图片描述

  1. 在接口设备不希望再跟卡进行传输,并且IO状态保持在H状态至少1860个时钟周期之后。
  2. 接口设备可以在保持VCC供电和RST为状态H的时候,将CLK在时间Te停止, 在时钟信号停止期间,CLK应当保持H或者L状态。
  3. 在时钟信号恢复之后(Tf),接口设备和卡之间的数据交换可能在700个时钟周期之后才能恢复。

去激活

在这里插入图片描述

  1. RST设置为状态L。
  2. CLK设置为状态L,除非时钟信号已经停止,并且在状态L。
  3. IO设置为状态L。
  4. VCC停用。

异步字符

基本时间单元(Elementary time unit, etu)

参数含义
F时钟速率换算因子
D波特率调整因子

在非同步通信中:
1 e t u = F D × 1 f 1 etu = \frac{F}{D} \times \frac{1}{f} 1etu=DF×f1
在同步通信中:
1 e t u = G × 1 f 1 etu = G \times \frac{1}{f} 1etu=G×f1

  1. 在ATR期间, F设置为372,D设置为1, 即该卡最初使用的etu等于372个时钟周期。
  2. 在传输协议期间,无论处于非同步通信或者同步通信中,在切换到一个同步通信之前必须进行一次成功的PPS协商。

字符帧

在这里插入图片描述
在一个字符帧的开始,IO应该被设置成状态H。如上图所示,一个字符帧包含10个片段。

  1. 片段1应该被设置成状态L,以为着字符的开始。
  2. 片段2-9依据编码约定对字符进行编码。
  3. 片段10为奇偶校验位。

两个字符开始之间至少间隔12etu,该段时间由字符传输时间和保护时间组成。在保护时间,接口设备和卡都应该位于接收模式,因此IO被设置为状态H。
在ATR期间,两个连续字符的延时不应该超过9600etu,这个最大延时叫做初始等待时间

错误信号和字符重发

在这里插入图片描述
如上图所示,当奇偶校验位不正确时,接收方需要传输一个错误信号,并且期望字符重发。

  1. 在异步通信中, 接收者将IO状态设置为L, 至少持续1etu,至多持续2etu。
  2. 在同步通信中, 假设G = 1,接收者应该在F11设置IO状态为L, 在F13设置IO状态为H。

初始字符, 字符编码和字节帧

在这里插入图片描述
初始化字符TS会在任何成功的复位操作之后发送。

  1. 片段1-4应该设置为LHHL, 序列(H)LHHL是一个用来同步的部分,取两次下降沿的1/3作为最初的etu。
  2. 片段5-7应该设置为LLL或者HHH,用来表示编码解码约定。
  3. 片段8-10应该设置为LLH。

初始化字符TS的两种可能的形式:

  1. (H)LHHL LLL LLH 表示逆惯例约定,状态L编码1,并且片段2表示最高有效位(msb优先),传输的字节为3F
  2. (H)LHHL HHH LLH 表示直接约定,状态H编码1, 并且片段2表示最低有效位(lsb优先),传输的字节为3B

卡使用任意一种编码约定,接口设备两种都需要支持。

ATR (Answer-to-Reset)

在这里插入图片描述
在初始化字符 TS 之后,最多允许32个字符(按照上图顺序),这最多32个字符的序列被定义为 ATR。

T0 字节格式

在这里插入图片描述

  1. 如上图所示,bit8-bit5表示Y1,每一个被设置成1的bit表示存在一个进一步的接口字节。
  2. bit4-bit1是历史字节的编码(historical bytes),表示为K,值从0-15。

接口字节 TD

在这里插入图片描述
所有TD的结构都如上图所示

  1. bit8-bit5 表示 Yi+1,每一个被设置成1的bit表示存在一个进一步的接口字节。
  2. bit4-bit1 表示参数 T,值从 0-15。

因此 T0 可以得到 Y1,TDi 可以得到 Yi+1 , Yi 的 bit5, bit6, bit7, bit8, 分别代表着 TAi , TBi, TCi, TDi 是否存在(1表示存在)。
如果 TDi 不存在,则 TAi+1, TBi+1, TCi+1, TDi+1 都不存在。

参数 T

参数T指定传输协议或者限定接口字节。

  1. T=0 表示字符的半双工传输。
  2. T=1 表示块的半双工传输。
  3. T=2 和 T=3 为将来的全双工操作保留。
  4. T=4 保留用于增强的半双工字符传输。
  5. T=5 至 T=13 保留给 ISO/IEC JTC 1/SC 17 使用。
  6. T=14 是指没有被 ISO/IEC JTC 1/SC 17 标准化的传输协议。
  7. T=15 不是指传输协议,而是只限定全局接口字节。

在 TA2 和 PPS0, bits 4-1 也是参数 T。
如果两个或更多参数T出现在 TD1, TD2 … 它们应按递增的数字顺序出现,T=0 优先,T=15 最后。TD1 中禁止使用 T=15。
第一个提供的传输协议被定义如下:

  1. 如果 TD1 出现,则第一个提供的是 T。
  2. 如果 TD1 不出现, 则第一个提供的是 T=0。

接口字节 TA TB TC

每一个接口字节 TA TB TC 是全局的(global)或是特定的(specific)。

  1. 全局接口字节指的是整张卡的参数。
  2. 特定的接口字节是指的卡提供的传输协议的参数。

TA1, TC1 和 TA2 是全局的,TC2是 T=0 传输协议特有的。
TB1 和 TB2 不建议使用,卡也不应该传输它们, 接口设备应该忽视它们。
对于 i>2 时的 TAi, TBi, TCi 的解释取决于 TDi 中的参数 T:

  1. 如果 T 属于 0-14,TAi, TBi, TCi 都是特定针对指定的传输协议。
  2. 如果 T=15,TAi, TBi, TCi 都是全局的。

历史字节 T1 T2… TK

历史字节描述卡的操作特性。ISO/IEC 7816-4 规定了历史字节的结构和内容。
如果 K 不为0,则 ATR 将会有 K 个历史字节。

检查字节 TCK

TCK字符是检查字符,它的值验证ATR中发送的数据的完整性。TCK可以是任何值,只要从T0到TCK(包括TCK)的所有字节的异或为零即可。T=0时不使用TCK,但在所有其他情况下,TCK将在ATR中出现。

全局字节

全局字节有 TA1, TC1, TA2, T=15的第一个TA和TB。
TA编码:

  1. FI 时钟转换因子 bits 8-5。
  2. DI 波特率调整因子 bit 4-1。

TC1 编码N, 额外保护时间。
TA2 是专有模式字节。
T=15 的第一个 TA:

  1. XI 时钟停止标志 bits 8-7。
  2. UI 类标志 bits 6-1。

T=15 的第一个 TB:

  1. GI 时钟分频系数 bits 4-1(当bits 8-5 为0时)。
  2. 接触点C6的专有引用 (当 bits 8-5 不为0)。

传输参数 F,D 和 G

异步通信使用参数 F, D。同步传输使用参数G。
在这里插入图片描述
如上图所示,FI 和 DI 规定了卡上支持的 Fi 和 Di的值。FI还指明了卡上所支持的最大频率,最小值是1MHz。f 默认的最大值是5MHz。

在这里插入图片描述
如上图所示,GI 指明了是否支持同步通信(GI 不为 0000),当支持同步通信时,
表示最小数量的时钟周期在一个片段中,GI的默认值是0000,即不支持同步通信。

计算异步通信的etu,参数对 F 和 D 有以下三种情况:

  1. Fd 和 Dd,默认值为 372 和 1。
  2. Fi 和 Di,具体数值由 TA1 指明,如果没有 TA1,则使用默认值。
  3. Fn 和 Dn,这两个值是经过一次成功的PPS协商得出,范围在 Fd-Fi,Dd-Di。

在 ATR 期间 F 和 D 均使用默认值。
在ATR之后,F 和 D 的值取决于操作模式。

  1. 协商模式,Fd 和 Dd 继续在 PPS 协商中应用。Fn 和 Dn 会在一个成功的 PPS 协商之后立刻应用。
  2. 专有模式,TA2的 bit5 如果为 0,Fi 和 Di 会在一个成功完整的 ATR 之后立刻应用。如果不为 0,则使用 TA2 中指明的 F 和 D。

计算同步通信的etu,需要在一次成功的 PPS 协商之后得到时钟分频参数 G。

额外保护时间 N

参数 N 是从设备传输字符到卡的额外保护时间,从卡传输字符到设备不需要额外保护时间。N 的默认值为 0。
从 0-254,N 指明,卡在准备接收下一个字符时,该卡需要从前一个字符的传输前沿延迟以下时间。
12 e t u = ( Q × N f ) 12 etu = (Q \times \frac{N}{f}) 12etu=(Q×fN)
在上面公式中,Q取以下两个值中的其中一个:

  1. 如果 T=15 没有出现在 ATR 中,Q = F/D。
  2. 如果 T=15 出现在ATR中,Q = Fi/Di。

N=255 指明在同一种传输协议中,两个连续字符前沿之间的最小间隔在两种传输方向中是相同的,最小传输延时取决于使用的传输协议:

  1. T=0 12etu。
  2. T=1 11etu。

时钟停止标志 X

在这里插入图片描述
如上图所示,参数 X 指明卡是否支持时钟停止,以及在支持情况下,CLK的电状态是高还是低。

类标志 U

在这里插入图片描述
如上图所示,参数 U 表示卡接受的操作条件类。

PPS (Protocol and parameters selection)

在任意ATR之后,卡将会进入以下两种模式之一:

  1. TA2 存在,专有模式。
  2. TA2 不存在,协商模式。

在这里插入图片描述

专有模式

TA2 相关 bit 定义:

  1. bit8 表示是否有改变操作模式的能力,如果 bit8 为 1,则有能力;如果为 0,则不能改变操作模式。
  2. bits 7-6 保留,设置为0。
  3. bit5 表示参数的定义,如果为 0 则表示接口字节定义,如果为 1 则表示隐式定义。
  4. bits 4-1 为参数 T。

在专有模式,ATR 之后直接使用 TA2 规定的传输协议,F 和 D。
如果 TA2 bit5 为0,则使用 Fi 和 Di,否则使用固定值。

协商模式

在协商模式下,只要接口设备到卡的第一个字节可以在 PPS 和传输协议清楚地区分,就可以进行一个隐式选择。
如果在一个 ATR 之后,没有立刻传输一个 PPS 请求,则应该立即应用第一个提供的传输协议,Fd 和 Dd 也应该应用。
如果在一个ATR之后,有 PPS 请求,在 PPS 交换之后至少在 PCK-Response 前沿之后的 16 个 etu 再建立起异步或者同步通信(使用 Fn 和 Dn 或者使用 G)。

如果一个 ATR 只提供一种传输协议和 Fd,Dd,并且不支持同步通信,则该传输协议在 ATR 后就应该立即使用 Fd 和 Dd,这种卡不需要 PPS 交换。

一个既不支持 PPS 交换,也不支持最先提供的传输协议的接口设备,应该复位并选择专有模式,或者直接拒绝该卡。

PPS 交换

PPS 协议

PPS 请求和回应应该使用和 ATR 相同的传输方法。
只有接口设备才被允许发起 PPS 交换。

  1. 接口设备应该传输一个 PPS 请求到卡。
  2. 如果卡接收到一个错误的 PPS 请求,则卡不回应。
  3. 如果卡收到一个正确的 PPS 请求,卡应该传输一个 PPS 应答,否则会超过初始等待时间。
  4. 如果超过了初始等待时间,接口设备应该复位或者拒绝该卡。
  5. 如果接口设备接收到了一个错误的 PPS应答,则应该复位或者拒绝该卡。
  6. 如果一个 PPS 交换没有成功,则接口设备应该复位或者拒绝该卡。

PPS 请求和应答

PPS 请求和 PPS 应答都有一个初始字节 PPSS,接下来是一个 PPS0字节,还有可选的参数字节 PPS1,PPS2,PPS3,最后一个校验字节 PCK。

  1. PPSS 是 PPS 的开始,值为‘FF’。
  2. 在 PPS0,bit 5,6,7设置为1表明接下来分别存在 PPS1,PPS2,PPS3。Bits4-1 定义参数 T 指明传输协议,bit8 保留。
  3. PPS1 允许接口设备向卡提出 F 和 D 的值。编码和 TA1 一样,值的范围应该在 Fd-Fi 和 Dd-Di之间,如果接口设备没有传输 PPS1,它建议继续使用 Fd 和 Dd。如果卡接受 PPS1 提出的 F 和 D(这些值将会变为 Fn 和 Dn),则它会重复 PPS1,如果没有重复 PPS1 则继续使用 Fd,Dd。(Fn 为372,Dn 为 1)。
  4. PPS2 允许切换成同步通信。PPS2 编码方式与 T = 15 的第一个 TB 相同,位8至5设置为0000。如果接口设备不发送 PPS2,或者 PPS2 为‘00’,则卡建议继续使用异步通信。
PPS2GGi
0344,2,1
0222,1
0111
  1. PPS3 保留。
  2. 从 PPSS 到 PCK 的异或值为 0。
    在这里插入图片描述

成功的 PPS 交换

  1. PPSS 应答 = PPSS 请求.
  2. PPS0 应答:
    1. bits 1-4 重复。
    2. bit5 应该重复或者设置为0。如果设置为1,PPS1 应答 = PPS1 请求;如果设置为0,则 PPS1 应答不出现,默认使用 Fd 和 Dd。
    3. Bit6 应该重复或者设置为0。如果设置为1,PPS2 应答 = PPS2 请求;如果设置为0,则 PPS2 应答和 PPS2 请求都不出现。
    4. Bit7 应该重复或者设置为0。如果设置为1,PPS3 应答 = PPS3 请求;如果设置为0,则 PPS3 应答和 PPS3 请求都不出现。

所有其他的 PPS 交换都被视为不成功的。

T=0, 半双工字符传输

协议在一个 ATR 或者 一次成功的 PPS 交换之后开始。

命令的结构和处理

接口设备从一个五字节的头开始一条命令,并且在头的控制下继续向该方向上传输指定数量字符。
现定义:

  1. 输入数据命令表示有数据进入卡。
  2. 输出数据命令表示有数据从卡出去。

命令头

命令头是一个连续的五字节,表示为 CLA, INS, P1, P2, P3。

  1. CLA 表示命令,‘FF’是无效的,它被 PPS 交换使用。
  2. INS 表示命令编码,‘6X’ 和 ‘9X’ 是无效的。
  3. P1 和 P2 表示命令参数。
  4. P3 表示剩余还要传输的数据字节长度,在一个输出数据命令中,P3=‘00’ 表示有256字节数据从卡中传出;在一个输入数据命令中,P3=‘00’ 表示没有数据传输。

过程字节

概述

有三种过程字节,见下表。

NULL'60'无操作过程字节
BytesValue数据传输操作后续字节
ACKINS所有剩余字节过程字节
INS xor ‘FF’ 下一个数据字节过程字节
SW1'6X'(≠'60'),'9X'无操作SW2
在每个过程字节中,卡可以通过NULL或ACK继续执行命令,或通过结束序列SW1 SW2结束。 #### NULL 字节 NULL 请求不会有任何数据传输的动作,接口设备应该只等待一个过程字节。 #### ACK 字节 ACK 用于控制数据传输
  1. 如果 ACK 等于 INS,则剩下的所有数据字节都会按照顺序全部传输。
  2. 如果 ACK 等于 INS ⊕ \oplus ’FF’,则只会传输一个字节

状态字节

在接收到 SW1 之后,接口设备应该等待 SW2 的到来。SW2 的值没有严格的限制。SW1 SW2 代表着一个命令的结束。SW1 SW2 等于 ‘9000’ 代表命令的正常完成。

  1. SW1 的 bits 8-5 如果设置成 ‘9’,具体含义依赖应用本身。
  2. 如果SW1 的 bits 8-5 如果设置成 ‘6’,含义则独立于应用。
    ‘6E’ 不支持的命令CLA
    ‘6D’ 不支持的INS
    ‘6B’ P1 P2 参数错误
    ‘67’ 长度 P3 错误
    ‘6F’ 未知错误
    如果 SW1 不是以上几种,则说明卡支持该条命令。

半双工块传输

待补充

命令应答对

定义

一个 APDU 包含命令 APDU 和 应答 APDU。

符号缩写解释
APDU应用协议数据单元
CLA类型字节
INS命令字节
LcNc 的长度
LeNe 的长度
Nc命令数据字段的字节数
Ne应答数据字段中期望的最大字节数
Nr应答数据字段中的字节数
P1 P2参数字节
SW1 SW2状态字节
TPDU传输协议数据单元

APDU

命令 APDU

命令 APDU 包含前四字节和一个长度可变的条件体。
CLA INS P1 P2 + [Lc] [DATA] [Le]

应答 APDU

应答 APDU 包含一个可变长度的条件体和必须的两字节 SW1 SW2。
[DATA] + SW1 SW2
如果命令处理过程中断了,可能会没有应答 APDU;如果有应答 APDU,则 SW 将指出发生的错误。

APDU中的数据字段

每一个命令应答对都可能携带有命令数据字段和应答数据字段。

  1. NC表示命令数据字段的字节数,如果 Nc 不为0,则 Lc 是 Nc的编码;如果 Nc 等于 0,则 Lc 和命令数据字段都不出现。
  2. Ne 表示应答数据字段的最大期待字节数,如果 Ne 不为 0,则 Le 是 Ne 数的编码;如果为 0,则 Le 不出现。
  3. Nr 表示应答数据字段的字节数,Nr 的值应该从 0-Ne,如果 Nr 等于 0,则应答数据字段不出现。

APDU 一共分为四种类型:

类型命令数据字段应答数据字段
Case1没有没有
Case2没有
Case3没有
Case4

注:个人学习记录 转载请注明出处

  • 4
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值