You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

树莓派I2C读取BMP388时报Errno 121 Remote I/O错误如何解决

I2C IOError: [Errno 121] Remote I/O error 排查修复方案

该报错本质是主控无法通过I2C总线和目标传感器建立正常通信,按以下顺序排查即可:

1. 硬件层检查

  • 接线校验:确认SDA、SCL引脚和主控对应接口无接反,VCC电压匹配BMP388要求(绝大多数为3.3V,禁止接5V避免烧毁传感器),GND和主控完全共地,排除杜邦线松动、虚焊问题
  • 上拉电阻确认:I2C总线的SDA、SCL引脚必须接4.7kΩ左右的上拉电阻到VCC,部分成品BMP388模块自带上拉,裸片必须外接,否则总线电平异常会直接导致通信失败

2. 系统配置检查

  • 确认主控已开启I2C功能,以树莓派为例,可运行raspi-config在接口设置中开启I2C,修改后需重启生效
  • 确认当前用户拥有I2C设备访问权限,执行sudo usermod -aG i2c 你的用户名添加权限,临时测试可直接用sudo运行脚本验证
  • 总线编号校验:如果用的是非树莓派的主控,确认代码里smbus.SMBus(1)的总线编号和实际硬件启用的I2C总线编号一致,填错总线号也会找不到设备

3. 设备地址校验

  • 先安装i2c扫描工具:sudo apt install i2c-tools
  • 扫描当前I2C总线上的挂载设备:sudo i2cdetect -y 1(老版本树莓派替换为sudo i2cdetect -y 0)
  • 对照扫描结果处理:
    • 结果中无76/77地址:回到硬件检查环节,确认传感器接线和供电正常
    • 结果中出现77而非76:将代码中I2C_ADD_BMP388 = I2C_ADD_BMP388_AD0_LOW修改为I2C_ADD_BMP388 = I2C_ADD_BMP388_AD0_HIGH即可,地址不匹配是该报错的最常见诱因

4. 代码稳定性优化

如果上述排查全部正常,可对代码做简单优化降低偶发通信失败概率:

  • 给I2C读写操作加3次以内的重试逻辑,单次间隔10ms,避免总线瞬时波动直接抛出错误
  • 把传感器初始化复位后的等待时间从time.sleep(0.01)改为time.sleep(0.1),给传感器留足复位就绪时间,避免未就绪状态下通信失败

内容的提问来源于stack exchange,提问作者matrunaydo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 13:24:06