プロトコルの概要
複数デバイス間の通信をサポートするため、I2Cはシリアル通信よりも複雑なプロトコルとなっています。実際にどう動くのか、例を使って見てみましょう。
Master -> Slave
マスター -> スレーブ
マスターがスレーブにデータを送りたいとき、次のようになります。
- M(マスター):STARTをブロードキャストする
- M:スレーブアドレス(上位7ビット)と、WRITEに設定したR/Wビット(第8ビット)をブロードキャストする
- S(スレーブ):ACK(ACKnowledgement)を返信する
- M:1バイト送信する
- S:ACKを返信する
- 必要なだけ4と5を繰り返す
- M:STOPをブロードキャストする(または、RESTARTをブロードキャストして2へ戻る)
注 スレーブアドレスが7ビット長でなく10ビット長のときもありますが、他はなにも変わりません。
マスター <- スレーブ
マスターがスレーブからデータを読み取りたいときはこうなります。
- M:STARTをブロードキャストする
- M:スレーブアドレス(上位7ビット)と、READに設定したR/Wビット(第8ビット)をブロードキャストする
- S:ACK(ACKnowledgement)を返信する
- S:1バイト送信する
- M:ACKを返答する
- 必要なだけ4と5を繰り返す
- M:STOPをブロードキャストする(または、RESTARTをブロードキャストして2へ戻る)
注 スレーブアドレスが7ビット長でなく10ビット長のときもありますが、他はなにも変わりません。