- 締切済み
I2C通信について
マイコンにI2C通信対応ICを5個接続して使用しようとしています. 基板上で5個のICのI2Cバスを接続して通信したところ,1個だけ(型番 : INA231)データが正常に返ってきませんでした. オシロで波形を確認すると,INA231と通信する時のみ,SDA/SCLともに波形の電圧が正常時の半分程度でした.他の4個のICとの通信時は正常な電圧(highが電源電圧)でした. 試しに,マイコンとINA231を1:1で接続してI2C通信すると問題なくデータを取得できたため,プログラムは問題ないことが確認できました. 上記のような現象の発生原因と,対策など,お分かりになられる方がいらっしゃいましたら何卒ご教授よろしくお願い致します.
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- tadys
- ベストアンサー率40% (856/2135)
バスが衝突している可能性が有ります。 INA231と通信している時にどれか別のディバイスも動作しているのでしょう。 I2Cには高速モードというのが有ります。 高速モードのディバイスがデータを出力する時にはIC内部のプルアップ抵抗(電流源)がオンになります。 このプルアップと他のディバイスのゼロ出力が衝突すると中途半端な電圧になることが有ります。 INA231以外のICをゼロから1個づつ増やしていって異常が発生したときのICが原因です。 ディバイスのアドレスが重複していないか確認してください。
- kaba__san
- ベストアンサー率45% (27/59)
「正常時の半分程度」とはどういうことでしょうか。 通常、アイドル中はプルアップ抵抗によりVCCとなり、通信時にほぼ0Vまでスイングします。 それが1/2VCC程度までしか下がらないということならば、プルアップの抵抗値が低すぎて下げきれないのかなとも思います。 通信中のHigh側が上がりきらないのであれば、逆にプルアップの抵抗値が高すぎて上げきれないのかもしれません。 しかし、SCLを駆動しているのは、ごく一部のタイミングを除いてマスターであるマイコンのはずですので、特定スレーブとの通信時のみ異常な電圧ということは起こり得ないはずです。 まずは上記電圧と接続しているプルアップ抵抗についての補足をお願いします。 もう一つ、各ICの電源電圧はすべて統一しているのでしょうか。5Vと3.3Vを混在なんてしていませんか?