前言
之前《【NFC专栏】ISO14443A协议》和《【NFC专栏】ISO14443B协议》两篇中我们都有提到ISO14443-4协议,所以ISO14443-4协议是适用于二者的。但并不是所有A卡或B卡都支持ISO14443-4协议。
ISO14443-4简介
ISO14443-4定义了半双工块传输协议,该协议适用于Type-A和Type-B两种卡。该协议还定义了激活与去激活的流程。
名词解析
ATS: Answer To Select, 选择应答
PPS: Protocol and Parameter Selection,协议和参数选择 RATS: Request for answer to select, 选择应答请求 FSD: Frame Size for proximity coupling Device, PCD的接收帧大小 FWI: Frame Waiting time Integer, 帧等待时间值
SFGI: Start-up Frame Guard time Integer, 启动帧保护时间值
NAD: Node Address,节点地址
PCB: Protocol Control Byte, 协议控制字节
命令介绍
RATS
该命令用于获取PICC的更详细的信息,格式定义如下:
总共4个字节,我们主要关注Parameter字段,它由两部分组成。
(1) FSDI: FSD编码值,即PCD能接收的最大帧大小。定义如下:
(2)CID:用于PICC的寻址,值为0~14。ISO14443B协议中有提到过。
ATS
该命令用于应答RATS。格式定义如下:
(1) TL: TL到Tk的字节数(包含TL本身)。
(2) T0: 定义了后面的字段是否存在,以及PICC能接收的帧大小。
b5~b7每个位表示TA~TC字段是否出现,为1则表示出现。
b1~b4为FSCI,表示PICC能接收的帧的大小,定义和上面的FSDI一样。
(3) TA: 跟速率有关的信息。
bit8定义了不同方向使用不同bit速率处理数据的能力,当该位设置成1时,PICC不支持不同方向的速率不一致。
b5~b7定义了PICC到PCD的速率(DS)。
b1~b3定义PCD到PICC的速率(DR)。
(4) TB: 帧等待时间以及启动帧保护时间。
FWI:帧等待时间(即两个帧之间的等待时间),计算公式如下:
SFGI:启动帧保护时间(PICC发送ATS之后PCD多久才能继续发), 计算公式如下:
(5) TC: 是否支持CID和NAD。
(6) T1~Tk:可选字段,在ISO7816-4中定义。
PPS
该命令用于协议和参数的选择。格式定义如下:
(1) PPSS: 起始字节,定义如下:
高4位固定为1101,CID就是上面介绍的,没有则为0000。
(2)PPS0: 用于指示PPS1是否出现。
b5为1则表示PPS1字段有出现。
(3)PPS1: 选择的速率。
DSI: PICC到PCD的速率
DRI: PCD到PICC的速率
具体定义如下:
1对应的就是106kbit/s, 2对应212kbit/s, 以此类推。
PPS应答
PPS的应答格式如下:
PPSS: 起始字节, 在PPS命令中解释了。
Type A激活协议
(1) 前面几步就是我们在ISO14443A协议中讲过的,主要是看是否支持ISO14443-4,判断是否支持在《【NFC专栏】ISO14443A协议》中有提到。接下来我们主要看支持ISO14443-4的流程。
(2) PCD发送RATS命令,PICC则应答ATS。
(3) 如果卡支持PPS命令,PCD可以PPS命令来修改参数。
(4) 进行半双工协议传输,如果想结束传输,PCD可以发送DESELECT命令。
Type B激活协议 ISO14443B的激活流程在《【NFC专栏】ISO14443B协议》中已经讲过了,在ISO14443-4中没有新增的内容。
半双工块传输协议
进行半双工传输的块格式(帧格式)有两种: 标准块格式和增强型块格式。定义如下:
标准块格式
增强型块格式
两者的区别就在于是否有Length字段,这个字段是用于纠错的。
(1)Length
表示总长度,包含Length,Prologue, Information三个字段。
(2)Prologue
可以包含PCB, CID, NAD,PCB是强制的,CID和NAD是可选的。
PCB:控制传输的信息,它定义了三种不同的block。
I-Block
R-Block
S-Block
I-Block用于传输应用层信息,R-Block用于传输ACK或NACK,S-Block用于交换控制信息。
CID定义如下:
NAD:定义在ISO7816-3。
(3)Information
传输过程中的数据,比如应用数据或状态码等。
(4)Epilogue
EDC: 就是CRC校验值
Chaining传输
Chaining传输可以理解为分段传输,当单个数据包超过帧的最大大小的时候,就要拆分成几个进行传输。比如下面的示意图:
上半部分是发送端,下半部分是接收端。
(1)发送端将完整的数据包拆分成3个I-Block。
(2)接收端收到后判断出是Chaining,则发送R-Block进行应答。到最后一个包正常应答I-Block。
总结
到此,我们就将ISO14443相关的协议基本都讲完了,当然这是标准的协议,基于该标准的一些卡还有很多特殊的命令和特性,比如Mifare,所以在开发过程中,还要查看卡的datasheet。
全部0条评论
快来发表一下你的评论吧 !