Как прочитать uid Desfire длиной 7 байт, используя rc522 и Raspberry Pi?

Я использую эту библиотеку https://github.com/mxgxw/MFRC522-python для чтения UID с помощью Читатель rc522 и Raspberry Pi. Он отлично работает для карт с 4-байтовым идентификатором, но я не могу прочитать 7-байтовый идентификатор Desfire. Я читал, что необходимо отредактировать алгоритм предотвращения коллизий, когда каскадный бит равен 1. Как изменить эту библиотеку, чтобы она могла читать 7-байтовый uid?


person user3194279    schedule 28.12.2014    source источник


Ответы (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)))
person Sergio Ferrer Sánchez    schedule 15.11.2019