広告
*I&sup{2};Cとは [#z8051f6f] I&sup{2};C(あいすくえあしー)はシリアルの通信規格の一つでセンサーなどに使われている。~ より詳しい説明などはネットを調べればたくさん出てくるのでそちらを参考に。 ここでは実際に使う上で知っておいた方が良さそうな情報だけ書いてみる。 *細かなこと **デバイスのアドレスが8bitで書かれているものと7bitで書かれているものがある。 [#xe2540ed] デバイスのデータシートを見るとデバイスのアドレスが8bitで書かれているものと7bitで書かれているものがある。~ これは、8bitの場合、書き込み読み込みビットがLSBに入っているためで、7bitの場合はその読み書きビットが入っていない。つまりどちらも同じ。 [[Raspberry Pi]]などで使うときi2cdetectで表示されるのは最後の読み書きビットは含まないので7bitのアドレスとして表示されている。 **10bitアドレスもある [#j6f0d764] ものによっては10bitアドレスもあるらしいが、見たことはない。 **同じアドレスのデバイスを複数使いたい場合 [#o1d30866] 外付けの抵抗などでアドレスを変えられるものもあるが、物によってはアドレスを変えられない。~ そこで、SCLのラインを切り替えたりする方法もあるらしいが、切り替えラインを必要とするので面倒である。 世の中にはI2Cのアドレス切り替えデバイスがあるのでそれを使うとよい。~ 例えば[[LTC4316:http://www.linear-tech.co.jp/product/LTC4316]]や[[LTC4317:http://www.linear-tech.co.jp/product/LTC4317]]など。~ 注意すべきところはLTC4316/4317の出力のSCL、SDAラインも別途プルアップする必要がある。 **Repeated Start Conditionのデバイスに注意 [#bf032fc3] [[Repeated Start Condition:http://www.i2c-bus.org/repeated-start-condition/]]([[エレキジャックの解説:http://www.eleki-jack.com/2007/04/1232.html]])になっているデバイスを[[Raspberry Pi]]で読み込もうとするとちゃんと読めない。~ i2cgetなどでうまく読めなかった場合はこれを疑ってみると良いと思う。 [[Rabbit Noteさんの記事:http://rabbit-note.com/2015/02/15/raspberry-pi-i2c-repeated-start/]]にその対処法が載っているが、これでもうまく行かない場合がある。~ ネットでもいろいろ議論になっているみたいだけど、いまいち決定打が無いようだ。 広告 |