ISO7816 接口调试与使用

简介: ISO7816 是一种标准化的接触式的智能卡通信协议,用于读写接触式智能卡,例如PSAM、SAM、手机的SIM卡等皆符合该协议标准。ISO7816是一种半双工串行通信接口,由VCC, RESET, CLK, IO, VPP(保留接口,不使用)组成。本文以平头哥芯片的ISO7816接口为样例,介绍ISO7816的基础知识(主要包扩iso7816-3, iso7816-4),以及如何快速上手开发调试。

ISO7816接口硬件说明

智能卡触点

触点 功能 触点 功能
C1 供电电压,VCC C5 GND
C2 复位 RESET C6 编程电压VPP(通常不启用)
C3 时钟 CLK C7 输入输出IO
C4 保留 C8 保留

MASTER端接口

VCC/VE:供电引脚,主机端向卡端的供电输出,通常支持A,B,C三类供电。

VE引脚通支持智能卡三种不同的工作电压:

● 5 V(ISO7816-3 A 类)

● 3 V(ISO7816-3 B 类)

● 1.8 V(ISO7816-3 C 类)

RESET:复位引脚,连接卡端的reset,用于激活以及复位智能卡

CLK:通信时钟

IO:数据输出

CARD_DE:卡插入检测,当卡插入卡槽产生上升沿,触发检测中断。

协议简述

ISO7816接口为半双工通信,使用一根信号线传输数据,同一时间能读或者写。ISO 7816-3 标准为异步协议定义了时间基准单位,称作 ETU (elementary time units),它与输入至智能卡的时钟频率有关(一个ETU时间由多个CLK组成,例如默认ETU为372个CLK),一个 ETU 的长度是一个位时间,每个ETU传输一个bit。

智能卡硬件连接

ISO 7816:协议概述

简介

“ISO 7816:识别卡——带有触点的集成电路卡”提供一套设计防篡改的智能集成电路卡(Intergrated Circuit Card,ICC)的 规范。ISO 7816 包括至少 6 个经审核的部分和一些有待审核的新 增部分,如下:

● 第 1 部分:物理特性

● 第 2 部分:触点的尺寸和位置

● 第 3 部分:电气接口和传输协议

● 第 3 部分:协议类型选择的修正版本 2

● 第 4 部分:交互的结构、安全和命令

● 第 5 部分:应用提供商的注册

智能卡激活流程

