I2C(Inter-Integrated Circuit)とは
I2C(Inter-Integrated Circuit)とは、フィリップス社が提唱するシリアルインターフェースで、組み込みではセンサー類や、外付けEEPROMとの通信に使用されたりします。
I2CではSCL(クロック)とSDA(データ入出力)を使用して同期通信を行います。
通信では主体的に通信を行うマスタと、受動的に通信を行うスレーブに分かれ、マスタが出力するクロックに合わせて信号を変化させてデータのやり取りを行います。
スレーブには機器ごとにI2Cアドレスが割り振られているため、1つのマスタに複数のスレーブを接続することも可能になります。
マイコンからのデータ読み出し方法
マスタとスレーブ間の通信は書き込みの場合と読み出しの場合で以下のように行われます。
書き込みの場合
- [マスタ]スタートコンディションを送信
- [マスタ]I2Cアドレスの送信
- [マスタ]書き込みを送信
- [スレーブ]ACKを送信
- [マスタ]データを送信
- [スレーブ]ACKを送信
- 5~6をデータサイズ分繰り返す
- [マスタ]ストップコンディションを送信
読み出しの場合
実際は先にコマンドを書き込んでから、読み出しを実行することで読み出すデータを選択することができます。
- [マスタ]スタートコンディションを送信
- [マスタ]I2Cアドレスの送信
- [マスタ]読み出しを送信
- [スレーブ]ACKを送信
- [スレーブ]データを送信
- [マスタ]ACKを送信
- 5~6をデータサイズ分繰り返す
- [スレーブ]ストップコンディションを送信
Arduinoの使ったセンサ(SHT3x-DIS)の読み出し例
今後更新予定