2017-07-26 509 views
0

我嘗試通過I2C在RPi3和stm32之間進行通信。首先,我安裝了i2c工具和python-smbus。所有在所有我已經使用Python腳本的RPI如下:RPI上的SMBUS給出IOError:[Errno 121]遠程I/O錯誤

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也收到緩衝區沒有任何錯誤。你能告訴我,我做錯了什麼?

預先感謝您。

回答

0

我遇到了同樣的問題。當我發現所有的從機都沒有收到主機發送的命令時,我發現錯誤代碼爲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) 

但在原始通信此命令導致消息[0×00的0xA5 0x5A],與領先的起始地址,這些芯片並沒有讓並回答正確與NACK - >錯誤121

OT: 我解決我的問題與發送

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