2017-07-26 24 views
0

I2C経由でRPi3とstm32間の通信を試みました。まず、i2c-toolsとpython-smbusをインストールしました。私は、スクリプトを実行すると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) 

が、私は次のようなエラー見ることができます:すべてがすべてで、私は以下のようにRPIにPythonスクリプトを使用していた

IOError: [Errno 121] Remote I/O error 

STM32は、I2Cスレーブとして設定されているが、両方のデバイスが接続されています正しく(SDA、SCL、GND)。それをどうやって知るのですか?私はBCM2835ライブラリを使ってプログラムを作った。 Cプログラムが正常に動作しました。 Cプログラムがエラーを出さずにバッファを送信しました。 STM32はバッファもエラーなしで受信しました。私が間違っていることを教えてくれませんか?

ありがとうございます。

答えて

0

同じ問題が発生しました。私は、スレーブのどれもがマスターによって送信されたコマンドをACKしないときに、エラーコード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) 

しかし、生の通信では、このコマンドは、これらのICは許可しませんでした有力開始アドレスと、メッセージ[0x00の0xA5の0x5A]につながりますそしてNACKで正解 - >エラー121

OT: 私は

bus.write_data(address,0xA5,0x5A) 
を送ると私の問題を解決しました
関連する問題