python - 定义 NDEF 消息

标签 python raspberry-pi nfc rfid ndef

我正在使用 Raspberry Pi 和 RFID-RC522 板开发一个 Python 项目。我使用 NXP NTAG213 作为 NFC 标签。我现在的计划是在标签上存储链接。我可以毫无问题地读取/写入它们。但我不明白如何为标签上存储的数据定义 NDEF header 。

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

URL“http://www.gmx.at”的 NDEF header 为

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

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

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

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

最佳答案

为了了解 NDEF 格式以及 NDEF 格式数据如何存储在 NFC Forum Type 2 标签(这是由 NTAG213 实现的标签平台)上的方式,我建议您阅读以下 NFC Forum 规范:

您从标签中读取的数据是一个 NDEF 消息 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”。

关于python - 定义 NDEF 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35363563/

相关文章:

python - 如何将 'pivot' 数据帧的值放入列中

python - xlsxwriter 可以创建 xls 文件吗?

python - 获取进程的 PID 号,然后用 Python 杀死它

python - 无法使用 PCF8591 读取树莓派中的有效电压输入

安卓 | NFC - NFC Discovery 在 Activity 切换上出现错误,并打开通过我们的 Activity 收集的新标签

android - 使用 Android NFC 检测到 MIFARE Classic 时启动应用程序

python - 如何在 python 中解析非常大的文件?

python - 什么是 Python <> 运算符

python - 如何通过 3G 连接远程更新在 Raspberry Pi 上运行的 Python 程序?

c - 如何将数据写入 Mifare classic 标签