7816协议
初学者刚上手7816,感觉有些吃力,但经过几天的死磕,终于也是大概了解整体的框架,所以打算记录一下理解过程。
首先要明白几个大的IC卡功能,无非就是接口设备(读卡器)与卡片的通信过程所需要的几个重要功能。
- 上电复位:在卡片接触读卡器后会自动通电,同时需要对卡片进行一次冷复位,防止上一次通讯的残留数据造成干扰。
- 复位应答:在读卡器发出复位信号后,卡片需要对该信号进行应答,并且传输一些参数,如时钟频率。
- 交换命令(正式通信阶段):通过一些协议对卡片的数据进行访问。
1. 上电复位
7816协议有8个触电,而激活卡片只需要4个出点,分别是VCC,CLK,RST,I/O
1.1 冷复位(上电激活后自动)
- VCC上电
- CLK给时钟信号
- RST置L
- I/O置接收
- 200个时钟周期内I/O置H
- RST保持L至少400个时钟周期
- I/O复位应答在RST置H后400-40000个时钟周期内开始(否则去激活) 具体如图所示
1.2 热复位(手动复位)
- VCC、CLK保持,RST置L至少400个时钟周期
- RST置L后,200周期内I/O置接收(置H)
- RST保持L,400个时钟周期后置H
- RST置H后400-40000个时钟周期内复位应答
二、复位应答
下面是复位应答的字符帧
TS | T0 | TAi ...TDi | Tk | TCK |
---|---|---|---|---|
协议类型 | 格式字符 | 数据字符 | 历史字符 | 校验和 |
下面列举一些比较重要的字节位进行介绍
-
TS(指明协议比特的含义) 只能是 (H)LHHL LLL LLH(H) :反向约定(低电平L代表1,高电平H代表0)大端(最先得到的为最高位b8) (H)LHHL HHH LLH(H):正向约定(高电平H代表1,低电平L代表0)小端(最先得到的为最低位b1)
-
T0格式字符
Y1 | K |
---|---|
b8-b5 | b4-b1 |
指明TA1、TB1、TC1、TD1存在 | 历史字符个数 |
- TA1
F | D |
---|---|
时钟频率因子 | 比特调节因子 |
- TA2 决定操作模式 存在:专用模式 不存在:协商模式
- TDi
Y(i+1) | T |
---|---|
指明下一项TA(i+1)...TD(i+1)存在 | 传输类型 |
PS:
· T=0 异步半双工字符传输协议
· T=1 异步半双工块传输协议
- Tk 历史字符 指明通用信息 e.g. 制造商、芯片、文件状态
- TCK校验和 奇偶校验
三、交换命令
基本格式如下表所示
- CLA指令类别
- INS指令类别中的指令代码(最低有效位为0)
- P1P2参数指令
- P3具体协议传输的数据
3.1 PTS(协议类型选择)(在协商模式下使用)
flowchart LR
A[PTSS] -->B[PTS0] --> C[PTS1]
subgraph 参数字符
C --> D[PTS2]-->E[PTS3]
end
E-->F[PCK]
- PTSS 初始化字符(固定为FF)
- PTS0格式字符(b5,b6,b7指明PTS1,2,3的存在,b4-b1为协议类型T,b8=0)
- PTS1(FI、DI调整时钟频率)
- PTS2、PTS3 留未来使用
- PCK校验字符
3.1 PPS(协议参数选择)|协商模式后
flowchart LR
A[PPS] -->B[PPS0] --> C[PPS1]
subgraph .
C --> D[PPS2]-->E[PPS3]
end
E-->F[PCK]
- PPSS 定义请求回复,固定为FF(与APDU区分)
- PPS0 格式字符(b5,b6,b7指明PPS1,2,3的存在,b4-b1为协议类型T,b8=0)
- PPS1 Fd,Dd
- PPS2 是否使用SPU
- PPS3 RFU
- PCK 校验和