【问题标题】:Writing NDEF to Mifare S50 with Raspberry Pi使用 Raspberry Pi 将 NDEF 写入 Mifare S50
【发布时间】:2023-03-16 23:18:01
【问题描述】:

我正在尝试将 NDEF 数据写入 NFC 标签(Mifare S50 芯片),以便它可以与我的 iPhone 配合使用,我正在使用 Raspberry Pi 4 和通过 GPIO 连接的 RC522 NFC 模块并使用 SPI。

我尝试了几种方法,最后得到了上面的代码,它似乎没有向标签写入任何内容,而且我的手机确实无法读取它,我想我可能在某个地方搞砸了。

代码如下:

#!/usr/bin/env python

import RPi.GPIO as GPIO
import ndef
from mfrc522 import SimpleMFRC522

reader = SimpleMFRC522()

try:
        message = [ndef.TextRecord("Hello"), ndef.TextRecord("World")]
        print("Approach a tag to the reader")
        reader.write(b''.join(ndef.message_encoder(message)))
        print("Written")
finally:
        GPIO.cleanup()

这是控制台输出:

Traceback (most recent call last):
  File "Write.py", line 12, in <module>
    reader.write(b''.join(ndef.message_encoder(message)))
  File "/usr/local/lib/python3.7/dist-packages/mfrc522/SimpleMFRC522.py", line 62, in write
    id, text_in = self.write_no_block(text)
  File "/usr/local/lib/python3.7/dist-packages/mfrc522/SimpleMFRC522.py", line 78, in write_no_block
    data.extend(bytearray(text.ljust(len(self.BLOCK_ADDRS) * 16).encode('ascii')))
AttributeError: 'bytes' object has no attribute 'encode'

【问题讨论】:

    标签: python raspberry-pi nfc ndef


    【解决方案1】:

    这段代码有两个问题。

    1)您已经创建了 ndef 消息的“字节流”,但 SimpleMFRC522 包需要一个 Unicode 字符串并将其编码以将其转换为“字节流”,所以基本上因为它已经是“字节流”了bytes" 它不能被双重编码。

    2) Mifare S50 芯片是 Mifare Classic 系列芯片,这些是专有格式,不符合 NFC 论坛标准,因此没有标准定义的方式来存储 Ndef 数据(您需要要做的不仅仅是将一组原始字节写入内存到芯片,以便将其识别为 Ndef 格式的数据。

    对于 NFC 标准兼容/兼容的芯片,有多种定义的类型来说明 Ndef 数据在每种类型上的存储方式。

    虽然 NXP 已经定义了一种在 Mifare Classic 芯片上存储 Ndef 数据的专有方法,但“SimpleMFRC522”确实非常简单,并且没有编写标准 Ndef 消息的代码,更不用说非标准的专有方法了。

    我还注意到,虽然 iPhone 硬件可以在底层读取 Mifare Classic 卡,但我不确定它是否也实现了 Ndef 数据格式。我知道有些 Android 手机根本不支持专有的 Mifare Classic 硬件。

    我建议你阅读https://www.nxp.com/docs/en/application-note/AN1305.pdf,因为这是关于如何在这些卡上存储 NDEF 数据的专有格式定义

    不幸的是,RC522 非常老旧,功能有限,因此功能更强大的 Python NFC 模块无法很好地支持。

    https://github.com/ondryaso/pi-rc522 可能会更好,因为它至少允许您写入原始字节。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多