ISO14443 Type A类型卡的防碰撞过程以及命令解析

一、介绍

本博文介绍了PCD(Proximity Coupling Device)使用ISO14443-3 Type A协议检测匹配的PICC(Polling For Proximity Cards)命令以及防碰撞过程(Anticollision Proccess)。

二、命令

2.1 REQAWUQA

2.1.1 命令概要

REQA命令和WUPA命令是PCD用来检测Type A类型卡是否在无线射频场(RF)。区别在于REQA命令是用PCD在刚开始检测PICC是否在RF中,而WUPA是用在PCD让PICC由停止态(HALT State)回到类准备态(READY* State)。

2.1.2 命令格式

REQA命令和WUPA命令只有一个字节(短帧格式),它们的格式如下(b表示bit;B表示Byte):

A、REQA命令:0x26

b8 b7 b6 b5 b4 b3 b2 b1
RFU 0 1 0 0 1 1 0

注:RFU为Reserved for Future ISO/IEC Use的缩写,我喜欢称之为“预留”或者“未使用”。

B、WUPA命令:0x52

b8 b7 b6 b5 b4 b3 b2 b1
RFU 1 0 1 0 0 1 0

2.2 ANTICOLISIONSELECT

2.2.1 命令概要

这两个命令用在防碰撞过程,他们共同包含以下三部分:
(1) 选择代码(SEL),占一个字节。
(2) 有效字节(NVB),占一个字节。
(3) 0~40个Unique Identifier(UID)比特位。
其中,选择代码分成三个层次,根据防碰撞的级别使用(根据参与防碰撞的UID长度使用)。级别一选择代码为0x93,级别二为0x95,级别三为0x97。
有效字节是指PCD传输了的字节数和比特位数。NVB的高四个比特位表示已经传输的比特数除8得到的结果,它包含SEL和NVB字节。所以字节数最小值为2(只有SEL和NVB),最大值为7(含有SEL、NVB和5个字节的UID);NVB的低四个比特位表示已经传输的比特位数模8,它包含SEL和NVB字节,因此它的最小值为0,最大值为7。

2.2.2 命令格式

B1 B2 B3~B7
SEL NVB UID

注:UID传输的长度根据具体的碰撞请情况而定,传输范围在0~40个比特位之间。它会由NVB指出。

2.3 HLTA

2.3.1 命令概要

该命令用于PICC不响应PCD的解调命令,它占两个字节,后面跟着一个CRC_A。第一个字节为0x50,第二个字节为0x00,CRC_A的计算方法参见ISO14443-3文档。

2.3.2 命令格式

1st Byte 2nd Byte 3rdByte 4th Byte
0x50 0x00 CRC_A

2.4 ATQA

2.4.1 命令概要

ATQA命令是PICC对PCD发出的REQA或WUPA命令的响应命令。当PCD发出REQA命令时,多张PICC都有响应时,该命令可以指出防撞的发生情况。

2.4.2 命令格式


注:
A、所有的RFU都默认设置为0.
B、专有编码(Proprietary Coding)根据制造厂商而定,由PICC自己响应。
C、UID类型(UID size bit frame)分成三种。
ISO14443 Type A类型卡的防碰撞过程以及命令解析_第1张图片
其中UID为单尺寸时,表示PICC的UID长度为4个字节;双尺寸表示PICC的UID长度为7个字节;三尺寸表示PICC的UID长度为10个字节。
D、防撞比特位,该区域的值不为0时表示有多张卡响应REQA命令。
ISO14443 Type A类型卡的防碰撞过程以及命令解析_第2张图片

三、PCD检测PICC过程

3.1 描述

