ISO7816协议深度解析-简单易懂协议详解(一)-- 复位,字符帧,及ATR

1. 摘要
IC卡必须支持T=0或T=1的协议,但不是同时支持这两种协议,而终端则必须同时支持T=0和T=1的协议。
• T=0通讯协议是异步半双工字符传输协议;
• T=1通讯协议是异步半双工块传输协议;
在ISO7816-3标准中,具体规定了这两种协议:T0和T1。
IC卡所用的协议在TD1中指定,如果在复位应答信息中没有TD1,则表示用T=0的协议进行通讯。在复位应答后,IC卡和终端之间即用IC卡指定的协议进行通讯。

2. 硬件接口
1)VCC:电源输入(A类:5V, B类:3V)
2)GND:地
3)RST:复位
4)I/O:输入输出
5)CLK:时钟(A类:1~5MHz, B类:1~4MHz)
注:不同型号的卡引脚数可能不一样。

3. 读头与卡的操作
3.1 ETU(基本时间单元)介绍

7816-3定义的通讯协议,基本上可以说是RS232的翻版并在此基础上进行的改进。在RS232中我们有9600波特率、起始位、奇偶校验位、停止位这些概念,而在7816-3中都完整地保留了下来,只不过7816-3中引入了etu,没有使用bps。etu的定义可以更加精确地描述每个数据位在传输过程中收发双方的职责和角色转换。
根据定义在智能卡上电复位的时候 1 etu = 372 / f ,其中f = 读写设备通过CLK管脚提供给智能卡的时钟频率,通常在1-5 MHz之间。
etu的单位是时间单位秒(毫秒、微秒),等同于传输每个数据位所需的时间。对其取倒数得出来的就是每秒传输的数据位,也就是bps。我们取f = 3.579545 MHz,用3579545除以372结果等于9622.4约为9600 bps。
通用的etu计算公式: 1 etu = (F / D) * (1 / f) ,F和D的值根据7816-3规范中的约定来进行设置。对于上电复位时的取值 F = 372,D = 1即作为默认值Fd和Dd。如果智能卡支持其他速率则需要在ATR中的TA1来指出其他的F和D的值,比如设定F=372,可以把D分别设定为2/4,那么智能卡能支持的通讯速率可以分别为19200/38400。
在这里插入图片描述

那么为什么要选择时钟频率为3.579545 MHz?为什么默认的F值选择为372呢?首先3.579545 MHz 是常用石英晶振的标称值,9600 * 372 = 3.5712 MHz,与之最为接近。再说为什么是372,372 = 12 * 31。标准的8051单片机每个指令周期为12个时钟周期,而且定时/计数器也按照1/12 进行分频后再计数的,这样设定对于智能卡芯片来说可以比较容易实现对IO数据通讯的控制,也可以更好地和PC机串口9600速率配合(当然这是指上个世纪80年代的时候,对于现在的智能卡芯片设计技术而言实现任意分频的控制都不是问题了)。
由此可见,这些参数的选择都是为了能够更好地利用当时既有的标准和技术,要知道7816-3在1989年的时候就已经制定了,按照当时的主流PC机配置把串口速率设为9600,用一个232接口芯片(比如Max232)再加上3.579545MHz的晶振,再配合几片74系列的门电路外加5伏的直流电源和几个阻容器件,这就是最基本的RS232串口读卡器了。
PS:
• Fi Di :TA1 (高4位, 低4位), 详见4.3.1。
• Fn Dn:PPS1 (高4位, 低4位), 详见4.3.1。
• Fd Dd:默认值(Fd = 372, Dd = 1)。

3.2 字符帧
在字符之前,I/O端应处于状态Z。如下图,一个字符应由10个连续的时间段组成,每一时间段不 是处于状态 Z,就是处于状态 A,
— 第一个时间段ml应处于状态A;这个时间段是“起始位”。
— m2-m9八个时间段运送1个字节。
— 最后一个时间段m10应确保字符奇偶校验位, 运送“奇偶校验位”。
在这里插入图片描述

