Запись / чтение из / в SPI на GPIO Сбой прерывания с OSError: [Errno 9] Неверный дескриптор файла - PullRequest
0 голосов
/ 04 ноября 2019

Я использую NFC Reader с контактом прерывания на Raspberry Pi, и я написал скрипт для его запуска. Пока что это работает довольно хорошо, но в некоторых случаях SPI xfer падает с OSError: [Errno 9] Bad file descriptor

Вся часть SPI происходит, когда я получаю прерывание GPIO Pin - это может быть проблемой? Я знаю, что код не должен делать слишком много для прерывания, и это может привести к этому сбою.

Это слишком много кода, чтобы поделиться здесь, но я использую чип PN532 с библиотекой Adafruit https://github.com/adafruit/Adafruit_Python_PN532 - я знаю, что это устарело, но разница в реализации C очень мала. Я использую pn532.read_passive_target(timeout=0.2), чтобы прочитать UID с этого чипа NFC и заставить его сканировать карты NFC.

Это работает довольно хорошо, пока я не сделаю это слишком часто. Для тестирования я снова и снова прижимаю карту к ридеру без каких-либо задержек. Примерно через 5-10 раз он падает.

Есть идеи, как это исправить? Извините за плохое описание ошибки.

1 Ответ

0 голосов
/ 05 ноября 2019

Я изменил код, чтобы не выполнять работу SPI в процессе прерывания. Прерывание теперь обрабатывает только состояния и ничего больше, основной поток затем проверяет состояние и обрабатывает его. После этого я не смог воспроизвести ошибку снова.

Примечание. Не используйте SPI для обратного вызова процесса прерывания и не используйте конечный автомат или расписание Python.

...