对于 I S O / I E C 7816 ISO/IEC\quad 7816 ISO/IEC7816协议的介绍我直接将*和 I S O ISO ISO组织的该协议的标准文档中的介绍复制了过来:
- *:ISO/IEC 7816 is an international standard related to electronic identification cards with contacts, especially smart cards, and more recently, contactless mobile devices, managed jointly by the International Organization for Standardization (ISO) and the International Electrotechnical Commission (IEC).It is edited by the Joint technical committee (JTC) 1 / Sub-Committee (SC) 17, Cards and personal identification.[1]
- 官方文档:ISO/IEC 7816 is a series of standards specifying integrated circuit cards and the use of such cards for interchange. These cards are identification cards intended for information exchange negotiated between the outside world and the integrated circuit in the card. As a result of an information exchange, the card delivers information (computation result, stored data), and/or modifies its content (data storage, event memorization).
从以上的介绍中我们可以知道 I S O / I E C 7816 ISO/IEC\quad 7816 ISO/IEC7816协议主要是针对我们生活中常见的“身份证”、“手机SIM卡”、“银行卡”、“公交卡”(当然不止提到的这些,还有很多)等的智能卡片的通讯协议标准。 I S O / I E C 7816 ISO/IEC\quad 7816 ISO/IEC7816协议又被划分为15个部分之多,每个部分都对应特定的内容。在 I S O ISO ISO的官方网站上有 I S O / I E C 7816 ISO/IEC\quad 7816 ISO/IEC7816协议的官方文档,但是不免费。第一部分和第二部分主要介绍卡片必须满足的一些物理特性以及卡片的尺寸、触电的位置以及布局等。对于软件工程师来说,这两部分没要太多要关心的。第三部分我觉得还是很重要的,我也主要只大概了解了这一部分,今天的介绍主要以第三部分为主。如果你以后要从事着方面的工作的话可以根据项目需要再决定详细研究一下特定部分的内容。以下是我从官方文档上复制过来的对于每一部分文档内容的介绍。可以知道第三部分主要介绍了电子接口以及异步卡的传输协议。
Five parts are specific to cards with galvanic contacts and three of them specify electrical interfaces.
- ISO/IEC 7816-1 specifies physical characteristics for cards with contacts.
- ISO/IEC 7816-2 specifies dimensions and location of the contacts.
- ISO/IEC 7816-3 specifies electrical interface and transmission protocols for asynchronous cards.
- SO/IEC 7816-10 specifies electrical interface and answer to reset for synchronous cards.
- ISO/IEC 7816-12 specifies electrical interface and operating procedures for USB cards.
All the other parts are independent of the physical interface technology. They apply to cards accessed by contacts and/or by contactless technology.
- ISO/IEC 7816-4 specifies organization, security and commands for interchange.
- ISO/IEC 7816-5 specifies registration of application providers.
- ISO/IEC 7816-6 specifies interindustry data elements for interchange.
- ISO/IEC 7816-7 specifies commands for structured card query language.
- ISO/IEC 7816-8 specifies commands for security operations.
- ISO/IEC 7816-9 specifies commands for card management.
- ISO/IEC 7816-11 specifies personal verification through biometric methods.
- ISO/IEC 7816-13 specifies commands for application management in a multi-application environment.
- ISO/IEC 7816-15 specifies cryptographic information application.
首先从图一可以看一下接触式卡的引脚数量以及布局。第三部分讲的是异步卡,因此下面的时钟信号不是用来同步通信的而是用来驱动卡片上的芯片的(如果有的话)。这里只有一根数据通讯线 C 7 C7 C7,既用于输入,也用于输出。
- C1:电源输入
- C2:复位信号输入
- C3:时钟信号输入
- C4:保留以后使用
- C5:接地
- C6:这个引脚比较特殊,可用于输入或输出,可能专用,也可能遵循标准,由具体协议决定
- C7:数据通信线
- C8:保留以后使用
对于 C 1 C1 C1的电源输入,卡片可以分为以下三类:
- 5 V for class A.
- 3 V for class B.
- 1,8 V for class C.
接口设备(读卡器)和卡片的交互过程包含了以下一些内容:
- 在接口设备和卡片完全机械连接完成之前,电路应该保持非激活状态。
- 接口设备如果想和卡片通信可能需要激活、冷复位或者一次或几次的热复位卡片
- 如果卡片支持这一类(5V,3V,1.8V)的话,卡片会回复接口设备的复位(Answer to reset,ATR)
- 如果接口设备和卡片想继续通信的话还要协商一下具体使用哪种通信协议以及通信的参数。
- 当双方不想继续通信了,接口设备可以停止时钟信号的发送(如果卡片支持的话,有需求的可以看一下官方 7816 − 3 7816-3 7816−3文档的 6.3.2 6.3.2 6.3.2小节。)并 D E A C T I V A T I O N DEACTIVATION DEACTIVATION卡片, D E A C T I V A T I O N DEACTIVATION DEACTIVATION操作应该在接口设备和卡片没有机械断开之前完成。
下面讲一下激活和冷复位的流程,图2截取来至于第三部分的 I S O / I E C 7816 ISO/IEC\quad 7816 ISO/IEC7816官方文档。接口设备激活卡片的时候(时间 T a T_a Ta之前):
- 卡片复位信号引脚有低电平输入
- 卡片 V C C VCC VCC引脚有电源输入
- 卡片时钟信号引脚有时钟信号输入
- 接口设备的IO引脚处于接收模式(一般是高电平)。在激活卡片期间接口设备忽略IO引脚的状态。
冷复位开始于卡片时钟信号引脚有时钟信号输入后,即时间
T
a
T_a
Ta之后,这时卡片应该在200个时钟周期之内(时间跨度区域
t
a
t_a
ta)将
I
O
IO
IO信号线拉高。冷复位产生的条件是从时间
T
a
T_a
Ta开始复位引脚处于低电平状态至少400个时钟周期(时间跨度区域
t
b
t_b
tb),接口设备在复位引脚为低电平的时候会忽略IO引脚的状态。在时间
T
b
T_b
Tb,接口设备将复位引脚拉高,这时从时间
T
b
T_b
Tb开始算起,卡片应该在400到40000个时钟周期区间内(时间跨度区域
t
c
t_c
tc)向接口设备发送
A
n
s
w
e
r
T
o
R
e
s
e
t
(
A
T
R
)
Answer\quad To\quad Reset(ATR)
AnswerToReset(ATR),如果接口设备没有收到的话,接口设备会对卡片执行
D
E
A
C
T
I
V
A
T
I
O
N
DEACTIVATION
DEACTIVATION操作。
热复位的流程基本和冷复位一样,只不过卡片向接口设备发送的
A
n
s
w
e
r
T
o
R
e
s
e
t
(
A
T
R
)
Answer\quad To\quad Reset(ATR)
AnswerToReset(ATR)在热复位和冷复位的情况下可能有所不同,并且热复位的时机比较随意,甚至可以在卡片向接口设备发送的
A
n
s
w
e
r
T
o
R
e
s
e
t
(
A
T
R
)
Answer\quad To\quad Reset(ATR)
AnswerToReset(ATR)期间进行热复位。
接口设备可能最开始不知道卡片的类型(
5
V
,
3
V
,
1.8
V
5V,3V,1.8V
5V,3V,1.8V),这里也有一个流程是接口设备怎么去确定卡片的类型,这里就不具体讲述了,有需求的可以看一下官方
7816
−
3
7816-3
7816−3文档的
6.2.4
6.2.4
6.2.4小节。
当接口设备收到卡片发送的
A
n
s
w
e
r
T
o
R
e
s
e
t
(
A
T
R
)
Answer\quad To\quad Reset(ATR)
AnswerToReset(ATR)之后,接下来接口设备和卡片要协商一下具体使用哪种通信协议以及通信的参数。这里只是一个大概,后面还会有关于
A
n
s
w
e
r
T
o
R
e
s
e
t
(
A
T
R
)
Answer\quad To\quad Reset(ATR)
AnswerToReset(ATR)的结构以及各部分含义和协商过程的详细说明。图3是该过程的流程图,截取来至于第三部分的
I
S
O
/
I
E
C
7816
ISO/IEC\quad 7816
ISO/IEC7816官方文档。
当接口设备接收到的
A
n
s
w
e
r
T
o
R
e
s
e
t
(
A
T
R
)
Answer\quad To\quad Reset(ATR)
AnswerToReset(ATR)中包含
T
A
2
TA_2
TA2字节时,表明卡片处于特别的模式,这时接口设备应该使用
T
A
2
TA_2
TA2字节中规定的具体协议和参数和卡片通信。
当接口设备接收到的
A
n
s
w
e
r
T
o
R
e
s
e
t
(
A
T
R
)
Answer\quad To\quad Reset(ATR)
AnswerToReset(ATR)中不包含
T
A
2
TA_2
TA2字节时,表明卡片处于协商模式。这时接口设备向卡片发送数据时使用的是卡片向接口设备发送
A
n
s
w
e
r
T
o
R
e
s
e
t
(
A
T
R
)
Answer\quad To\quad Reset(ATR)
AnswerToReset(ATR)时使用的传输参数,其实就是默认参数。
- 如果在协商过程中卡片收到的第一个字节数据为 0 x F F 0xFF 0xFF,则表明接口设备开始了一次 P P S e x c h a n g e PPS\quad exchange PPSexchange, P P S e x c h a n g e PPS\quad exchange PPSexchange过程中使用的是默认参数, P P S e x c h a n g e PPS\quad exchange PPSexchange过程结束后,接口设备和卡片就使用它们协商好的协议和参数进行通信。
- 如果在协商过程中卡片收到的第一个字节数据不是 0 x F F 0xFF 0xFF,则表明接口设备已经在使用 A n s w e r T o R e s e t ( A T R ) Answer\quad To\quad Reset(ATR) AnswerToReset(ATR)中 T D 1 TD_1 TD1字节规定的协议以及默认参数在和卡片通信。这种卡片一般只提供一种通信协议并且参数使用默认值。
官方文档第三部分的 6.3.1 6.3.1 6.3.1小节中对该部分还有一些注意事项,有需要的可以看看。当接口设备和卡片的信息交换完成或被终止(卡片不响应,卡片被移除)之后,接口设备应该执行 D E A C T I V A T I O N DEACTIVATION DEACTIVATION操作。具体流程如下:
- 将卡片的复位信号线拉低
- 将卡片的时钟信号线拉低
- 将卡片的 I O IO IO信号线拉低
- 卡片的 V C C VCC VCC信号线不再有电源输入
协议规定一个比特的持续时间
E
l
e
m
e
n
t
a
r
y
T
i
m
e
U
n
i
t
(
e
t
u
)
Elementary \quad Time\quad Unit(etu)
ElementaryTimeUnit(etu)为:
1
e
t
u
=
F
D
×
1
f
1etu = \dfrac{F}{D}\times \dfrac{1}{f}
1etu=DF×f1
这里的
F
F
F和
D
D
D是接口设备和卡片需要协商的参数,
F
F
F和
D
D
D的默认值分别是372和1,也即是卡片向接口设备发送
A
n
s
w
e
r
T
o
R
e
s
e
t
Answer\quad To\quad Reset
AnswerToReset时使用的参数值,
f
f
f是提供给卡片的时钟频率。协议的字符帧的格式和
U
S
A
R
T
USART
USART协议的一样,如图4所示。一个比特开始位,接下来是8比特数据位然后是奇偶校验位(协议使用的是偶校验),最后是停止位。不同的是如果接收方通过接收到的奇偶校验位发现接收到的数据有错误,则接收方会在本来的停止位区间拉低信号线(持续最少一个
e
t
u
etu
etu,最多两个
e
t
u
etu
etu),并期待发送方重发刚才出错的数据字节,如图5所示。当接收方通过接收到的奇偶校验位发现接收到的数据有错误时,支持
T
=
0
T=0
T=0协议的卡片必须在本来的停止位区间拉低信号线。而对于接口设备和不支持
T
=
0
T=0
T=0协议的卡片可以选择拉低或不拉低信号线。
S
T
M
32
STM32
STM32的
F
10
F10
F10系列芯片的
U
S
A
R
T
USART
USART模块也有对应的支持
7816
−
3
7816-3
7816−3异步智能卡协议的模式。
接下来我们来看一下 A n s w e r T o R e s e t ( A T R ) Answer\quad To\quad Reset(ATR) AnswerToReset(ATR)的结构,如图6所示。 A T R ATR ATR的第一个字节数据为 T S TS TS初始化字节, T S TS TS初始化字节后面最多可以有32个字节数据。 T S TS TS初始化字节是卡片向接口设备告知卡片的编码习惯,一共有两种情况(这里 L L L表示低电平, H H H表示高电平,从左到右依次表示一个字节数据的8个比特位的第7到第0位):
- L L L L L L H H LL \quad LLL \quad LHH LLLLLLHH:高电平编码二进制 0 0 0,低电平编码二进制 1 1 1,开始位后发送的是一个字节数据的第7位,即 M S B MSB MSB优先发送。
- L L H H H L H H LL \quad HHH \quad LHH LLHHHLHH:高电平编码二进制 1 1 1,低电平编码二进制 0 0 0,开始位后发送的是一个字节数据的第0位,即 L S B LSB LSB优先发送。
格式化字符 T 0 T0 T0的结构如图7所示,比特0到比特3一共四个比特的值表示一共有 k k k个历史字符字节 T 1 , T 2 , . . . , T k T_1,T_2,...,T_k T1,T2,...,Tk。比特7到比特4的值分别表示 T A 1 , T B 1 , T C 1 , T D 1 , TA_1,TB_1,TC_1,TD_1, TA1,TB1,TC1,TD1,字节数据是否存在(0:不存在,1:存在)。接口字符 T D i TD_i TDi的结构如图8所示,比特0到比特3一共四个比特的值表示卡片支持的协议或其它信息。如果 T D 1 , T D 2 TD_1,TD_2 TD1,TD2和其它的 T D i TD_i TDi字节存在,则它们编码的协议号应该呈现升序,比如在 T D 1 TD_1 TD1中编码协议号0,比如在 T D 2 TD_2 TD2中编码协议号1。如果 T D 1 TD_1 TD1存在的话,它编码卡片第一个支持的协议,如果 T D 1 TD_1 TD1不存在的话,则说明卡片仅仅支持 T = 0 T=0 T=0协议。比特7到比特4的值分别表示 T A i + 1 , T B i + 1 , T C i + 1 , T D i + 1 TA_{i+1},TB_{i+1},TC_{i+1},TD_{i+1} TAi+1,TBi+1,TCi+1,TDi+1字节数据是否存在(0:不存在,1:存在)
接口字符 T A i , T B i , T C i , T D i TA_{i},TB_{i},TC_{i},TD_{i} TAi,TBi,TCi,TDi可以是全局的或特定的:
- 全局的接口字符里面提供了卡片的硬件参数。
- 特定的接口字符里面提供了卡片支持的传输协议参数。
下面来简单讲几个接口字符的含义。
T
A
1
TA_1
TA1给出了前面提到的参数
F
F
F和
D
D
D以及卡片支持的输送给它的最大频率值
f
m
a
x
f_{max}
fmax。
F
F
F,
D
D
D和
f
m
a
x
f_{max}
fmax的默认值为
372
,
1
,
5
M
H
Z
372,1,5MHZ
372,1,5MHZ。
T
A
2
TA_2
TA2是特别模式字节,在前面提到的图3中需要。比特3到比特0的值表示该特别模式的协议类型,如果比特4为0则表示参数
F
F
F和
D
D
D应该使用
T
A
1
TA_1
TA1给出的值,如果比特4为1则表示参数
F
F
F和
D
D
D应该使用默认值。如果比特7为1,则接口设备只能使用比特3到比特0定义的特定协议和比特4规定的参数和卡片通信(如果接口设备支持该特定的协议和参数的话,否则接口设备就要热复位卡片或
D
A
C
T
I
V
A
T
I
O
N
DACTIVATION
DACTIVATION卡片),如果比特7为0,则此时还可以转换为图3的协商模式。如果
A
T
R
ATR
ATR中不存在
T
A
2
TA_2
TA2特别模式字节且从
A
T
R
ATR
ATR中知道卡片仅仅支持一种传输协议(在
T
D
1
TD_1
TD1中)则此时是没有图3中的
P
P
S
e
x
c
h
a
n
g
e
PPS\quad exchange
PPSexchange过程的。否则就有图3中的
P
P
S
e
x
c
h
a
n
g
e
PPS\quad exchange
PPSexchange过程,也就是和卡片确定双方交流过程中的通信协议和参数。
在
P
P
S
e
x
c
h
a
n
g
e
PPS\quad exchange
PPSexchange过程中:
- P P S e x c h a n g e PPS\quad exchange PPSexchange仅仅由接口设备发起。
- 如果卡片收到正确的 P P S e x c h a n g e PPS\quad exchange PPSexchange请求,则卡片应该向接口设备发送 P P S e x c h a n g e PPS\quad exchange PPSexchange相应。
- 如果卡片收到错误的 P P S e x c h a n g e PPS\quad exchange PPSexchange请求,则卡片不会发送 P P S e x c h a n g e PPS\quad exchange PPSexchange相应。
- 如果接口设备收到错误的相应, W T WT WT时间超时, P P S e x c h a n g e PPS\quad exchange PPSexchange过程失败,接口设备应该 D E A C T I V A T I O N DEACTIVATION DEACTIVATION卡片。
P P S e x c h a n g e PPS\quad exchange PPSexchange请求和响应的结构相同,如图9所示。 P P S S PPSS PPSS固定为 0 x F F 0xFF 0xFF, P P S S 0 PPSS0 PPSS0的第4、5和第6个比特的值的0和1分别表明 P P S S 1 PPSS1 PPSS1字节、 P P S S 2 PPSS2 PPSS2字节和 P P S S 3 PPSS3 PPSS3字节不存在或存在。第7个比特保持为0。第3到第0个比特表示的值表明接口设备想和卡片进行通信而使用的协议。 P P S S 2 PPSS2 PPSS2的值表明接口设备想和卡片进行通信而使用的协议的参数 F F F和 D D D,其编码方式和 T A 1 TA_1 TA1一样。如果 P P S e x c h a n g e PPS\quad exchange PPSexchange过程成功的话, P P S e x c h a n g e PPS\quad exchange PPSexchange请求和响应的每一个字节数据应该一样,当然也可能有区别,至于细节的内容可以查看官方文档。
接下来就应该是具体的协议了,其实这部分还是挺多的,我接触的不多,就不准备继续写下去了。其实这里就像 I S O ISO ISO官方对 7816 7816 7816协议每部分的初始介绍一样,具体的协议应该就已经和具体的物理接口没有关系了。这里的 7816 − 3 7816-3 7816−3对应的是异步卡, 7816 − 10 7816-10 7816−10对应的是同步卡, 7816 − 12 7816-12 7816−12对应的是 U S B USB USB卡。我这里算是开了个头,如果以后想深入了解看官方文档就可以了。
s t m 32 stm32 stm32的 F 10 F10 F10系列芯片的 U S A R T USART USART模块有对 7816 − 3 7816-3 7816−3协议异步卡的支持,官方也给出了对应的 D E M O DEMO DEMO和库文件,如图10所示。有需要的可以利用其来开发一些简单的 D E M O DEMO DEMO。