在每个字符中,如果在时间段mn结束时状态改变,则从字符前沿到mn后沿的延迟应是 tn = (n 士 0. 2) * etu。
•发送方的时间起点是字符的起始沿。当搜索一个字符时,接收方定期地对 I/O取样,取样时间应少于0.2etu。接收方的时间起点是对Z状态的最后一个观察点和 A状态的第一个观察点中间。
• 接收方应在0.7etu(接收方时间)之前确认ml,然后应在(1.5士0.2)etu收到m2,在(2.5士0.2) etu 收到m3,···,在(8.5士0.2) etu收到m9,在(9.5士0.2) etu收到m10。字符奇偶校验在字符帧运送结束之后进行。
注:这样的允许偏差确保完全区分信号测量区和信号跃变区。
两个连续字符的起始沿之间的延迟应至少是12etu,即某个字符的持续时间(10士0.2) etu加上保护时间。在保护时间,接口设备和卡都应保持接收状态,因此 I/O状态为Z。
在复位应答期间,卡发出的两个连续字符的起始沿之间的延迟应不超过 9600 etu。这个最大值被称为“初始等待时间”。

4 通信流程
①激活电路。
②冷复位启动卡应答,卡与读头进行通信。
③释放电路。
随着IC卡的触点的实际接通,终端必须启动一个冷复位。
如果IC卡的冷复位的应答所回送的字节不符合前面小节中的规定,或IC卡的复位应答未在19,200初始etu之内完成,终端不必立刻取消用卡过程,而是发出一个热复位信号。
如果应答符合要求,而且是在19,200初始etu之内回送,则终端必须使用回送的参数进行卡片操作过程。
如果终端启动了一个上述的热复位,而IC卡对热复位的应答所回送的字节仍不符合上述小节中的规定,或IC卡的复位应答未能在19,200初始etu之内完成,则终端将执行释放IC卡的触点序列,从而取消用卡过程。
如果对热复位的应答符合这些规定,而且是在19,200初始之内回送,则终端必须使用回送的参数处理卡片操作过程。
不论是对冷复位或热复位,如果在应答时由IC卡回送的相邻二字节的起始位的上升沿之间的时间超过了9600初始etu,终端就必须执行释放触点序列,从而取消用卡过程。

4.1 激活流程
①RST置位状态L。
②VCC加电5V(A类)或3V(B类)。
③I/O置为接收状态。
④CLK提供15MHz(A类)或14MHz(B类)。
在这里插入图片描述

4.2 冷复位
1.VCC供电,RST状态处于L,IO状态处于L情况下。
2.当提供稳定的CLK开始,在200个时钟周期内IO将转变状态到H。
3.当提供稳定的CLK开始,RST至少保持L状态400个时钟周期。
4.当RST进入状态H之后,从RST的H状态上升沿开始的400到40000个时钟周期内,复位应答开始。
5.如果RST状态H的上升沿以后,超过40000个时钟周期,卡片的复位应答没开始,则复位失败,RST上的信号将返回到状态L,设备按照释放时序。
在这里插入图片描述
图4 激活与冷复位

4.3 热复位
1)VCC保持供电并且CLK提供合适且稳定的时钟信号的情况下。
2)RST置于状态L至少400个时钟周期,启动热复位。
3)IO接口在RST状态L之后的200个时钟周期内,将IO设置为状态H。
4)在RST置位H状态之后的400~40000个时钟周期内,I/O将收到复位应答。
5)若在RST置位H状态之后超过40000个时钟周期,,I/O复位应答没开始,则热复位失败,接口释放电路。
在这里插入图片描述

冷复位和热复位不同在于,冷复位是重新上电并加稳定的时钟信号之后发起,而热复位是在电源和时钟信号保持的情况下,通过RST信号发起。

