I2C注意点

2017/11/01

I2CはSCLとSDAの二本線で通信ができる(電源とGNDはいるから4本かな?)便利な規格だけど、少しだけ注意することがあるので、メモ。

  • 信号線のプルアップ
    SCLとSDAの信号線は基本的にプルアップ必要。できれば、マスター側とスレーブ側で信号線の電圧ドロップがないか確認したいところ。オシロがあるといいね。
  • 通信距離
    信号線のプルアップにも関係しているけど、通信距離は注意が必要。そして、長距離引っ張るには向かない。DCレベルのドロップだったり、差動じゃなかったり、といったことが原因かな?どうしても長距離引っ張りたいならRS485とかを使うといい。マルチドロップあるしね。
  • アドレスのビットシフト確認
    ものによるんだと思うけど、ICの仕様書に記載されているアドレスが1ビット左にシフト済みのものとそうでないものがあるようだ。I2Cは規格上、最下位ビット(0ビット目)が0なら書き込み、1なら読み出しといった具合で使い分けられるけど、例えばアドレス0x20のICがあったとして、0x20で書き込みしてもうまく通信できない場合は0x20<<1とかでアクセスしてみるといい。読み込みだったら、(0x20<<1) | 1だね。
  • システム内に同一のアドレスのICがいないか?
    「ちょっとこの基板にxxxの機能追加してくれないか?」みたいな話があって、基板自体の仕様がグレーだった場合に起こりうる現象。まぁ、ちゃんとチェックしていれば問題は発生しないんだろうけどね。

いやぁ組み込みっていろいろ大変だけど、面白いね。お金に本当に余裕があるなら、いろいろ作ってみたいなぁ・・・。