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

4

"嘿,兄弟,最近怎么样?"

我遇到了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;e
    • 0x6E;n
    • 7个其他无聊的字节

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

"你该问一个问题..."

嗯,好吧...

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

我的读卡器:Nexus 4,配有NXP的“TagInfo”应用程序

1个回答

8

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

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

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

如果是这种情况,前4个字节是能力容器(由魔术字节0xE1和版本半字节0x4表示)。x应该为0x0,表示(应用级别!)读写访问权限。yy应该是可用数据内存的总大小(不包括能力容器),除以8。到目前为止,您应该能够保持这些值......但是,还有NDEF消息TLV结构,其中嵌入了您的NDEF消息:0x03是指示NDEF消息的标记。0x0E是长度字段。因此,这是您需要更改的内容,除了记录的有效负载长度之外。当涉及到该长度字段时,Android非常挑剔。如果它与您的NDEF消息的确切长度不匹配,大多数Android版本将忽略该消息。最后一个字节0xFE是(可选的)终止符TLV。它应该紧随您的标签上的最后一个数据字节,告诉NDEF标签解析器停止解析。

就是这样!非常感谢您的澄清,这比我预期的要多。我读到的不是0x00(第四个字节),而是0x05,所以我将其保留在第二个值,但是我不知道它的含义xD。您在哪里找到这些信息的? - Oswin
多家ISO 15693标签制造商提供了他们专有的NDEF标签定义(例如,NXP为其ICODE标签提供NXP Type ICODE Tag Operation)。该规范在数据格式方面似乎与NFC论坛目前正在标准化的内容非常接近,但请记住,在NFC论坛Type V标签操作规范发布时可能会发生一些变化... - Michael Roland

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接