4.4 时钟停止
1)I/O保持在状态Z至少1860个时钟周期(tg);
2)当时钟被停止(从Te到Tf),CLK应保持在状态H或状态L,这个状态由参数X指明。
3)Tf之后,接口设备重启时钟,I/O上的信息交换需在至少700个时钟周期之后(th)。

4.5 释放
1)RST置为状态L
2)CLK置为状态L
3)VPP释放(如果已经激活)
4)I/O置为状态A
5)VCC释放

5 ATR
ATR是answer to reset(复位应答)。是读头复位卡之后,卡回复读头的第一条指令。复位答复格式如下:

TST0TA1,TB1,TC1,TD1,…,TAi,TBi,TCi,TDiT1,T2,…,TKTCK

5.1 初始字符TS
• TS:初始字符,定义了所有后继字符中数据字节的编码协议,其后面最多跟32个字符。
• 3B:正向约定;3F:反向约定。

5.2 格式字符T0
在这里插入图片描述
在这里插入图片描述
• Y1(m7~m4):标记TA1、TB1、TC1、TD1是否存在;
• K (m3~m0):为历史字符的数据长度,常用T=0(异步半双工字符传输协议), T=1(异步半双工块传输协议)。
• 基本响应: 如果只使用了T=0,IC卡将回送T0=“6X”,指明字符TB1和TC1的存在。如果只使用了T=1,则IC卡回送T0=“EX“,指明字符TB1至TD1的存在。“X”之值表明传送的历史字符的数量。
• 终端反应: 若IC卡回送的T0为任意值,只要它正确地指明并和接口字符TA1至TD1及实际回送的历史字节一致,终端不得拒绝。
表1 T=0的复位应答回送的字符

字符备注
TS“3B”或”3F”表示正向或反向约定
T0“6X”TB1和TC1出现,X表示历史字节的存在个数
TB1“00”不适用VPP
TC1“00”到”FF”表示需要额外保护时间,数据”FF”有特殊含义

表2 T=1的复位应答回送的字符

字符备注
TS“3B”或”3F”表示正向或反向约定
T0“EX”TB1和TD1出现,X表示历史字节的存在的个数
TB1“00”不适用VPP
TC1“00”到”FF”表示需要额外保护时间,数据”FF”有特殊含义
TD1“81”使用T=1协议,TA2至TC2不存在,TD2存在
TD2“31”使用T=1协议,TA3至TB3存在,TC3和TD3不存在
TA3“10”至”FE”回送IFSI,表示IC卡信息域大小的初始值,16~254字节
TB3高4位组”0”至”4”; 低4位组”0”至”5”BWI = 0~4; CWI = 0~5
TCK校验字符

注:T=0和T=1的比较:
T=0是以字符为最小的传输单位。在此协议中,读卡器向卡发送APDU指令,就是由5个字符组成,这5个字符每一个意义都很明确固定。而T=1协议中,除了定义了块的结构外,其他信息都存储在INF中,也就是说读卡器对卡发送的指令和数据都存在这个INF域中,而并没有对这些指令和数据作严格的规定,在这方面T=1较T=0更为灵活。

5.3 接口字符TAi、TBi、TCi、TDi(i=1、2、3等等)
TAi:高4bit为FI(时钟率转换因子),低4bit为DI(波特率校正因子);
TBi:bit1bit5:最大编程电压,bit6bit7:最大编程电流,bit8不使用。
TCi:计算八位额外保护时间的引用。
TA2:存在则是专用模式,不存在则是协商模式,需通过PPS命令去确认协议。
当TA2的bit5=0时使用Fi和Di,若bit5=1时,使用默认值。
TDi: 指明协议类型和是否存在后续接口字符,TDi包括Yi+1和T两部分,Yi+1为高四位组,分别表示后续接口字符TAi+1、TBi+1、TCi+1、TDi+1是否存在,T为低四位组,表示后续发送的协议类型。
在这里插入图片描述

5.3.1 TA1
TA1传达FI和DI的数值,其中:FI(高4位)用来确定F的数值,F为时钟频率转换因子,用于修改继复位应答之后由终端所提供的时钟频率。DI(低4位)用来确定D的数值,称为比特率调节因子,用于调整复位应答之后所使用的位持续时间。
在这里插入图片描述
在这里插入图片描述

