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

树莓派Python通过I2C多路器访问LCD时遇OSError 121远程I/O错误求助

解决树莓派I2C多路器Remote I/O错误(Errno 121)

问题核心

你的i2cdetect -y 1结果完全没有设备,连I2C多路器的默认地址0x70都扫不到,说明树莓派根本没检测到多路器,这是导致write_byte(0x70, 0xFF)报错的直接原因。

排查与解决步骤

1. 确认树莓派I2C功能已启用

  • 打开终端执行sudo raspi-config,进入Interface Options → I2C,选择启用后重启树莓派。
  • 也可以手动编辑/boot/config.txt,确保存在一行dtparam=i2c_arm=on,没有则添加,保存后重启。

2. 重新检查硬件连接细节(新手易忽略点)

  • 电平匹配:I2C多路器(如TCA9548A)和SSD1306 LCD统一用3.3V供电,避免5V电平导致设备不响应。
  • 引脚对应:树莓派SDA对应GPIO2(物理引脚3),SCL对应GPIO3(物理引脚5),不要接反多路器的SDA/SCL引脚。
  • 地址引脚:多路器的A0-A3引脚默认需接地,这样地址才是0x70;若这些引脚接高电平,地址会偏移,导致扫不到。
  • 线路质量:避免用过长的杜邦线,若信号衰减,给SDA/SCL线各加一个4.7kΩ的上拉电阻(一端接VCC,一端接对应引脚)。

3. 单独测试多路器

  • 断开所有LCD屏幕,仅将多路器的VCC、GND、SDA、SCL接到树莓派,再执行i2cdetect -y 1:
    • 若能看到0x70,说明多路器正常,问题出在LCD连接或多路器与LCD的匹配上。
    • 若仍看不到,大概率是多路器损坏,更换一个测试。

4. 代码小调整

  • 在初始化SMBus后添加延时,避免设备未就绪就写入:
    import time
    bus = smbus2.SMBus(1)
    time.sleep(1)  # 给设备预留初始化时间
    bus.write_byte(0x70, 0xFF)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 03:40:54