Linux I2Cデバイスドライバー(1)-物理トポロジーとプロトコル

チームは、組み込みLinuxソフトウェアとハ​​ードウェアの開発、マシンビジョン画像処理、ネットワークストリーミング、その他のプロジェクトを請け負っています。

WeChat ID:hgz1173136060



1 - 1  I2Cのバスの知識

。1 - 。1 - 。1   I2Cバスの物理トポロジ


    I2Cバスは、物理的な接続が非常に簡単です。2線式シリアルバスSDA(シリアルデータラインSCL(シリアルクロックライン、およびプルアップ抵抗で構成されています。通信原理はSCLおよびSDAラインのハイタイミングとロータイミングを制御することにより、データ転送にI2Cバスプロトコルに必要な信号を生成することです。バスがアイドル状態のとき、プルアップ抵抗はSDAラインSCLラインの両方をハイに保ちます。バスに接続された各デバイスの出力端子は、オープンドレイン出力またはオープンコレクタ出力構造(OCゲート)である必要があります。

1 - 1 - 2   のI2Cバス特性

  I2Cバス上の各デバイスは、マスターデバイスまたはスレーブデバイスとして使用できます。マスターはデータ転送とクロック周波数を制御でき、マスターは常に1つしか存在できませんまた、各デバイスは一意のアドレスに対応しますI2Cデバイスのデータシートから知ることができます。マスターデバイスとスレーブデバイスは、このアドレスを使用して通信するデバイスを決定します。通常のアプリケーションでは、CPUI2Cで使用します。バスインターフェースモジュールはマスターデバイスとして機能し、バスに接続されている他のすべてのデバイスはスレーブデバイスとして機能します。    I2Cバスに接続できるデバイス数は、バスの最大容量400pFによって制限されます。同じモデルのデバイスが接続されている場合は、デバイスアドレスビットによっても制限されます。    I2Cバスのデータ転送速度は、標準モード100kbit / Sまで、高速モード400kbit / Sまで、高速モード3.4Mbit / Sまでです。一般に、伝送速度の調整は、I2Cバスインターフェースのプログラム可能なクロックを介して実現され、接続されたプルアップ抵抗の抵抗にも関係します。 I2Cバス上のマスターデバイスとスレーブデバイス間の双方向データ転送、単位としてバイト(8ビット取ります半二重


   

。1 - 。1 - 。3   I2Cバスプロトコル

  I2Cプロトコルでは、バス上でのデータの送信では、送信の開始条件として開始信号を、停止条件として終了信号を取得する必要があると規定されています。開始信号と終了信号は常にマスターデバイスによって生成されます。

アイドル:SCL高レベル、SDA高レベル

開始条件:SCLハイレベル、SDA立ち下がりエッジ

停止条件:SCLハイレベル、SDA立ち上がりエッジ

ビジーステータス:マスターデバイスのみからの進行中のデータ送信バスを考慮し、他のデバイスはアクセスできません

データは有効です:高レベルのSCLの間SDAは安定したままであり、データは有効です。SDAの変更は、低レベルのSCLでのみ発生する可能性があります

ACK信号:データ送信中、受信デバイスは、データのバイトを受信するたびにACK信号を生成し、データが受信されたこと示すために特定の低レベルパルスを送信デバイスに送信します。

写真が示すように:


データ送信単位としてのバイト、1パルス、1データビット、送信方向:上位バイトから下位バイトへの順次送信1バイトが送信された後、スレーブデバイスは低レベルの応答ビットを送信します 

  開始条件と停止条件を理解した後、このプロセスでデータ送信がどのように実行されるかを見てみましょう。前述したように、データ転送はバイト単位です。マスターデバイスがSCLライン各クロックパルス生成すると、SDAラインでデータビット送信しますバイトがデータビットの順にHighからLowに送信されると、スレーブデバイスはSDAラインをLowにプルします。、そしてマスターデバイスに確認応答ビットを送り返します。この時点で、バイトは本当に送信されたと見なされます。もちろん、すべてのバイト送信に確認応答ビットが必要なわけではありません。たとえば、スレーブデバイスがマスターデバイスから送信されたデータを受信できなくなった場合、スレーブデバイスは負の確認応答ビットを返します。データ送信のプロセスを図に示します


 デバイスアドレス:デバイスアドレスの上位7ビット、最下位ビットは読み取り/書き込みビットです。0はマスターデバイスがスレーブデバイスにデータを書き込むことを意味し1はマスターデバイスがスレーブデバイスからデータを読み取ることを意味します。前述のように、I2Cバス上の各デバイスは一意のアドレスに対応します。マスターとの間のデータ転送スレーブデバイスはアドレスに基づいています。つまり、マスターデバイスは有効なデータを送信する前にスレーブデバイスのアドレスを指定する必要があります。アドレスを指定するプロセスは、アドレスを除いて上記のデータ送信のプロセスと同じです。ほとんどのスレーブデバイスの7ビットです。そして、プロトコルは、次のデータ送信の方向を示すためにアドレスに最下位ビットを追加することを規定します。0はマスターデバイスがスレーブデバイスにデータを書き込むことを意味し1はマスターデバイスを意味します。スレーブデバイスにデータを読み取ります。写真が示すように:
   



。1 - 。1 - 。4   I2Cバスの動作

      I2Cバスの動作は、実際にはマスターデバイスとスレーブデバイス間の読み取りおよび書き込み動作です。これは、大きく次の3つの動作状況に分けることができます。最初に、マスターデバイスがスレーブデバイスにデータを書き込みますデータ送信形式は次のとおりです。
   


   


    次に、マスターデバイスはスレーブデバイスからデータを読み取りますデータ送信形式は次のとおりです。


    

   第3に、マスターデバイスはスレーブデバイスにデータを書き込んでから初期条件を再起動してからスレーブデバイスからデータを読み取ります。または、マスターデバイスがスレーブデバイスからデータを読み取ってから初期条件を再起動してからマスターデバイスを読み取ります。デバイスから書き込みデータを送信します。データ送信形式は次のとおりです。


    3番目の操作はシングルマスターシステムで行われ、繰り返し開始条件メカニズムは、STOPで送信停止してからバスを再び開くよりも効率的です

おすすめ

転載: blog.csdn.net/hgz_gs/article/details/52742331