広告

I2Cとは

I2C(あいすくえあしー)はシリアルの通信規格の一つでセンサーなどに使われている。
より詳しい説明などはネットを調べればたくさん出てくるのでそちらを参考に。

ここでは実際に使う上で知っておいた方が良さそうな情報だけ書いてみる。

細かなこと

デバイスのアドレスが8bitで書かれているものと7bitで書かれているものがある。

デバイスのデータシートを見るとデバイスのアドレスが8bitで書かれているものと7bitで書かれているものがある。
これは、8bitの場合、書き込み読み込みビットがLSBに入っているためで、7bitの場合はその読み書きビットが入っていない。つまりどちらも同じ。

Raspberry Piなどで使うときi2cdetectで表示されるのは最後の読み書きビットは含まないので7bitのアドレスとして表示されている。

10bitアドレスもある

ものによっては10bitアドレスもあるらしいが、見たことはない。

同じアドレスのデバイスを複数使いたい場合

外付けの抵抗などでアドレスを変えられるものもあるが、物によってはアドレスを変えられない。
そこで、SCLのラインを切り替えたりする方法もあるらしいが、切り替えラインを必要とするので面倒である。

世の中にはI2Cのアドレス切り替えデバイスがあるのでそれを使うとよい。
例えばLTC4316LTC4317など。
注意すべきところはLTC4316/4317の出力のSCL、SDAラインも別途プルアップする必要がある。
また、データシートに載っているアドレス設定用の抵抗値がE48系列(E96系列)なので入手がしにくい。
1MΩと681kΩというのを1MΩと680kΩにすれば良いかと思う。あるいはオープンとショートの組み合わせ。

Repeated Start Conditionのデバイスに注意

Repeated Start Condition(エレキジャックの解説)になっているデバイスをRaspberry Piで読み込もうとするとちゃんと読めない。
i2cgetなどでうまく読めなかった場合はこれを疑ってみると良いと思う。

Rabbit Noteさんの記事にその対処法が載っているが、これでもうまく行かない場合がある。
ネットでもいろいろ議論になっているみたいだけど、いまいち決定打が無いようだ。


広告

リロード   差分   ホーム 一覧 検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS