RPI上的SMBUS给出IOError:[Errno 121]远程I / O错误

时间:2017-07-26 10:53:49

标签: raspberry-pi3 i2c smbus

我尝试通过I2C在RPi3和stm32之间进行通信。首先,我安装了i2c-tools和python-smbus。 All in All我在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也没有任何错误地接收缓冲区。你能告诉我,我做错了什么吗?

提前谢谢。

1 个答案:

答案 0 :(得分:2)

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

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

所以我尝试使用与您类似的代码段发送:

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

但是在原始通信中,该命令导致Msg [0x00 0xA5 0x5A],具有领先的开始registeraddress,这些IC不允许并且使用NACK正确回答 - >错误121。

O.T .: 我通过发送

解决了我的问题
bus.write_data(address,0xA5,0x5A)