I2C通信プロトコルの原理

I2C 通信プロトコルは、データ収集、カメラ、さまざまなシングルチップ マイクロコンピュータなど、多くのプロジェクトで広く使用されています。I2C ハードウェアは実装が簡単で、強力な拡張性を備えています。集積回路モジュール間の通信に広く使用されています。

従来のデバイス通信はシリアル ポートを通じて実行されますが、3 台またはさらに 4 台のデバイスが相互に通信する場合、このシリアル ポート接続方法は非常に複雑になります。

I2C のハードウェア実装は単純ですが、重要ではないということではなく、IIC 原理を深く徹底的に理解する必要があります。

さらに技術的な記事については、 最も一般的に使用される通信プロトコルである I2Cを参照してください。

目次

1. I2Cの概要

2. I2C 読み取りおよび書き込み操作

3. I2C書き込みデータ処理


1. I2Cの概要

集積回路バスである I2C (IIC、Inter-Integrated Circuit とも呼ばれます) は、マイクロコントローラーとその周辺機器を接続するために PHILIPS によって開発された 2 線シリアル バスです。主に、データ量が少なく伝送距離が短い場合のマスターとスレーブ間のマスタースレーブ通信に使用されます。

I2C バスは、SDA (データ ライン) と SCL (クロック ライン) で構成され、データの送受信を行うための通信ラインを構成する半二重通信プロトコルです。

I2C は複数のデバイスで共有される信号線をサポートし、複数の通信マスターと複数の通信スレーブをサポートします。

バス上の各デバイスはマスター デバイスまたはスレーブ デバイスとして使用でき、各デバイスは固有のアドレスに対応しており、マスター デバイスとスレーブ デバイスはこのアドレスを使用してどのデバイスと通信するかを識別および決定します。


2. I2C 読み取りおよび書き込み操作

I2C の基本原理を理解した後、デバイス間で読み取りおよび書き込み操作を実行する方法を見てみましょう。

まず、SCL クロック ラインと SDA データ ライン間のデータ伝送の原理を理解する必要があります。

SCL はハイ レベルでアクティブで、SDA データ ラインが立ち下がりエッジにある場合はロジック 0、SCL と SDA が両方ともハイ レベルの場合はロジック 1 です。

SCL クロックが方形波を送信し続けると、SDA データ ラインは必要に応じてハイ レベルとロー レベルを変更し、論理 0/1 を形成します。論理 0/1 を組み合わせてバイナリ値の文字列を取得できます。

図に示すように、SCL と SDA を組み合わせて得られる値は 1010 000 です。

ここでは最も基本的なタイミング図を見ていきます。


3. I2C書き込みデータ処理

I2Cの「1つのマスターと複数のスレーブ」の通信モードでは、マスターデバイスはどのようにしてスレーブデバイスと通信するのでしょうか? スレーブデバイスへのアクセス方法を保証するにはどうすればよいですか? これは、SCL クロック ラインと SDA データ ラインを通じて行われ、プロトコルを共同開発します。

次に、スタート信号からスレーブデバイスの見分け方、スレーブデバイスでの読み書き方法、そして最後の終了信号まで、順を追って説明していきます。

プロセス全体を一つずつ話しましょう、みんな小さなベンチに座って注意深く聞いてください!

I2C 通信はデータの読み取りとデータの書き込みの 2 つの部分に分かれており、最初にデータの書き込み処理について説明します。データの読み取り処理も同様であるため、以下に個別に紹介します。

データを書き込むプロセス:

各フレームのデータの書き込みはクロック ラインとデータ ラインによって共同で行われ、同時に情報が送信または読み取られます

これは、スタート ビット、デバイス アドレス、応答ビット、書き込みレジスタ アドレス、書き込みデータ、ストップ ビットを含む標準書き込みデータ フレームです。

最初のステップは開始信号ですアイドル状態ではデータ線、クロック線ともにハイレベルとなり、データ線の立ち下がりエッジがデータ書き込みの開始信号となります。

2 番目のステップはデバイス アドレスです異なるスレーブ デバイスは異なるアドレス コードを使用し、各デバイスは固有の 7 ビット アドレス コード、アドレス A0 ~ A6 を持ちます。

3 番目のステップは、ビットの読み取りと書き込み、および信号の確認ですデータを書き込む場合、読み出しおよび書き込み位置は 0 で、読み出しデータは 1 に設定されます。上図に示すように、データを書き込むときは読み出しおよび書き込み位置が 0 になります。応答信号はデバイスからホストに送信され、0 は受信したことを意味し、1 は未受信または読み取り完了を意味します

4 番目のステップはレジスタアドレスですデバイスのレジスタアドレスは 8 ビットであり、送信される 8 ビットのレジスタアドレスは 256 バイトにアクセスできます。アクセスするレジスタアドレスが 0000 0001 の場合は、レジスタアドレスに 0X01 を入力するだけです。

レジスタアドレスが渡された後、応答信号も必要となり、0を埋めて完了します。

5 番目のステップは、書き込むデータです書き込みデータも 8 ビットであり、8 ビットのデータは、以前に埋められたレジスタ アドレスの位置に埋められます。レジスタアドレス 0X01 にデータ 1000 1111 を書き込むと、原理は下図のようになります。

データの書き込みが完了すると、書き込みが成功したことがホストに通知され、応答信号 0 が送信されます。

6 番目のステップ、ストップ ビットスタート ビットとは反対に、SCL クロック ラインが High の場合、SDA データ ラインは Low から High になり、データ送信のフレームが完了します。

以上で標準的な書き込みデータ フレームが完成します。

たとえば、アドレスが 000 0001 のスレーブ デバイスの場合、0X0F レジスタに 1111 1111 データを書き込みます。IIC はどのようにしてデータ フレームの書き込みを完了しますか? 以下に示すように。


4. I2Cリードデータ処理

データを読み取るプロセスも同様ですが、デバイス アドレス操作が 1 つ増えます。

上図のようにデバイスの0X0Fのデータ0101 0000から000 0001を読み出します。

このうち、データフレームを読み取る際の注意点は次の2点です。

1. 初回はデバイスアドレスの読み書きビットが0で、レジスタアドレスを取得した後に再度デバイスアドレスを取得し、2回目は読み書き位置が1になってから読み出しデータを受信します

2.最終応答信号は 1 で、マスターからスレーブに送信され、読み取りが完了したことを示します。


この記事では I2C の原理を紹介するだけで、コードの実装については説明しませんが、原理を通じて全体の実装メカニズムを理解することで、I2C 通信プロセスをより深く理解することが容易になります。

この記事を通じて、I2C通信の原理を学んでいただければ幸いです。

おすすめ

転載: blog.csdn.net/qrx941017/article/details/131297037