Writing/Reading from/to SPI on GPIO Interrupt failed with OSError: [Errno 9] Bad file descriptor

Writing/Reading from/to SPI on GPIO Interrupt failed with OSError: [Errno 9] Bad file descriptor

我是 运行 一个 NFC Reader,在我的 Raspberry Pi 上有一个中断引脚,我写了一个脚本来实现它 运行。到目前为止,它工作得很好,但在某些情况下,SPI xfer 崩溃并出现 OSError: [Errno 9] Bad file descriptor

当我收到 GPIO 引脚的中断时,整个 SPI 部分都会发生 - 这可能是个问题吗?我知道代码不应该在中断上做太多,这可能会导致崩溃。

这里分享的代码有点多,但我将 PN532 芯片与 Adafruit 库一起使用 https://github.com/adafruit/Adafruit_Python_PN532 - 我知道它已被弃用,但 与 C 实现的区别非常小。我 运行 pn532.read_passive_target(timeout=0.2) 从那个 NFC 芯片读取 UID 并让它扫描 NFC 卡。

它工作得很好,直到我经常这样做。为了测试,我一遍又一遍地拿着卡片对着 Reader,没有任何延迟。大约 5-10 次后,它崩溃了。

有什么解决办法吗?很抱歉错误描述不当。

我重构了代码,在中断过程中不做任何 SPI 工作。中断现在只处理状态,没有别的,主线程然后检查状态并处理它。这样我就无法再次重现错误。

注意:不要在中断过程回调上使用 SPI,并使用状态机或 python 调度。