一般的なプロトコル
I2C プロトコルは、複数のデバイス間の通信をサポートしなければならないため、シリアル通信プロトコルよりも複雑です。例を使って、どのように動作するのか見ていきましょう。
マスター -> スレーブ
マスターがスレーブにデータを送信したい場合:
- マスター: START をブロードキャストする
- M: スレーブアドレス(7 ビット)+ WRITE に設定された R/W(8 番目)ビットをブロードキャストする
- スレーブ: ACK(確認応答)を返す
- M: 1 バイト送信する
- S: ACK を返す
- 手順 4 と 5 を 0 回以上繰り返す
- M: STOP をブロードキャストする、または(RESTART をブロードキャストして (2) に戻る)
注 スレーブアドレスは 7 ビット長ではなく 10 ビット長であってもかまいません。それ以外は 変わりません。
マスター <- スレーブ
マスターがスレーブからデータを読み取りたい場合:
- M: START をブロードキャストする
- M: スレーブアドレス(7 ビット)+ READ に設定された R/W(8 番目)ビットをブロードキャストする
- S: ACK で応答する
- S: 1 バイト送信する
- M: ACK で応答する
- 手順 4 と 5 を 0 回以上繰り返す
- M: STOP をブロードキャストする、または(RESTART をブロードキャストして (2) に戻る)
注 スレーブアドレスは 7 ビット長ではなく 10 ビット長であってもかまいません。それ以外は 変わりません。