I2C 注意点
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の機能追加してくれないか?」みたいな話があって、基板自体の仕様がグレーだった場合に起こりうる現象。まぁ、ちゃんとチェックしていれば問題は発生しないんだろうけどね。
いやぁ組み込みっていろいろ大変だけど、面白いね。お金に本当に余裕があるなら、いろいろ作ってみたいなぁ・・・。