• 复位应答时的位持续时间称为初始etu,并由正式算出:
初始etu = 372/f 秒,式中 f 的单位为Hz,表示复位响应时的初始频率。
• 复位应答(以及全局参数F与D的设立)之后的持续时间,称为当前etu,其计算公式为:
当前etu=F/Df 秒,式中f 的单位为Hz,表示后续传送时的当前工作频率。
复位应答期间使用的缺省值为:FI=1和DI=1,表示:F=372和D=1
• 基本响应: IC卡不回送TA1,则在整个后续信息交换过程中继续使用缺省值F=372和D=1。
• 终端反应: 终端不得拒绝一个回送TA1=“11”的IC卡(如果T0的b5位被置为1),并在所有后继交易中,继续使用F=372,D=1。

5.3.2 TB1
TB1传送PI1和I1之值,其中:
– 在b1~b5位中定义,用于确定IC卡所需的最大编程电压P值。b1=0表示IC卡不使用Vpp。
– 在b6~b7位中定义,用于确定IC卡所需的最大编程电流I值。b1=0表示不使用此参数。
– b8位不使用,并设置为逻辑“0”。
• 基本响应: IC卡将回送TB1=“00”,表示IC卡不使用VPP。
• 终端响应: 若T0的b6被置“1”,IC卡回送的TB1为任意值时,或T0的b6被置为“0”,IC卡回送TB1时,终端不得拒绝此卡,但也不产生VPP,并继续用卡过程,就象回送了TB1=“00”一样。

5.3.3 TC1
TC1传送N值,N为额外保护时间。N为TC1的b8b1位的二进制码,其值表示了额外保护时间所增加的etu数,其值为0255之间。N=255(TC1=“FF”)有特别的含义,它表明两相邻字符的起始位前沿之间的最短间隔时间: T=0为12etu;T=1为 11etu。
注意,TC1仅用于从终端送到IC卡的两相邻字符间的定时,它既不用于从IC卡送到终端的两相邻字符间的定时,也不用于反向传送的二字符间的定时(请参看传输协议一节中关于T=0或T=1的时序的叙述)。
• 基本响应: IC卡回送的TC1之值应在“00”至“FF”的范围内。
• 终端响应: 当IC卡不回送TC1(假定T0的b7位被置为“0”)时,终端不得拒绝,并
续用卡过程的处理,就像回送了TC1=“00”一样。
建议在设计IC卡时,应把TC1置成IC卡可接受的最小值,较大的TC1值会导致终端和IC卡间的通信过慢,从而延长了交易时间。

5.3.4 TD1
TD1表示有无更多的接口字节传送,以及关于传输协议类型的信息,其中
– 高半字节用来表示字符TA2至TD2是否存在,b5~b8各位中被置为逻辑“1”的,就表示相应的TA2至TD2中该字符的存在。
– 低半字节提供了关于后继交换所用传输协议类型的信息。
基本响应: 当选用T=0协议时,则IC卡将不回送TD1,后继传送协议缺省为T=0。当选用T=1协议时,则IC卡必须回送TD1=“81”,以表明TD2的存在,并后继传送传输协议为T=1。
终端反应: 当IC卡回送的TD1的高四位组有任意值(假设回送之值正确地表示并与实际回送的接口字符TA2至TD2一致),且低四位组之值为“0“或“1”,则终端不得拒绝。终端必须拒绝回送其它TD1之值的IC卡。

5.3.5 TA2
字符TA2的存在与否相应地表示IC卡是以特定模式或是交互模式工作。
基本响应: IC卡UQF 不回送TA2,TA2不存在表示以交互模式工作。
终端响应: 如果终端在复位应答期间能够支持由IC卡通过TA2所指明的额外条件,它不拒绝这样的IC卡,并应能立即使用这些条件。

