一般的なプロトコル

I2Cプロトコルは複数のデバイス間の通信をサポートしなければならないため、シリアル通信プロトコルより複雑です。 例を使って、I2Cプロトコルがどのように動くか見ていきましょう。

マスター -> スレーブ

マスターがスレーブにデータを送りたい場合、次のようになります。

  1. マスター:STARTをブロードキャストします
  2. M:スレーブアドレス(7ビット)+R/W(第8の)ビットをWRITEに設定したものをブロードキャストします
  3. スレーブ:ACK(ACKnowledgement)を返信します
  4. M:1バイト送ります
  5. S:ACKを返信します
  6. 手順4と5を0回以上繰り返します
  7. M:STOPブロードキャストします(または、RESTARTをブロードキャストし、手順2に戻ります)

注記 スレーブアドレスは7ビット長の代わりに10ビット長になる可能性があります。他には何も変わりません。

マスター <- スレーブ

マスターがスレーブからデータを読みたい場合、次のようになります。

  1. M:STARTをブロードキャストします
  2. M:スレーブアドレス(7ビット)+R/W(第8の)ビットをREADに設定したものをブロードキャストします
  3. S:ACKを返信します
  4. S:1バイト送ります
  5. M:ACKを返信します
  6. 手順4と5を0回以上繰り返します
  7. M:M:STOPブロードキャストします(または、RESTARTをブロードキャストし、手順2に戻ります)

注記 スレーブアドレスは7ビット長の代わりに10ビット長になる可能性があります。他には何も変わりません。