gpt4 book ai didi

python - 使用 Adafruit PN532 库写入 RFID 标签内存时字节数组被截断

转载 作者:太空宇宙 更新时间:2023-11-03 14:12:28 24 4
gpt4 key购买 nike

我正在尝试将从十六进制字符串转换的字节数组写入 NTAG203 RFID 标签的内存中。我使用的是 Raspberry Pi 3、PN532 芯片和 Adafruit PN532 python library .

hex_string = '59e7168f267df300018e15b0'
formatted_hex = bytearray.fromhex(hex_string)

byte_data = bytearray(16)
byte_data[3:15] = formatted_hex

if not pn532.mifare_classic_write_block(4, byte_data):
print('Error! Failed to write to the card.')
sys.exit(-1)

当我执行 pn532.mifare_classic_read_block(4) 再次从内存中读取值时,结果如下:

print '0x{0}'.format(binascii.hexlify(<function call result>))
>>> 0x00000059440300fe0000000000000000

该值被截断并具有尾随零和前导零。这里发生了什么?

我希望能够再次将该值转换回十六进制,以便使用它来搜索数据库。

最佳答案

首先,名为 mifare_classic_* 的函数可能不太适合访问 NTAG203 标签,因为 MIFARE Classic 和 NTAG203 使用不同的帧和命令集。

但是,PN532 使用 NTAG203 标签在一定程度上支持的命令集抽象对 MIFARE Classic 标签的访问。更具体地说,

  • READ 命令是相同的(都读取从给定 block 号开始的 16 字节数据)。与 MIFARE Classic 相比,唯一的区别是 NTAG203 上的内存组织。 MIFARE Classic 每 block 有 16 个字节,而 NTAG203 每 block 只有 4 个字节。结果,READ 命令返回 4 个连续的 block 。

  • NTAG203 支持 MIFARE Classic WRITE 命令作为 COMPATIBILITY WRITE c 命令。唯一的区别是 NTAG203 上只能写入 4 个字节(一个 block )。因此,由于您仍然需要在写入命令中提供 16 字节的数据,因此仅写入前 4 个字节。

这正是您所观察到的:pn532.mifare_classic_write_block(4, byte_data) 仅将 byte_data 的前 4 个字节写入 block 4。请注意,前 4 个字节字节为 00 00 00 59,因为您将 formatted_hex 复制到切片 3:15 并将字节 0..2 保留为默认值 0由于 READ 命令读取 16 个字节(4 个 block ,每个 block 4 个字节),因此读取的数据还包含 block 5..7 的一些旧内存内容:440300fe0000000000000000。该值看起来很合理,因为它与 NTAG203 上工厂编程的初始内存内容相匹配。

关于python - 使用 Adafruit PN532 库写入 RFID 标签内存时字节数组被截断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48404824/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com