【发布时间】:2019-03-08 16:09:49
【问题描述】:
我正在修改我编写的一个 PC 软件,以从 NFC 标签读取多个 NDEF 记录。但是,我拥有的其中一个标签包含一条似乎是损坏的 NDEF 标头的记录。这是 6 条记录中的最后一条记录,其他 5 条按预期出现。我在下面列出了它。为简单起见,所有值都以十六进制列出,并且有效负载已被截断。
记录 #6
Header: 42
Type Length: 03
Random Bytes: 00 00 00
Payload Length: 2C (44)
Rec. Type: 6E 2F 70 (n/p)
Payload: **
如您所见,3 个随机零字节被塞入应该是类型长度和有效负载长度之间。我仔细检查了 TLV 中的长度字段,发现它占了这 3 个字节。由于这些添加的字节,我没有从 TLV 末尾截断任何数据。
我决定使用 NXP 的 TagInfo 应用程序进行完整性检查,以确保我不只是错误地读取数据。从全扫描检查数据转储,我看到数据确实匹配。我在下面列出了内存扫描。仅列出相关数据点,并且有效负载再次被截断。
内存转储
addr data
...
[30] -- -- 42 03 |--B.|
[31] 00 00 00 2C |...,|
[32] 6E 2F 70 ** |n/p*|
[33] ** ** ** ** |****|
...
[3D] ** ** ** FE |***.|
...
我们认为这可能是填充问题,因为在这种情况下,终结者 TLV 出现在页面 0x3D 的末尾。然而,由于以前记录的性质,情况并非总是如此。有时,终结者 TLV 会显示在页面中间。
但是,奇怪的是,在同一个TagInfo应用中,在NDEF页面上,它报告了NDEF消息如下。
NDEF 消息
...
[A8] 52 03 2C 6E 2F 70 ** ** |R.,n/p**|
[B0] ** ** ** ** ** ** ** ** |********|
...
[D8] ** ** |** |
...
不知何故,软件不仅删除了额外的 3 个字节,而且还正确设置了 NDEF 标头中的 SR 位。我已经用 Android 上的另一个 NFC 应用仔细检查了这一点,并确认另一个应用也能够以这种方式读取 NDEF 消息。
我的问题是,应用程序如何不仅能够更正添加的字节,而且能够更正 NDEF 标头,背后是否有原因或逻辑?我不确定这是 Android 在进行更正还是在 NDEF 消息结构中进行更深层次的操作。无论哪种方式,我都在寻找正确的方法来进行更正,同时不影响我如何阅读此标签中保存的其他 5 条记录。
【问题讨论】: