NFC NDEF 消息格式:有效载荷大小(ISO 15693 标头,NfcV)

Osw*_*win 4 rfid payload nfc ndef iso-15693

“喂,哥,怎么了?”

我在 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 ; 电子
    • 0x6E ; n
    • 7 其他无聊的字节

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

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

嗯,嗯...

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

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

Mic*_*and 6

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

我假设标签的内存内容看起来像这样(包括你不理解的字节):

E1 4x yy 00
03 0E <YOUR NDEF MESSAGE> FE
Run Code Online (Sandbox Code Playgroud)

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

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