我正在使用弹簧卡阅读器和标准的Type 4无源标签。 我已经记录了通信协议,我不太明白发生了什么。
完整序列位于邮件的底部。
为什么在收到CC + OK后,阅读器会重新启动,并显示初始消息
00 A4 04 00 07 D2 76 00 00 85 01 01 00
并且还会从标记中获取错误。
我正在尝试理解该协议,因为我需要使用微控制器和NFC前端(AS3953)实现无源Type 4标签的仿真
完整的通讯记录:
NFC Tag Tool v.2.10.5227.20069
Reader: EMPTY
Disconnect, disposition=1
Reader: MUTE
Reader: EMPTY
Reader: PRESENT
Connect to 'SpringCard NFC'Roll NFC 0', share=2, protocol=3
Connected to the card
Is the card a NFC Forum Tag ???
Reader: INUSE
< 00 A4 04 00 07 D2 76 00 00 85 01 01 00
Transmit << 00A4040007D276000085010100
Transmit >> 9000
> 90 00
< 00 A4 00 0C 02 E1 03
Transmit << 00A4000C02E103
Transmit >> 9000
> 90 00
< 00 B0 00 00 0F
Transmit << 00B000000F
Transmit >> 000F20003B00340406E104100000009000
> 00 0F 20 00 3B 00 34 04 06 E1 04 10 00 00 00 90 00
This card is a NFC type 4 Tag
< 00 A4 04 00 07 D2 76 00 00 85 01 01 00
Transmit << 00A4040007D276000085010100
Transmit >> 6A82
> 6A 82
SelectNfcApplication failed Check error : file not found (Check error : file not found)
< 00 A4 00 00 02 3F 00
Transmit << 00A40000023F00
Transmit >> 9000
> 90 00
< 00 A4 04 00 07 D2 76 00 00 85 01 01 00
Transmit << 00A4040007D276000085010100
Transmit >> 9000
> 90 00
< 00 A4 00 0C 02 E1 03
Transmit << 00A4000C02E103
Transmit >> 9000
> 90 00
< 00 B0 00 00 0F
Transmit << 00B000000F
Transmit >> 000F20003B00340406E104100000009000
> 00 0F 20 00 3B 00 34 04 06 E1 04 10 00 00 00 90 00
< 00 A4 00 0C 02 E1 04
Transmit << 00A4000C02E104
Transmit >> 9000
> 90 00
< 00 B0 00 00 02
Transmit << 00B0000002
Transmit >> 000A9000
> 00 0A 90 00
< 00 B0 00 02 3B
Transmit << 00B000023B
Transmit >> D101065402656E6F6B0A000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000009000
> D1 01 06 54 02 65 6E 6F 6B 0A 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 90 00
Found a Text
Done!
1 NDEF record(s) found in the tag
Read terminated
答案 0 :(得分:2)
为什么读者在收到容量容器后重新开始选择NFC论坛类型4标签应用程序+ OK?
没有什么要求读者应用程序执行此操作(但也没有禁止此行为)。因此,读者这样做是因为读者应用程序是以这种方式实现的。
例如,可能是应用程序分为几层。第一层仅检查是否存在NFC论坛类型4标签应用程序(通过选择应用程序并尝试查找功能容器),然后第二层尝试访问和读取NFC论坛类型4标签应用程序中的数据,而不管是否该申请之前已被选中。为什么标签在收到NFC论坛类型4标签应用程序的后续SELECT命令后会返回错误(6A82)?
这是一个很好的问题,并且表明标签应用程序实现不当,并且在选择它时无法识别SELECT命令。
似乎只有在选择了主文件之后(并且因此已经隐式取消选择了NFC论坛类型4标签应用程序),才识别出用于NFC论坛类型4标签应用程序的新SELECT命令。同样,这不是NFC论坛类型4标签操作规范的强制要求。第一个SELECT命令可以(并且在我看来:应该 )也可以。
为什么读者在通信序列结束时请求0x3B(59)字节,而先前读取的NDEF消息大小仅指示0x0A(10)字节?
读者似乎没有通过只读取NDEF文件的相关字节来优化通信。根据Type 4 Tag Operation规范,这是合法的场景。功能容器包含允许读者执行此操作的参数:
000F20003B00340406E10410000000
。0x003B
(59字节)。0x1000
(4096字节)。因此,阅读器可以从NDEF文件中读取多达4096个字节,并允许在一个READ BINARY APDU中读取多达59个字节。因此,阅读器最多可读取59个字节(从偏移量2开始),远低于字节偏移量4096。