第一、WUPB命令
WUPB命令共包含3个字节,分别为
1、05;
2、AFI字节;
AFI字节,PBOC规范中,READER的约定为该字节必须为0X00,即支持所有应用
卡片可支持应用类型部位0X00的AFI;
3、参数字节
bit5:
1:表示读写器支持扩展ATQB
0:表示读写器不支持扩展ATQB
但是卡片可以不理会该字节,即在ATQB中可携带该字节也可不携带该字节
bit4:
1:表示是WUPB
0:表示是REQB
bit3-1:
表示slot号,如下图1所示:
图1
当读写器发送的参数中该域为101或者11x时,卡片应翻译为16个slot
bit8-bit6:
应该为000,当该域不为000时,卡片应忽略该域
PBOC规范明确要求:
不支持扩展ATQB,同时slot号应该设置为000,以确保所有卡片都在slot0给予响应。
2、ATQB
ATQB主要关注协议信息域
1、首字节标明了卡支持的通讯速率:
见下图2:
PBOC规范强制规定:卡片的bit7---bit5与bit3---bit1必须为0,即双向都支持106kbps的通讯速率;读写器应能支持双向的106kbps通讯速率,且可支持更高的通讯速率,我想这是为后续协议的提高做好准备吧!
2、第二字节为帧大小和协议类型
bit8-bit5:表示帧大小
其和实际的帧大小的对应关系见下图3:
当参数为9-F是,应默认为8;
究竟双方通讯时帧的大小还具有ATTRIB中的参数:两个参数取小的;
bit3-bit2:表示TR2的值,PICC应将该位设置为0,即选择最小值,而读写器应忽略该域并将FDT作为TR2最小值
bit1:协议类型选择:
0:表示仅支持ISO14443-3协议
1:表示支持ISO14443-4协议
PBOC规范中要求该位必须设置为1
3、第三个字节
第三个字节由FWI:ADC:FO组成。
bit8-bit5:FWI
FWI用来定义FWT,即帧等待时间,这个时间参数用来约定读写器发送完一帧数据的最后一个bit后,卡片必须给予响应的最长等待时间。其计算公式为:FWT=302*pow(2,FWI) us.但是Attrib命令你除外,Atrtib命令的FWT时间为302*pow(2,4)us,约等于4.8ms。FWI最大值为14,如果出现15则解释为14.
bit4-bit3:ADC
ADC为应用数据编码;
bit4默认设置为0
bit3设置为0,表示私有,设置为1表示在本规范JR/T0025.8中定义。
bit2-bit1:FO,该域定义了卡片可选的支持选项,主要是CID和节点地址。其中bit2设置为1表示支持节点地址;bit1设置为1表示支持CID跟随
很奇怪,PBOC规范里强制要求读写器不使用节点地址和CID.这个是和TypeA不同的一个地方。
第三、扩展字节,这个域是可选的。
bit8-bit5:SFGI,这个数值用来定义起始帧保护时间,用来取代TR2,它的值为0-14,如果该值为15则翻译为0,缺省值是0.
bit4-bit1:0000,如果卡片该域返回的数值不等于0000,表示不支持该标准。其实在发送WUPB或者REQB时,卡片可以设置参数字节(第三个字节)的bit5位为0,告诉卡片自己不支持扩展字节,那么卡片也就不会返回该扩展字节了,省的麻烦。
总结一下ATQB干的事情:ATQB告诉读写器,卡片是否支持CID、是否支持NAD、通讯速率、支持的最大帧长度,当然还有FWT或者SFGT等参数。但是读写器不一定支持这些参数,可以推测到ATTRIB命令中读写器肯定会告诉卡片自己对这些参数的支持情况。双方协商一个大家都力所能及的参数。
第四、ATTRIB命令
1、参数1
参数1的定义如下图4:
关于TR0,TR1,TR2参数的含义,我之前单独写过一个文章,这里不再重复了。
2、参数2
参数2定义了最大帧长度,通讯速率。
bit8-bit7:定义了卡到读卡器的通讯速率,见图6
图6
bit6-bit5:定义了读写器到卡的通讯速率,见图7
定义了读写器支持的最大帧长度,具体见图3
3、参数3
bit8-bit5:
读写器应设置该域为0000,设置为其他值时,卡片应该不响应。
bit4-bit1:
读写器应设置bit4为0;
如果bit8-bit4不为00000,那么表示支持ISO14443标准;
卡片应不理会bit4-bit2的值,即仍然采用最小TR2
bit1:设置为1表示支持ISO14443-4协议,否则表示不支持。
4、参数4
bit8-bit5:应设置为0
bit4-bit1:定义了CID,如果在ATQB中,卡片告诉读写器自己不支持CID,那么读写器发送的参数中该域应该为0.
PBOC规范中对CID的要求是,卡片可支持CID且应该能同不带CID的读写器进行通讯。但是要求PCD不使用CID。也就是说,该域必须设置为0000
第五、Attrib命令的响应
这里主要关注第一个字节,该字节有两部分组成
bit8-bit5:MBTI
0:表示卡片不提供自身内部的最大缓冲区
1: 表示卡片提供自身内部的最大缓冲区,其计算公式为
MBL=PICC最大帧大小*pow(2,MBTI-1);
bit4-bit1:CID
如果卡片不支持CID,那么该域为0,如果支持,那么该域的值应该和ATTRIB中参数4中分配的CID相同
在PBOC规范中,卡片返回这个域必须是0,读写器不必理会该域。
通过两次交互,读写器和卡片之间协商了双方通讯必须共同遵守的规则。