4

“喂,哥,怎么了?”

我在使用 NDEF 消息格式时遇到问题。

我通过 NFC 论坛了解如何使用带有有效负载的单个 NDEF 记录(文本 RTD)构建 NDEF 消息,因此我可以通过 I2c 对我的标签(M24LR16E)进行编程。

除此之外,我使用外部编写器对我的标签进行了编程,以获得格式良好的记录示例。

然后我通过 I2C 用完全相同的值对我的标签进行了编程,一切都运行良好。更改有效负载字符给了我成功的证明 =)

“但你来这里不是为了向我们证明一切都很好,不是吗?”

你是对的,知道我正在尝试更改有效载荷长度,但我遇到了麻烦。一旦我更改了 NDEF 记录的 PAYLOAD_LENGTH,它就不再被识别为一个。我将 PAYLOAD_LENGTH 从 10 更改为 5,所以这不是溢出配置字段的问题。

“好故事,给我看一些代码/配置”

这是我的记录配置:

  • “标头”(MB ME CF SR IL TNF):0xD1
  • PAYLOAD_LENGTH:0x0A
  • 类型长度:0x01
  • 类型:0x54
  • 有效载荷:
    • 0x02 ; UTF-8,2 字节语言代码
    • 0x65 ; e
    • 0x6E ; n
    • 7 其他无聊的字节

另外,我注意到如果我覆盖 NDEF 消息之前的 6 个字节,则不再识别 NDEF 消息。我不知道这个数据可能是什么,因为 NFC 规范没有提到这个,标签数据表也没有。

“你应该问一个问题……”

嗯,嗯...

  • 除了我应该更改的 NDEF 记录的 PAYLOAD_LENGTH 字段之外,还有什么其他的吗?
  • 我的 NDEF 消息之前的那些基本数据是什么?

我的读者:带有 NXP 的“TagInfo”应用程序的 Nexus 4

4

1 回答 1

7

不幸的是,您在 NFC 论坛网站上找不到太多关于如何使用该标签来存储 NDEF 消息的信息。原因是目前没有针对 ISO 15693 标签的标签类型规范(尽管标准化正在进行中)。

我假设标签的内存内容如下所示(包括您不理解的字节):

E1 4x yy 00
03 0E <YOUR NDEF MESSAGE> FE

如果是这种情况,前 4 个字节是能力容器(由魔法字节0xE1和版本 nibble表示0x4)。x 应该0x0指示(应用程序级别!)读写访问。yy 应该是可用数据内存(不包括能力容器)的总大小除以 8。到目前为止,您应该能够保留这些值...

但是还有嵌入您的 NDEF 消息的 NDEF 消息 TLV 结构:0x03是指示 NDEF 消息的标记。0x0E是长度字段。因此,除了记录的有效负载长度之外,这就是您需要更改的内容。Android 对长度字段非常挑剔。如果这与您的 NDEF 消息的确切长度不匹配,大多数 Android 版本将忽略该消息。最后一个字节0xFE是(可选的)终结符 TLV。这应该紧跟标签上的最后一个数据字节,告诉 NDEF 标签解析器停止解析。

于 2014-01-18T18:14:20.877 回答