树莓派5使用Spidev与DACx3202通信时反复出现Errno 22无效参数错误
树莓派5使用Spidev与DACx3202通信时反复出现Errno 22无效参数错误
我最近在用Spidev连接外设的时候,突然开始遇到这个错误:
OSError: [Errno 22] Invalid argument
一开始重启设备之后错误就消失了,但多运行几次程序又会出现,现在哪怕重启也不管用了。而且不管用xfer2、write_bytes还是其他相关方法,都会触发这个错误。
补充说明:后来发现这个问题和bits_per_word设置有关,把这个值调低之后,问题好像就解决了
以下是我的测试代码:
import spidev if __name__ == "__main__": spi: spidev.SpiDev = spidev.SpiDev() spi.close() # 尝试清理之前运行可能留下的未关闭/占用的设备资源 spi.open(1, 2) spi.max_speed_hz = 500_000_000 spi.mode = 0b01 # 时钟常态为低电平,在下降沿采样数据 spi.bits_per_word = 24 spi.lsbfirst = False print(spi.xfer([38,1])) spi.close() print("success")
运行后得到的报错信息:
Traceback (most recent call last): File "/path/to/file/file.py", line 89, in <module> print(spi.xfer([38,1])) ^^^^^^^^^^^^^^^^ OSError: [Errno 22] Invalid argument
设备与环境详情
- 硬件:树莓派5,通过SPI1.2连接DACx3202芯片,已在config.txt中启用
spi1-3csoverlay,之前一直能正常工作 - Python版本:3.11.2
- 系统:Debian GNU/Linux 12 (bookworm)
我找了一些2015年的相关旧问题,但没发现近期的案例,也搞不懂为什么一开始重启能解决,后来就彻底不行了。
备注:内容来源于stack exchange,提问作者lunuchrat
相关产品推荐
相关产品推荐

