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

时间:2014-12-28 22:39:22

标签: python raspberry-pi rfid mifare

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

1 个答案:

答案 0 :(得分:1)

我刚来这里遇到同样的问题。尽管已经过去了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)))