5.3.6 TB2
TB2传送PI2,PI2用于确定IC卡所需编程电压P的值。当它存在时,它就取代由TB1中回送的PI1的值。
基本响应: IC卡不应回送TB2。
终端反应: 终端不应拒绝IC卡回送TB2,但不论是否回送、回送了何值,终端均不产生VPP。

5.3.7 TC2
TC2是T=0型协议所特有的,它传达了用来决定由IC卡发送的任意一个字符起始位上升沿与由IC卡或终端传送的前一字符的起始位上升沿之间的最大间隔的工作等待时间(WI)。工作等待时间为:960×D×WI。
基本响应: IC卡不得回送TC2,且后续通讯中使用缺省值WI=10。
终端反应: 终端不得拒绝回送TC2=10的IC卡。

5.3.8 TD2
TD2表示是否还要发送更多的接口字节,以及关于后继传输所用的协议类型,其中
– 高半字节用来表示字符TA3至TD3是否存在,b5~b8各位中被置为逻辑“1”的,就表示相应的TA3至TD3的存在。
– 低半字节表示用于后继传送的协议类型,如果使用T=1,低半字节值为“1”。
基本响应: 如果使用的是T=0,则IC卡不回送TD2,后续传输协议缺省的T=0。如果使用的是T=1,而IC卡必须回送TD2=“31”,以表示TA3和TB3的存在,而后续传输协议为T=1。
终端反应: 当IC卡回送的TD2的高半字节有任意值(假设回送之值正确且与实际回送的接口字符TA3至TD3一致),而低半字节的值为“1”或“E”,则终端不得拒绝,终端必须拒绝回送其它TD2之值的IC卡。

5.3.9 TA3
TA3回送信息域长度整数(IFSI),它决定了IC卡信息字段长度(IFSC),并规定了IC卡能够接收的字组的最大长度。它以字节形式表示IFSC的长度,取值范围为“01”至“FE”之间的任何值,“00”和“FF”二值留作备用。
基本响应: 如果使用了T=1,则IC卡必须以TA3为“10”至“FE”间之值予以回送,以表示初始的IFSC在16至254字节的范围内。
终端反应: 终端不得拒绝未回送TA3(假设TD2的b5位被置为“0”)的IC卡,但如果接受了这样的IC卡,它必须以“20”作为TA3之值继续用卡过程。终端必须拒绝回送的TA3之值在“00”至“0F”间或为“FF”的IC卡。

5.3.10 TB3
TB3表明了用来计算CWT和BWT的CWI和BWI之值, TB3由两部分组成,低半字节(b1b4)用来表示CWI之值,而高半字节(b5b8)用来表示BWI之值。
基本响应: 如果使用了T=1,则IC卡应回送这样的TB3:高半字节取值为‘0’‘5’,低半字节取值为‘0’‘4’。即CWI之值为0至5之间,而BWI之值为0—4之间。

5.3.11 TC3
TC3指明了所用的块错误检测代码的类型,类型由b1位表示,而b2至b8未用。
基本响应: 使用纵向冗余校验(LRC)作为错误检测码时,IC卡不必回送TC3。

5.4 历史字符T1、T2、Tk
指明了一些通用信息,如卡的制造商,卡中被嵌入的芯片、卡的文件状态等。

5.5 校验字符Tck
TCK具有一个检验复位应答期间所发送数据完整性的值,TCK的值应使从T0至TCK(包括TCK)的所有字节的异或操作结果为0。
基本响应: 如使用T=0协议,将不发送TCK,而在其他情况下,都发送TCK。
终端反应: 在使用T=0协议时,终端应拒绝回送TCK的IC卡。如果IC卡回送了TCK,终端应能对TCK进行赋值。

6 ISO7816通信数据实例
本实例使用金思特电子的Kingst LA5016 usb 逻辑分析仪检测IOS7816数据通讯。以下几图是一个完整的数据包分析截图。从图中可以看到,IOS7816协议可以将ATR解析为初始字符TS,格式字符T0/T1,接口字符TAi~TDi,历史字符T1,T2,…,Tk, 及校验字符Tck等 。

