BeagleBone Black读取ADC in_voltageX_raw报Resource temporarily unavailable
解决方案
1. 确认并修正ADC引脚复用状态
你当前开启了Cape Universal功能,首先检查AIN5对应物理引脚P9_36的复用模式:
show-pins | grep P9_36
正常启用ADC功能时输出的复用模式应为Mode 7,如果模式不符,执行命令切换:
config-pin P9_36 ain
切换完成后再次尝试读取ADC数值:
cat /sys/bus/iio/devices/iio:device0/in_voltage5_raw
2. 排查PRU资源冲突
你使用的5.4.38-ti内核版本存在已知的PRU与ADC总线资源抢占问题,可临时禁用PRU overlay测试:
- 编辑
/boot/uEnv.txt文件,找到uboot_overlay_pru=/lib/firmware/AM335X-PRU-RPROC-4-19-TI-00A0.dtbo行,在开头添加#注释该行 - 保存文件后重启开发板,重启后再次尝试读取ADC数值
3. 升级设备树overlay包
你当前安装的bb-cape-overlays版本存在ADC兼容缺陷,执行命令升级:
sudo apt update sudo apt install --only-upgrade bb-cape-overlays
升级完成后重启设备再测试读取。
4. 替代读取方案
如果上述操作均无效,可通过libiio工具绕过sysfs资源锁读取数值:
首先安装工具包:
sudo apt install libiio-utils
执行读取命令:
iio_readdev -n 127.0.0.1 iio:device0 in_voltage5_raw
内容的提问来源于stack exchange,提问作者jgnoss
相关产品推荐
相关产品推荐