ISO 7816-3 主要描述智能卡通信物理层相关标准,此标准将智能卡与读卡器之间的关系 描述为“主”(读卡器 和“从”(智能卡)关系。建立通信的方式为:读卡器通过之前所 述的触点向智能卡发信号,然后智能卡相应地做出响应。智能卡和读卡器之间通信流程如下:

1.读卡器等待卡插入

2.检测到卡后进行激活

3.解析ART并进行协商

4.通信(发送APDU指令等)

智能卡的激活

将智能卡插入读卡器时,不会对任何触点施加电源。对错误的触点施加电源可能会严重损坏 智能卡上的芯片,如果在已上电的触点之间插入智能卡,很容易出现这种情况。触点将保持 断电状态,直到主机端检测到卡插入信号(一般卡槽会在卡完全插入时闭合一个开关,配合外部电路可以产生一个边沿信号),主机端执行激活序列。

当读卡器检测到已正确插入智能卡后,对卡施加电源。智能卡首先进入的是空闲状态,然后 读卡器通过 RST 线向智能卡发送一个复位信号。当电源 (V CC ) 触点处于正常稳定的 5 V 工 作电压时,智能卡将进入空闲状态。即使在 I/O 状态下引入一些在 3 V 下工作的微处理器芯 片,也始终先应用 5 V 的初始电源设置。在读卡器一侧将 I/O 触点设置为接收模式,并应用 提供稳定时钟 (CLK)。复位线处于低电平状态。它必须在低电平状态下保持至少 40 000 个 时钟周期,读卡器才能启动有效的复位序列,从而将复位线提升到高电平状态。

智能卡激活包括以下阶段:

复位应答 (ATR)

PPS

读卡器与智能卡之间的数据传输通过两条接触线的协同操作来进行:CLK 和 I/O。I/O 引线根 据它相对于 GND 的电压,在每个由 CLK 定义的单位时间内传送一个比特的信息。可以用 +5 V 或 0 V 电压来表示逻辑的 ‘1’,实际操作中,这由智能卡传送给读卡器的 ATR 中的“初 始字符”也被称作 TS 所决定。在 I/O 引线上每传送 10 个比特代表一个字节的信息;最先的 是“起始位”,最后一位是偶校验位。I/O 信号线可以用高电平 (H) 也可以用低电平 (L) 来表 示一个比特位。TS 字符 为 HLHHLLLLLLH 时,表示智能卡使用“反向约定”,即 H 表示 ‘0’,L 表示 ‘1’。TS 符号为 HLHHLHHHLLH 时,表示智能卡使用“正向约定”,即 H 表示 ‘1’,L表示 ‘0’。

此外,正向约定和反向约定还控制着在智能卡与读卡器之间传输的每个字节的位序。在正向 约定中,起始位后面的第一个位是字节的低序位。后面的位序依次增高。在反向约定中,起 始位后面的第一个位是字节的高序位。后面的位序依次降低。传输的每个字节的奇偶校验都 应为偶校验;这意味着,字节中比特为 1 的总数(包括奇偶校验位)必须为偶数。I/O 信号线是一个半双工通道,这表示,智能卡或者读卡器可以在同一个通道上传输数据, 但是两者不能同时传输。所以作为启动顺序的一部分,读卡器和智能卡都进入接收状态,侦 听 I/O 信号线。在开始复位操作时,读卡器处于接收状态,而智能卡必须进入发送状态,并 发送 ATR 至读卡器。从此之后,通道两端在发送和接收两个状态之间互相交替。在半双工通 道中,没有一种可靠的方法,使得任何一方可以异步地从发送状态改变到接收状态,或者从 接收状态转到发送状态。如果需要这种改变,那么要改变的一方需要进入接收状态,使得正 在进行的操作过程超时;然后读卡器一方总是会尝试重新进入发送状态,来重新建立一个认 可的操作序列。CLK 和 I/O 信号线支持宽范围的不同数据传输速度。速度由智能卡定义,并 通过 ATR 中的可选项字符传送给读卡器。传输速度在 I/O 信号线上通过一个比特时间设定, 这个时间决定了在 I/O 信号线上的采样,去读取一个比特以及每个后序比特时的时间间隔。 此时间定义为基本时间单位 (ETU) 并通过多个因素之间的线性关系进行建立。

通信模式

T0协议

T1协议

本文作者:破无明
点击查看原文

相关文章
|
Linux 程序员 API
LINUX系统API---操作目录
LINUX系统API---操作目录
109 0
|
3月前
|
API C语言 C++
DLL导出API注意事项
DLL导出API注意事项
43 7
|
XML 开发工具 数据格式
|
安全 芯片
ISO7816 接口调试与使用
ISO7816 是一种标准化的接触式的智能卡通信协议,用于读写接触式智能卡,例如PSAM、SAM、手机的SIM卡等皆符合该协议标准。ISO7816是一种半双工串行通信接口,由VCC, RESET, CLK, IO, VPP(保留接口,不使用)组成。本文以平头哥芯片的ISO7816接口为样例,介绍ISO7816的基础知识(主要包扩iso7816-3, iso7816-4),以及如何快速上手开发调试。
1068 0
ISO7816 接口调试与使用
|
API
VBS调用系统API
如Beep的API声明为 Public Declare Function Beep Lib “kernel32″ Alias “Beep” (ByVal dwFreq As Long, ByVal dwDuration As Long) As Long 则使用方法如下 '创建对...
1792 0
|
物联网 API Android开发