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

时间:2014-01-18 15:09:29

标签: nfc rfid ndef payload iso-15693

“嘿兄弟,怎么了?”

我遇到NDEF邮件格式化问题。

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

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

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

“但你没有来这里告诉我们一切运作良好,不是吗?”

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

“很棒的故事,给我看一些代码/配置”

这是我的记录配置:

  • “Header”(MB ME CF SR IL TNF):0xD1
  • PAYLOAD_LENGTH:0x0A
  • TYPE LENGTH:0x01
  • TYPE:0x54
  • PAYLOAD:
    • 0x02; UTF-8,2字节语言代码
    • 0x65; ë
    • 0x6E; Ñ
    • 7其他无聊的字节

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

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

呃,好吧......

  • 我应该更改NDEF记录的PAYLOAD_LENGTH字段以外的其他内容吗?
  • 在我的NDEF消息之前,这些基本数据是什么?

我的读者:Nexus 4与恩智浦的“TagInfo”应用程序

1 个答案:

答案 0 :(得分:2)

很遗憾,您无法找到有关如何使用该标记在NFC论坛网站上存储NDEF消息的更多信息。原因是ISO 15693标签目前没有标签类型规定(虽然正在进行标准化)。

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

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

如果是这种情况,前4个字节是功能容器(由魔术字节0xE1和版本半字节0x4表示)。 x shoud be 0x0表示(应用程序级别!)read&amp;写入权限。 yy应该是可用数据存储器的总体大小(不包括容量容器)除以8.到目前为止,您应该能够保留这些值......

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