結論

Raspberry Pi 3でI2C通信によるデバイスの制御をするときには,I2Cのバスリピータを入れておいた方がよさそうです.

背景

最初,GeeekPi Raspberry Pi4ケースArgon ONE M.2にRaspberry Pi 4を入れて自作の基板との間でI2C通信をしていました.その後,Raspberry Pi 3にて同じプログラムを走らせたところ,スレーブ側(自作基板)からマスタ側(Raspberry Pi)へデータを送信すると,データが正しく送られないという状態になりました.

行なったこと

いくつかの過去の記事にあるように,Raspberry Pi 3のプルアップ抵抗の抵抗値が小さいため,スレーブ側で引ききれずにHighになっているようでした.このため,I2Cのバスリピータを入れてみることでこの問題が解決するのではと考えるようになりました.その後,ケースから出したRaspberry Pi 4で動作確認したところ,うまく通信ができたようです.ということは,Raspberry Pi 3と4でI2Cのプルアップ抵抗の値が変わったのかもしれません.いずれにせよ,Raspberry Pi 3でも動くようにしたいと考えたため,バスリピータを付けた基板を作成し,いつもの基板製造会社へ発注済みです.後日,結果をお知らせします.