I2Cコンセプトカーディング

1.はじめに

I2C(Inter-integrated Circuit)バスはデバイス間の近距離通信をサポートし、情報交換を完了するには2本の信号線が必要です(1本のSDA、シリアルデータ線、1本のSCL、シリアルクロック線)。I2Cは、1982年にフィリップスによって最初に開発および設計され、独自のチップで使用されました。当初、100kHz、7ビットの標準アドレスのみが許可されていました。1992年、I2Cの最初の公開仕様が発行され、400kHz高速モードと10ビット拡張アドレスが追加されました。I2Cに基づいて、Intelは1995年に低速デバイス通信用に「システム管理バス」(SMBus)を提案しました。SMBus はクロック周波数を10kHz 100kHzに制限しますが、I2Cは0kHz 5MHzデバイスをサポートできます:通常モード(100kHzは100kbpsです) )、高速モード(400kHz)、高速モード+(1MHz)、高速モード。

2、I2c合意

1.開始条件

送信の正式な開始を示すために、マスターデバイスはSCLをハイに設定し(バスがアイドルのとき、SDAとSCLはハイ状態)、SDAをローにして、すべてのスレーブデバイスが送信が開始されようとしていることを認識します。両方のマスターデバイスが同時にバスの所有権を取得したい場合は、SDAをLowにした方がバスの制御権を獲得します。通信期間全体で、新しい各通信シーケンスを開始するために複数の開始がある場合があります。

2.アドレスフレーム

メッセージが送信されるスレーブを示すためにマスターによって使用されます。

アドレスフレームは常に通信の最初に表示されます。最上位ビット(MSB)から7ビットのアドレスが送信されます。このアドレスの後には1ビットの演算子が続き、1は読み取り操作、0は書き込み操作です。

次のビットはNACK / ACKです。このフレームの最初の8ビットが送信された後、受信デバイスはSDA制御を取得します。このとき、受信デバイスは、9番目のクロックパルスの前にACK(SDAをローにプル)する必要があります。受信が正常であることを示します。受信デバイスがSDAをLowにプルしない場合、受信デバイスがデータを受信して​​いない(アドレス指定されたデバイスが存在しない、デバイスがビジーであるなど)か、受信したメッセージを解析できません。そうである場合、マスターは何をすべきかを決定します(停止または繰り返し開始条件)。

3.データフレーム

マスターからスレーブ(またはスレーブからマスター)に送信されるデータ、各フレームは8ビットデータです。

アドレスフレームが送信された後、データ送信を開始できます。マスターは引き続きクロックパルスを生成し、データはマスター(書き込み操作)またはスレーブ(読み取り操作)によってSDAに配置されます。各データフレームは8ビットで、ストップコンディションが生成されるまで、データフレームの数は任意です。データ送信の各フレームの後(つまり、8ビットごと)に、レシーバーはACKまたはNACKで応答する必要があります(スレーブはデータの書き込み時にACKを送信し、マスターはデータの読み取り時にACKを送信します。マスターがデータの最後のバイトの読み取りを完了したことがわかった場合時間、NACKを送信してから条件を停止できます)。

4.停止条件

すべてのデータが送信されると、マスターは停止条件を生成します。ストップ条件は次のように定義されます。SDAがローにされると、SCLがハイに引き上げられてハイに保持され、その後SDAがハイに引き上げられます。

注:通常のデータ送信中、SCLが高レベルの場合、予期しない停止状態を防ぐためにSDAの値を変更しないでください。

5.繰り返し開始条件

SCLがローのときにSDAがハイになり、次にSCLがハイになります。次に、マスターは開始条件を生成して、新しいメッセージの送信を続行できます。

6.クロックストレッチ、クロック同期、バス調停

3、I2C読み取りおよび書き込みプロセス

1.レジスターを書き込むための標準プロセス
  • マスターがSTARTを開始
  • マスターはI2Cアドレス(7ビット)と操作0(1ビット)を送信し、ACKを待機しています
  • スレーブがACKを送信
  • マスターはreg addr(8ビット)を送信し、ACKを待機しています
  • スレーブがACKを送信
  • マスターはデータ(8ビット)を送信します。つまり、データはレジスタに書き込まれ、ACKを待機します。
  • スレーブがACKを送信
  • 手順6と7は複数回繰り返すことができます。つまり、複数のレジスタに順番に書き込みます
  • マスターがSTOPを開始
2.レジスターを読み取るための標準プロセス
  • マスターはI2Cアドレス(7ビット)と操作1(1ビット)を送信し、ACKを待機しています
  • スレーブがACKを送信
  • マスターはreg addr(8ビット)を送信し、ACKを待機しています
  • スレーブがACKを送信
  • マスターがSTARTを開始
  • マスターがI2Cアドレス(7ビット)とr操作1(1ビット)を送信し、ACKを待機
  • スレーブがACKを送信
  • スレーブはデータ(8ビット)、レジスタの値を送信します
  • マスターがACKを送信
  • ステップ8と9は複数回繰り返すことができます。つまり、複数のレジスタを順番に読み取ります
81件の元の記事を公開 21件の賞賛 30,000回以上の閲覧

おすすめ

転載: blog.csdn.net/qq_33575901/article/details/105222375