图表 7-7:HALT命令帧
如果PICC在HALT帧结束后1ms周期期间以任何调制表示响应,则该响应应解释为?不确认‘。
7.2.4 选择序列
选择序列的目的是获得来自PICC的UID以及选择该PICC以便进一步通信。 7.2.4.1 选择序列流程表
图表 7-8:PCD的初始化和防冲突流程图
7.2.4.2 ATQA-请求应答
在PCD发送请求命令(REQA)之后,所有PICC以其在两个数据字节中编码了可用防
21
冲突类型的请求应答(ATQA)表示同步地进行响应,。
如果有多个卡应答,冲突可能出现。PCD应把ATQA内的冲突解码为一个(1)b,其结果是所有ATQA的逻辑―或‖。
有关例子在附 录 F中给出。 7.2.4.2.1 ATQA的编码
表格 7-3:ATQA的编码
MSB LSB b16 b15 b14 b13 b12 b11 b10 b9 b8 b7 b6 b5 b4 b3 b2 b1 RFU UID长度RFU 比特帧防冲突 比特帧 7.2.4.2.2 比特帧防冲突的编码规则 规则1:位b7和b8编码了UID长度(单个、两个或三个)
规则2:b1、b2、b3、b4或b5中的一个应置为(1)b以指出比特帧防冲突。
表格 7-4:比特帧防冲突用的b7和b8的编码 b8 0 0 1 1 b7 0 1 0 1 含义 UID长度:单个 UID长度:两个 UID长度:三个 RFU 表格 7-5:比特帧防冲突用的b1-b5的编码
b5 b4 b3 b2 b1 含义 1 0 0 0 0 比特帧防冲突 0 1 0 0 0 比特帧防冲突 0 0 1 0 0 比特帧防冲突 0 0 0 1 0 比特帧防冲突 0 0 0 0 1 比特帧防冲突 所有其它 RFU 7.2.4.3 防冲突和选择 7.2.4.3.1 每个串联级别范围内的防冲突环
下面算法应适用于防冲突环:
步骤1:PCD为选择的防冲突类型和串联级别分配了带有编码的SEL。 步骤2:PCD分配了带有值为‘20’的NVB。
注:该值定义了该PCD将不发送UID CLn的任何部分。因此该命令迫使工作场内的所有PICC以其完整的UID CLn表示响应。
步骤3:PCD发送SEL和NVB。
步骤4:工作场内的所有PICC应使用它们的完整的UID CLn响应。
步骤5:假设场内的PICC拥有唯一序列号,那么,如果一个以上的PICC响应,则冲突发生。如果没有冲突发生,则步骤6到步骤10可被跳过。 步骤6:PCD应识别出第一个冲突的位置。
步骤7:PCD分配了带有值的NVB,该值规定了UID CLn有效比特数。这些有效位应是PCD所决定的冲突发生之前被接收到的UID CLn的一部分再加上(0)b或(1)b。典型的实现是增加(1)b。
步骤8:PCD发送SEL和NVB,后随有效位本身。 步骤9:只有PICC的UID CLn中的一部分等于PCD所发送的有效位时,PICC才应发送其UID CLn的其余部分。
步骤10:如果出现进一步的冲突,则重复步骤6~9。最大的环数目是32。
22
步骤11:如果不出现进一步的冲突,则PCD分配带有值为‘70’的NVB。
注:该值定义了PCD将发送完整的UID CLn。
步骤12:PCD发送SEL和NVB,后随UID CLn的所有40个位,后面又紧跟CRC_A校验和。 步骤13:它的UID CLn与40个比特匹配,则该PICC以其SAK表示响应。
步骤14:如果UID完整,则PICC应发送带有清空的串联级别位的SAK,并从READY状态转换到ACTIVE状态。 步骤15:PCD应检验SAK的串联比特是否被设置,以决定带有递增串联级别的进一步防冲突环是否应继续进行。
如果PICC的UID是已知的,则PCD可以跳过步骤2~10来选择该PICC,而无需执行防冲突环。
图表 7-9:PCD防冲突环流程图
注:循环编号对应算法步骤。
23
7.2.4.3.2 SEL的编码(选择代码)
长度:1字节
可能值:?93‘,?95‘,?97‘
表格 7-6:SEL的编码
b8 b7 b6 b5 b4 b3 b2 b1 含义 1 0 0 1 0 0 1 1 ‘93’:选择串联级别1 1 0 0 1 0 1 0 1 ’95’:选择串联级别2 1 0 0 1 0 1 1 1 ’97’:选择串联级别3 1 0 0 1 所有其他 RFU 7.2.4.3.3 NVB的编码(有效比特的数) 长度:1字节
较高4位称为字节计数,规定所有被8分开的有效数据位的数,包括被PCD发送的NVB和SEL。这样,字节计数的最小值是2而最大值是7。
较低4位称为比特计数,规定由PCD发送的模8所有有效数据位的数。
表格 7-7:NVB的编码
b8 0 0 0 0 0 0 - - - - - - - - b7 0 0 1 1 1 1 - - - - - - - - b6 1 1 0 0 1 1 - - - - - - - - b5 0 1 0 1 0 1 - - - - - - - - b4 - - - - - - 0 0 0 0 0 0 0 0 b3 - - - - - - 0 0 0 0 1 1 1 1 b2 - - - - - - 0 0 1 1 0 0 1 1 b1 - - - - - - 0 1 0 1 0 1 0 1 含义 字节计数=2 字节计数=3 字节计数=4 字节计数=5 字节计数=6 字节计数=7 比特计数=0 比特计数=1 比特计数=2 比特计数=3 比特计数=4 比特计数=5 比特计数=6 比特计数=7
7.2.4.3.4 SAK的编码(选择确认)
当NVB规定40个有效位并且当所有这些数据位与UID CLn相配时,SAK由PICC来发送。
SAK通过标准帧来发送,后随CRC_A。 SAK CRC_A 1字节 2字节 图表 7-10:选择确认(SAK)
PCD应校验位b3以判定UID是否完整。位b3和b6的编码在表7-8中给出。
表格 7-8:SAK的编码
b8 b7 3 3 3 3 3 3 b6 3 1 0 b5 3 3 3 b4 3 3 3 b3 1 0 0 b2 3 3 3 b1 3 3 3 含义 串联比特设置:UID不完整 UID完整,PICC遵循ISO/IEC 14443-4 UID完整,PICC不遵循ISO/IEC 24
14443-4 如果UID不完整,PICC应保持READY状态并且PCD应以递增的串联级别来初始化新的防冲突环。
如果UID完整,PICC应发送带有清空的串联比特的SAK并从READY状态转换到ACTIVE状态。当提供了附加信息时,PICC应设置SAK的第6位b6。
附加信息的定义不是本标准本部分的课题,将在第8节中定义。 7.2.4.4 UID内容和串联级别
UID由4、7或10个UID字节组成。因此,PICC最多应处理3个串联级别,以得到所有UID字节。在每个串联级别内,由5个数据字节组成的UID的一部分应被发送到PCD。根据最大串联级别,定义了UID长度的三个类型。该UID长度必须与下表一致。
表格 7-9:UID长度
最大串联级别 UID长度 字节数 1 单个 4 2 两个 7 3 三个 10 对于UID内容,使用下列定义: UID CLn: 根据串联级别n,UID的一部分,由5个字节组成,3≥n≥1
UIDn: UID的字节#n,n≥0
BCC: UID CLn校验字节,4个先前字节的―异或‖值 CT: 串联标记,?88‘
UID是一固定的唯一数或由PICC动态生成的随机数。UID的第一个字节(uid0)分配后随UID字节的内容。
表格 7-10:单个长度的UID
uid0 描述 ?08‘ uid1到 uid3是动态生成的随机数 ?x0‘-?x7‘ 专有的固定数 ?x9‘-?xE‘ ?18‘-?F8‘ RFU ?xF‘ 串联标记CT的值?88‘应不用于单个长度UID中的uid0。 表格 7-11:两个和三个长度的UID
uid0 描述 制造商ID 每一制造商对唯一编号的其他字节的值的唯一性负责 根据ISO/IEC 7816-6/AM1 在ISO/IEC 7816-6/AM1中为―私用‖标出的值?81‘到?FE‘在本上下文中应不予允许。 25