複数のスレッドで複数の I2C デバイスを使用する例はありますか? 私は少し問題を抱えています.1ステップ実行するとすべてが機能し、フルスピードで実行するとすべてが台無しになります-明らかに競合状態です。i2C トラフィックが実際に破損している (私のロジック アナライザーで見たように) ので、少し驚きました。I2C 操作はアトミックであると想定していましたが、必ずしもそうとは限りません。
私のアプリは、温度センサーとモーター コントローラーを使用しています。どちらも I2C デバイスです。温度プローブは、ワーカー スレッドで実行されていると思われるタイマーでサンプリングされています。
I2C トラフィックのデータ破損が見られます。両方のスレッドが同時に異なるスレーブ アドレスに書き込もうとしている可能性があると思います。
ドキュメンテーションはスレッド化の問題について少し沈黙しているので、どのレベルで競合状態から保護する必要があるのか わかりません. 私が見ている問題から、I2C コントローラーは一度に 1 つの操作しか実行できないように見えるため、コントローラー レベルで保護する必要があります。
これにアプローチする方法についていくつかのアイデアがありますが、ドキュメントはスレッド化の要件について少し沈黙しているので、行き止まりに行く前に、誰かがすでにそれを成功させているかどうか尋ねたいと思いました:)