PCD检测PICC的UID包含卡检测、防碰撞和具体PICC类型识别三个部分。
——第一部分是卡检测。主要是由PCD发出REQA命令,在RF场中的PICC发出ATQA进行响应的部分。如果有PICC响应ATQA,则表示RF场中含有ISO14443 Type A类型的PICC。若ATQA中的碰撞比特位不为零,表示有多张PICC存在RF中,需要进行多次防碰撞。
——第二部分是防碰撞。防碰撞的过程分成三个级别,第一个级别必须要有,第二和第三级别视具体情况而定(ATQA的碰撞比特位和UID的长度)。如果只有一张PICC,那么只进行第一级别的防碰撞过程;多张相应REQA,才会进行第二第三级别的防碰撞过程。
——第三部分是具体PICC类型识别。该部分主要由PICC发送SAK,由PCD解析SAK从而确定PICC的具体类型。

3.2 流程图

ISO14443 Type A类型卡的防碰撞过程以及命令解析_第3张图片
说明:该流程图包含三个部分:卡检测、防碰撞、卡具体类型识别。

四、防碰撞

4.1 描述

(1)PCD设置SEL编码和选择碰撞级别。(当SEL编码为0x93时,表示碰撞级别一;当SEL编码为0x95时,表示碰撞级别二;当SEL编码为0x97时,表示碰撞级别三)。
(2)PCD设置NVB的初始值为0x20。表示传输的字节(SEL和NVB)数为2*8 / 8 = 2,传输的比特位为 2*8 % 8 = 0;
(3)PCD发送SELECT命令,传输SEL和NVB。
(4)所有在RF中的PICC发送ATQA进行响应REQA。
(5)假定所有的PICC都有自己独特的UID序列。如果只有一张PICC进行响应,那么ATQA中的碰撞比特位为0;否则进行第(6)步到第(10)步。
(6)PCD根据ATQA识别PICC的UID中碰撞的位置。
(7)根据传输的字节数和比特位数重新设置NVB的值,PCD需要设置碰撞响应规则是以比特位1进行,还是以比特位0进行。
(8)PCD发送SELECT命令,传输重新设置好的SEL和NVB。
(9)只有PICC的UID等于PCD发送SELECT命令的UID时,表示防碰撞过程成功。
(10)如果还没选出PICC中的UID,即还有多张卡响应,那么重复第(6)步到第9步,进行更高级别的碰撞。
(11)如果更高级别的碰撞发生了,PCD应将NVB设置成0x70,表示传输了7字节。7 = 1 + 1 + 5(1个字节SEL,1个字节NVB和5个字节【可能是1个字节的CT(0x88)加上3个字节的UID,再加上一个字节的BCC(前面四个传输字节异或结果);也可能是四个字节的UID加上一个字节的BCC(前面四个字节UID异或的结果)】)。
(12)PCD发送SELECT命令,传输1个字节SEL,1个字节NVB和5个字节UID。
(13)PICC响应SAK,PCD匹配5个字节的UID。
(14)如果UID是完整的,PICC传输的SAK清除碰撞级别比特位和从准备态(READY State)切换到激活态(ACTIVE State)或者从类准备态(READY* State)切换到类激活态(ACTIVE* State)。
(15)PCD会检查SAK去决定是否进行更高层次的防碰撞过程,如果需要则会提升碰撞级别。

注:
A、如果PCD一开始就知道PICC的UID是完整的,那么PCD会跳过步骤(2)到(10),也就是没有防碰撞过程。
B、如果含有更高级别的防碰撞过程,那么也就表示PICC的UID长度不止4个字节。因为4个字节的UID只能进行级别一的防碰撞过程;7个字节的UID最多能进行级别二的防碰撞过程;10字节的UID最多能进行级别三的防碰撞过程。
C、同一碰撞级别里可能发生多次碰撞。

4.2 流程图

ISO14443 Type A类型卡的防碰撞过程以及命令解析_第4张图片

五、碰撞级别

ISO14443 Type A类型卡的防碰撞过程以及命令解析_第5张图片

六、防碰撞过程示例


注:
A、PICC #1是单尺寸UID,uid0的值是0x10;PICC #2是双尺寸UID。
B、该实例的碰撞响应规则是按比特位1响应。

你可能感兴趣的:(NFC,RFID,ISO14443,Type-A)