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