2015年7月13日月曜日

I2Cってなんじゃいな。

PSoCまつり明けの記事としてはちょっと高難易度かもしれません。

さて、I2Cはアイ・ツー・シー、もしくは
アイ・スケア(スクエア)・シーと読みます。

I2Cはフィリップス・セミコンダクター(今のNXP)が開発した
2線式の双方向バスです。
シリアルデータライン(SDA)シリアルクロックライン(SCL)
2本を用いて通信をし100kbit/s,400kbit/s,1Mbit/s,3.4Mbit/s,5Mbit/s
の4つの通信スピードがあります。

UART(シリアル通信)と同じようにデバイス間の通信方式ですが
UARTとは異なり複数のデバイスとも通信することが出来ます。

I2Cには、デバイス同士にマスターとスレーブと言う関係性を持っています。

マスターのデバイスはスレーブに対する設定をしたり、スレーブが作ったデータを取ったりします。
スレーブのデバイスはスレーブ同士を見分けるための固定のアドレス
レジスター(メモリーの集合郵便ポストみたいなもの)を持っています。
レジスターに設定やスレーブが用意したデータが格納され、
レジスター内のデータを返してマスター側とデータのやり取りをします。



多くの場合、I2Cの接続にはマスターが1つに対して
複数のスレーブが接続する単一マスター接続があります。
場合によって、複数のマスターと複数のスレーブを接続する
マルチマスター接続と言うのもあります。

I2Cで難しいのは8bitのセットで格納されているスレーブ側のレジスターです。
レジスターには0,1のビットが8個セットで格納されており、
格納してあるビット列で設定やデータの受け渡しをしています。
スレーブ側のレジスターに格納されているビット列を変更する事によって
スレーブ側の設定が変更されます。
また、一つのビットだけでも大きい意味を持つので、設定に関しては
スレーブ側のデーターシートを良く見る必要があります。
受け渡すデータも格納されている8bitだけでは無く、16bit,24bitと長くなる場合には
マスター側が「ビット演算子」を使ってデータを復元する必要性もあります。

ここまで分かっていればPSoCでI2Cを使う場合には問題ないかなと思います。
PSoCではCapSenseのモニターにもI2Cは使われており、何かとI2Cは登場する機会が
多いかなと思いますので、習得しておくと便利だと思います。

もしも、I2Cの細かい所を知りたい場合には
NXPの中の人が書いた解説を読むのが良いと思います。
https://developer.mbed.org/users/okano/notebook/i2c-access-examples/


次回は実際にPSoC5LPをマスター、スレーブ側を
センサーモジュールでI2Cの通信してみたいと思います。

0 件のコメント:

コメントを投稿