【问题标题】:SMBUS on the RPI gives IOError: [Errno 121] Remote I/O errorRPI 上的 SMBUS 给出 IOError: [Errno 121] Remote I/O error
【发布时间】:2017-07-26 10:53:49
【问题描述】:

我尝试过通过 I2C 在 RPi3 和 stm32 之间进行通信。首先我已经安装了 i2c-tools 和 python-smbus。总而言之,我在 RPI 上使用了 python 脚本,如下所示:

import smbus
bus = smbus.SMBus(1)
address = 0x0A
data = [1,2,3,4,5,6,7,8]
bus.write_i2c_block_data(address, 0, data)

当我运行脚本时,我可以看到以下错误:

IOError: [Errno 121] Remote I/O error

STM32 配置为 I2C 从机,两个设备都正确连接(SDA、SCL 和 GND)。我怎么知道?我已经使用 BCM2835 库制作了程序。 C 程序正常工作。 C 程序发送缓冲区没有任何错误。 STM32 也收到缓冲区没有任何错误。你能告诉我,我做错了什么吗?

提前谢谢你。

【问题讨论】:

    标签: raspberry-pi3 i2c smbus


    【解决方案1】:

    我遇到了同样的问题。我发现当没有从机确认主机发送的命令时,会出现错误代码 121。如果您尝试联系未使用的地址或命令不是从站所期望的,则会发生这种情况。

    就我而言,我尝试向 TLC59116 发送重置命令。这些 IC 期望地址 0x6B 上的命令“0xA5 0x5A”。

    所以我尝试使用与您类似的 sn-p 发送:

    import smbus
    bus = smbus.SMBus(0)
    address = 0x6B
    data = [0xA5,0x5A]
    bus.write_i2c_block_data(address, 0, data)
    

    但在原始通信中,此命令会导致带有前导起始寄存器地址的 Msg [0x00 0xA5 0x5A],这些 IC 不允许并以 NACK -> 错误 121 正确回答。

    O.T.: 我通过发送解决了我的问题

    bus.write_byte_data(address,0xA5,0x5A)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-15
      • 1970-01-01
      • 2021-08-27
      • 2012-08-25
      • 1970-01-01
      • 1970-01-01
      • 2015-03-26
      相关资源
      最近更新 更多