定义NDEF消息

时间:2016-02-12 13:14:44

标签: python raspberry-pi nfc rfid ndef

我正在使用我的Raspberry Pi和RFID-RC522板进行Python项目。作为NFC标签,我使用恩智浦NTAG213。我现在的计划是在标签上存储链接。我可以毫无问题地读/写它们。但我不明白如何为标签上存储的数据定义NDEF标头。

当我使用智能手机在标签上写下链接并使用我的程序阅读时,标签上存储的数据如下所示:

网址“http://www.gmx.at”的NDEF标头是

[3, 11, 209, 1, 7, 85, 1, ... (Data)]

我发现当我写另一个链接时,其中一些参数会发生变化,但有些参数仍保持不变。

我发现这个tutorial描述了NDEF标题的不同字段,但我仍然不知道如何设置它们来存储网站的链接。

如果有人能够描述我需要如何正确计算/定义链接的参数,我将非常高兴。

1 个答案:

答案 0 :(得分:3)

为了理解NDEF格式以及NIFF格式数据如何存储在NFC论坛类型2标签(由NTAG213实施的标签平台)上的方式,我建议您阅读以下NFC论坛规范:

您从标记中读取的数据是NDEF Message TLV对象,其中包含由一条URI记录组成的NDEF消息。

  • NDEF消息TLV:

    0x03             TLV tag = NDEF Message TLV
      0x0B           TLV length = 11 bytes
      0xD1 ... 0x74  TLV value = NDEF message
    

    这意味着标记包含长度为11个字节的NDEF消息。 NDEF消息为0xD1 ... 0x74

  • NDEF消息:

    0xD1             Record header
                       Bit 7 = MB = 1: first record of NDEF message
                       Bit 6 = ME = 1: last record of NDEF message
                       Bit 5 = CF = 0: last or only record of chain
                       Bit 4 = SR = 1: short record length field
                       Bit 3 = IL = 0: no ID/ID length fields
                       Bit 2..0 = TNF = 0x1: Type field represents an NFC Forum
                                             well-known type name
      0x01           Type length = 1 byte
      0x07           Payload length = 7 bytes
      0x55           Type field = "U" (in US-ASCII) = binary form of type name urn:nfc:wkt:U
      0x01 ... 0x74  Payload field = URI record payload
    

    这意味着NDEF消息由URI记录类型定义之后的一个URI记录(类型名称urn:nfc:wkt:U)组成。

  • URI记录有效负载:

    0x01             Identifier byte = URI prefix "http://www."
    0x67 ... 0x74    URI field (UTF-8 encoded) = "gmx.at"
    

    这意味着URI记录指向URI“http://www.gmx.at”。