协议解析参数设置:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
参考资料:ISO7816-1234.pdf
下一章链接:ISO7816协议深度解析-简单易懂协议详解(二)

  • 43
    点赞
  • 220
    收藏
    觉得还不错? 一键收藏
  • 19
    评论
### 回答1: ISO7816是智能卡产业界所使用的标准通信协议,主要规范了智能卡与读卡器之间的数据传输方式和通信协议ISO7816标准将整个通信协议分为两部分:物理接口和传输协议。其中,ISO7816传输协议1-15规定了智能卡与读卡器之间的应用层通信协议ISO7816传输协议1定义了与卡片之间的基础通信规范,包括卡片初始化、ATR等基本概念;ISO7816传输协议2指定了卡片与读卡器之间的命令-响应数据传输模型,确定了卡片指令的格式;ISO7816传输协议3-6定义了卡片指令的格式、卡片状态字的含义等;ISO7816传输协议7规定了寻找和选择有效应用的方法;ISO7816传输协议8规定了与逻辑通道相关的操作;ISO7816传输协议9、10定义了与控制权相关的操作和数据对齐规则;ISO7816传输协议11-13定义了与文件系统相关的操作;ISO7816传输协议14规定了与安全相关的操作;ISO7816传输协议15则定义了与自动测试机制相关的操作。 总的来说,ISO7816传输协议1-15是智能卡与读卡器之间进行应用层通信时所需要遵守的一系列规范和标准,它们指导了智能卡与读卡器之间的通信协议,确保了智能卡与读卡器之间的稳定、快速、安全的数据传输。 ### 回答2: ISO7816是一种接口标准,用于智能卡与读写设备之间的通讯。该标准定义了智能卡与读写设备之间的物理连接、电气连接方式、通讯协议以及应用程序设计接口等方面的要求。 在ISO7816传输协议中,常用的有1-15种不同的协议。其中,第一种协议是基础协议,并且被所有智能卡和读写设备所支持。其他协议则根据不同的需求在基础协议的基础上做了进一步优化和扩展。 第二种协议是从基础协议中抽象出来的,在数据传输方面比基础协议有更多优化,可提供更快的数据传输速率。第三种协议则在第二种协议的基础上增加了错误检测和纠正功能。此外,还有第四种协议,采用类似于"中断"的方式实现数据传输,适用于一些需要在数据传输中断时进行处理、或进行非即时数据传输的应用程序。 在ISO7816传输协议的15种协议中,每种协议都有其特定的应用程序和使用场景。我们可以根据实际需求选择合适的协议,以此来提高智能卡与读写设备之间的数据传输效率和安全性。 ### 回答3: ISO 7816传输协议是智能卡与终端设备之间进行通信的标准协议。这个协议定义了通信的各个方面,包括物理连接、命令结构、数据格式和错误处理等方面。 首先,在传输协议的第1到5部分,定义了智能卡和终端设备之间的物理接口和电气性能。这些规定包括了智能卡的卡体尺寸、接口引脚、传输速率、时钟频率等。 其次,在传输协议的第6到8部分,定义了智能卡与终端设备之间的通信命令结构。这些规定包括了命令APDU和响应APDU结构,以及各种命令的指令代码、数据域和字节长度等。 再次,在传输协议的第9到12部分,定义了智能卡与终端设备之间的数据格式。这些规定包括了不同类型的数据格式,例如二进制、BCD、ASCII等,以及数据格式转换的算法。 最后,在传输协议的第13到15部分,定义了智能卡与终端设备之间的错误处理方法。这些规定包括了各种错误码,以及错误处理流程等。 总体而言,ISO 7816传输协议是智能卡与终端设备进行通信的标准协议,涵盖了物理连接、命令结构、数据格式和错误处理等各个方面。这个协议的规定能够使智能卡和终端设备之间的通信更加稳定和可靠。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值