NFC Tag-4协议问题

时间:2014-07-05 14:52:55

标签: nfc apdu ndef smartcard-reader

我正在使用弹簧卡阅读器和标准的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

1 个答案:

答案 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
  • 因此最大Le为0x003B(59字节)。
  • 最大NDEF大小为0x1000(4096字节)。

因此,阅读器可以从NDEF文件中读取多达4096个字节,并允许在一个READ BINARY APDU中读取多达59个字节。因此,阅读器最多可读取59个字节(从偏移量2开始),远低于字节偏移量4096。