我将包含 3 个 NDEF 记录(URL、自定义、自定义)的自定义内容写入 NFC 标签。这样的标签 Android 和 iOS 都可以读取,没有问题。
现在我增加了 URL 的大小,因此自然只有 URL NDEF 记录发生更改,并且 NDEF 不再被 iOS 读取 - 接收空的 NDEF 记录列表。
这看起来很奇怪 - 如果我将 URL 填充为几个字符,它就会变得可读(但这对我来说不是解决方案,因为 NDEF 内容有限)。
尝试使用不同的 iPhone(iOS 15、iOS 16)。 ISO 15693 标签。
手动验证的 NDEF 记录 - 所有字段看起来都良好且一致。有一个在线 NDEF 检查器,它也没有出现任何问题。
我完全迷失了。有什么想法吗?
NFC Forum Type 5 规范 (NFCForum-TS-T5T),第 4.3 节说:
T5T_Area(即包含NDEF消息的内存)以 CC 字段最后一个字节之后的第一个字节。尺寸为 T5T_Area 由 CC 字段的内容定义。
因此 MLEN 不包括能力容器本身占用的内存,而是包括标签中可用的所有其他内存,无论 NDEF 消息的大小如何。
能力容器之后的内容通常是长度字节,正如 @Andrew 指出的那样。然而,更完整的故事是,有一个 NDEF TLV(如 NFCForum-TS-T5T 第 4.4 节规定)。NDEF TLV 的标签是 0x03,后面是单个长度字节(长度 <= 254) or 3 bytes indicating a longer (>=255)根据规格:
长度字段(L-field)以字节为单位编码V-field的大小。 ...如果存在 L 字段,它可能包含一个或三个字节: 一个 如果要编码的长度在 00h 和 FEh 之间,则为字节。值 FFh 为 第一个字节编码三字节格式。如果长度为三个字节 编码在 00FFh 和 FFFEh 之间。三字节值 FFFFFFFh 是 RFU。
因此,能力容器后面必须是 0x03,后面是 NDEF 的长度,最后是 NDEF 消息本身。假设总共 3 条记录是 < 255 bytes, following the capability container should be:
03 | {单字节长度} |记录 1 |记录2 |记录3
这需要很多努力。希望相关的Apple工程师(工程师)能找到这个问题并向自己提问。
所以问题通常出在 ISO 15693 标签上。这些还包括所谓的能力容器 - 用户地址 0x0 处的 4 字节字段。该标头包括以 8 字节块表示的“内容大小”。所以实际大小除以 8。在我的例子中,它是 0x12,这意味着 0x24 块 - 并且 - 我的内容正是这个大小。因此从技术上讲,没有观察到违反规范的情况。然而标签不可读(具体来说,NDEF 消息无法识别)。
我已将内容大小增加到 1 个单位(+8 字节),一切都开始工作。