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