如何使用 rc522 和 Raspberry Pi 读取 7 字节长的 Desfire uid



我使用此库 https://github.com/mxgxw/MFRC522-python 使用 rc522 阅读器和 Raspberry Pi 读取 UID。它适用于具有 4 字节长 uid 的卡,但我无法读取 7 字节长的 Desfire uid。我读到当级联位为 1 时,有必要编辑防冲突算法。如何修改这个库以便能够读取 7 字节长的 uid ?

我刚刚带着同样的问题来到这里。虽然4年多过去了,但也许我的解决方案可以帮助某人。

1) 重命名(或删除)当前的 MFRC522-python 库

cd ~/.local/lib/python2.7  # or your python version
mv pirc522 pirc522_original

2) 创建一个新目录(如果不存在)来安装新库

mkdir /usr/local/lib/python2.7/dist-packages  # or your python version

3) 安装此其他版本的库,其中包含一个功能anticoll2()允许您从 RFID 卡读取更多字节

git clone https://github.com/ondryaso/pi-rc522.git
cd pi-rc522
python setup.py install

仅此而已。您可以像导入前一个库一样导入此新库。

现在,要读取 RFID 卡,请记住 7 字节 RFID 卡以 0x88 开头。因此,您可以使用此库中的新函数anticoll2()anticoll()返回第一个位置的0x88时读取更多数据。下面是一个示例:

from pirc522 import RFID
def detect_uid(reader):
    (error, tag_type) = reader.request()
    (error, uid) = reader.anticoll()
    if uid[0] != 0x88:
        rfid_uid = uid[0:4]  # classic 4bytes-rfid card
    else:
        (error, uid2) = reader.anticoll2()
        rfid_uid = uid[1:4] + uid2[:4]  # 7bytes-rfid card
    return rfid_uid

reader = pirc522.RFID()
print("UID: " + str(detect_uid(reader)))

最新更新