前言
本部分内容是前一篇《PSAM嵌入式驱动——概念》的后续篇,本节主要是PSAM做驱动开发要了解的一些基本原理,在此一一阐述,部分内容也是借鉴前辈基础上,加上实践中整理及理解,与项目实际密切相关。
一、PSAM基本交易过程
一般含PSAM的交易终端交互过程如上图,对于嵌入式驱动而言,前四部分是需要实现的,后的步骤都是APDU指令交互的重复,即驱动无关。只需关注如下几个概念即可:
时钟要求:
CLK提供时钟信号:
A类:1~5MHz
B类:1~4MHz
冷复位:
VCC和VPP上电后,加CLK,在200个CLK周期以内将I/O置于状态Z,加时钟后置于RST为状态L,并保持400个CLK周期。然后将RST置为H,在RST置为L结束后的400到40000个CLK周期里CARD将应答复位,否则接口释放电路。
热复位:
冷复位是在稳定的VCC和CLK期间,将RST置为L 400个CLK周期,在RST的上升沿后的400到4000个CLK周期里接口设备的I/O将受到复位应答,否则接口释放电路。
二、复位应答ATR
1. 数据格式
这是ISO中给出的,简单理解复位答复的格式:
2. 格式解析
TS:称为初始字符,他后面最多跟32个字符。
T0:为格式字符(强制)。
A1、TB1、TC1、TD1、……TA(i) 、TB(i) 、TC(i) 、TD(i)为接口字符(可选)。
T1、T2、……….TK为历史字符(条件)。
1)TS初始字符
定义后继字符的解码协议。
它有两种形式:
LHHLLLLLLH(3F)建立一个极性反相协议,m2时刻传输最高有效位(msb)。
LHHLHHHLLH(3B)建立一个正常的协议,并且m2时刻传输最高有效位(Lsb)。
2)T0格式字符
他由两部分构成Y1(m8m5),K(m4m1)。
Y1(m8~m5)说明后继的TA1、TB1、TC1、TD1是否存在
K(m4~m1)他是传输协议的编码。常用的有T=0(异步半双工字符传输协议)和T=1(异步半双工块传输协议)。
3)接口字符
接口字节采用逐层嵌套的方式来表示的:
第一层TA1、TB1、TC1、TD1是否存在由T0的高4位决定;
第二层TA2、TB2、TC2、TD2是否存在则由TD1的高4位决定;
依此类推,每层的TDi的高4位都决定了下一层的TA(i+1)、TB(i+1)、TC(i+1)、TD(i+1)是否存在。
TD(i):他也由两部分构成Y(i+1)(m8~m5)说明后继的TA(i+1)、TB(i+1)、TC(i+1)、TD(i+1)是否存在。
TA1、TB1、TC1、中的T是对FI、DI、II、PI1、N、PI2、XI和UI等参数进行编码。这些参数是用来计算F、D、N、P、I、X和U的值。
(F,D用来计算ETU,P、I可编程电压和最大可编程电流,N是用于从接口设备到发送字符的卡的额外保护时间。X为时钟停止符,以及CLK上电是优先选用的状态。U为级别指示符:指明卡的操作级别)。
TA(2):专用模式字节,描述了卡操作专用模式的有关特点
TB(2):用八位上的编程电压值PI2编码以代替PI1
TA(i):在TD(i-1)(i>2)中的T=15的第一个出现后编码。XI,位b8b7上时钟停止指示的参考,UI,位b6到b1上级别指示的参考。
在TD(i-1) (i>2)中的T=15后正常忽略TA(i) TB(i) TC(i)所不支持的协议的接口字节特性。
3.分频因子和波特率调整因子(Fi/Di)
- 1etu =(F/D) * (1/f) ,卡上电时默认F = 372, D = 1,所以1etu = 372/3.579Mhz=
103us,也就是每一位是103us,对应波特率为9600。
三、PPS
-
关于此协议参数协商部分,ISO中这样定义
主要包括通讯协议,字符传输速率,以及超时等待时间和数据块的大小等。
如果卡片在ATR里给出的信息表明其可以支持若干种通讯协议,终端该如何和它打交道呢?
相当于卡片用默认的“英语”告诉终端“I can speak English, Chinese, Japanese, French.”
这个时候终端可以进行协议选择(PPS)也可以不选择直接使用默认协议,如果进行协议选择的话,那么PPS就是终端在收到ATR后发出的第一个指令,相当于终端告诉卡片“OK, Let’s speak in Chinese.!”,然后它们“就可以用中文拉呱了”。
如果不进行协议选择的话,终端则使用默认的协议给卡片发送其他的APDU指令,相当于二者使用默认的英语进行后续对话,
其实就目前项目接触而言,绝大多数的卡,不使用PPS也是可以正常交互的,只有少数卡,不使用PPS无法进行后续交互。
四、APDU交互
- APDU交互ISO中定义了T=0和T=1两种协议。