I2Cバスプロトコルチュートリアル、アプリケーションとのインターフェース

問題を排除するために楽器を試してください





今日では、プロトコルは 組み込みシステム設計 。プロトコルに行かずに、マイクロコントローラーの周辺機能を拡張したい場合は、複雑さと消費電力が増加します。 USART、SPI、CAN、など、さまざまなタイプのバスプロトコルを利用できます。 I2Cバスプロトコル 、など。2つのシステム間でデータを転送するために使用されます。

I2Cプロトコル

I2Cバスとは何ですか?




2つまたは3つ以上のデバイス間で情報を送受信するには、バスシステムと呼ばれる通信パスが必要です。 I2Cバスは、集積回路間でデータを転送するために使用される双方向の2線式シリアルバスです。 I2Cは「InterIntegratedCircuit」の略です。 1982年にフィリップスセミコンダクターズによって最初に導入されました。I2Cバスは、標準、高速モード、高速モードの3つのデータ転送速度で構成されています。 I2Cバスは7ビットと10ビットのアドレス空間デバイスをサポートしており、その動作は低電圧で異なります。

I2cバスプロトコル

I2cバスプロトコル



I2C信号線

I2C信号線

I2C信号線

I2Cは、デバイスとの通信に使用されるSCLおよびSDLラインなどの2つの信号ラインで構成されるシリアルバスプロトコルです。 SCLは「シリアルクロックライン」の略で、この信号は常に「マスターデバイス」によって駆動されます。 SDLは「シリアルデータライン」の略で、この信号はマスターまたはI2Cペリフェラルのいずれかによって駆動されます。 I2Cペリフェラル間で転送がない場合、これらのSCLラインとSDLラインはどちらもオープンドレイン状態です。

オープンドレイン出力


オープンドレインは FETトランジスタのコンセプト ここで、トランジスタのドレイン端子は開状態である。マスターデバイスのSDLピンとSCLピンは、トランジスタがオープン状態で設計されているため、これらのトランジスタが導通している場合にのみデータ転送が可能です。したがって、これらのラインまたはドレイン端子は、導通モード用にプルアップ抵抗を介してVCCに接続されます。

I2Cインターフェース

たくさんの スレーブデバイスはマイクロコントローラーに接続されています それらの間で情報を転送するためのI2CレベルシフターICを介したI2Cバスの助けを借りて。マスターユニットのSCLおよびSDL回線、およびスレーブデバイスと通信するためにすべて接続されている最大128のデバイスを接続するために使用されるI2Cプロトコル。マルチマスター通信をサポートします。つまり、2つのマスターを使用して外部デバイスと通信します。

I2Cデータ転送速度

I2Cプロトコルは、高速モード、高速モード、標準モードの3つのモードで動作します。標準モードのデータ速度は0Hz〜100Hzで、高速モードのデータは0Hz〜400 KHzの速度で転送でき、高速モードは10 KHzから100KHz。 9ビットのデータは転送ごとに送信されます。8ビットは送信機のMSBからLSBに送信され、9番目のビットは受信機から送信される確認応答ビットです。

I2Cデータ転送速度

I2Cデータ転送速度

I2C通信

I2Cバスプロトコルは、マスターとスレーブの通信で最も一般的に使用され、マスターは「マイクロコントローラー」と呼ばれ、スレーブは組み込みシステムのADC、EEPROM、DACなどの他のデバイスと呼ばれます。スレーブデバイスの数は、I2Cバスを使用してマスターデバイスに接続されます。各スレーブは、それを通信するための一意のアドレスで構成されます。マスターデバイスをスレーブに通信するには、次の手順を使用します。

ステップ1: まず、マスターデバイスが開始条件を発行してすべてのスレーブデバイスに通知し、シリアルデータラインでリッスンするようにします。

ステップ2: マスターデバイスは、SCLおよびSDL回線に接続されているすべてのスレーブデバイスのアドレスと比較されるターゲットスレーブデバイスのアドレスを送信します。いずれかのアドレスが一致する場合、そのデバイスが選択され、残りのすべてのデバイスがSCLおよびSDL回線から切断されます。

ステップ3: マスターから受信した一致したアドレスを持つスレーブデバイスは、マスターへの確認応答で応答し、その後、データバス上のマスターデバイスとスレーブデバイスの両方の間で通信が確立されます。

ステップ4: 通信の読み取りと書き込みのどちらに応じて、マスターとスレーブの両方がデータを送受信します。

ステップ5: 次に、マスターは8ビットのデータをレシーバーに送信できます。レシーバーは1ビットの確認応答で応答します。

I2Cチュートリアル

クロックパルスに関して段階的に情報を送受信することをI2Cプロトコルと呼びます。これは、システム間および短距離プロトコルです。つまり、回路基板内でマスターデバイスとスレーブデバイスを通信するために使用されます。

I2Cプロトコルの基本

一般に、I2Cバスシステムは、ADC、EEROM、RTCなどの入力および出力周辺機能を拡張するために簡単に使用できる2本のワイヤで構成されています。 その他の基本的なコンポーネント 複雑さが非常に少ないシステムを作るため。

例: 8051マイクロコントローラーにはADCが組み込まれていないため、アナログセンサーを8051マイクロコントローラーに接続する場合は、ADC0804-1チャネルADC、ADC0808-8チャネルADCなどのADCデバイスを使用する必要があります。これらのADCを使用すると、アナログセンサーをマイクロコントローラーに接続できます。

プロトコルを使用してマイクロコントローラーやプロセッサーのI / O機能を拡張しなくても、8255 ICit8ピンデバイスにアクセスできます。ザ・ 8051マイクロコントローラーは40ピンマイクロコントローラーです 8255 ICを使用することにより、各ポートに8ピンの3-I / Oポートを拡張できます。 RTC、ADC、EEPROM、タイマーなどのすべてのデバイスを使用して周辺回路を拡張することにより、複雑さ、コスト、消費電力、および製品サイズも増加します。

この問題を克服するために、ハードウェアの複雑さと消費電力を削減するためのプロトコルの概念が登場します。このI2Cプロトコルを使用することで、I / 0ペリフェラル、ADC、T / C、メモリデバイスなどの機能を最大128デバイスまで拡張できます。
I2Cプロトコルで使用される用語

送信機: バスにデータを送信するデバイスは、トランスミッターと呼ばれます。

レシーバー: バスからデータを受信するデバイスは、レシーバーと呼ばれます。

主人: 転送を開始してクロック信号を生成し、転送を終了するデバイスは、マスターと呼ばれます。

スレーブ: マスターによってアドレス指定されたデバイスは、スレーブと呼ばれます。

マルチマスター: 複数のマスターがメッセージを破損せずに同時にバスの制御を試みることができるのは、マルチマスターと呼ばれます。

仲裁: 複数のマスターが同時にバスを制御しようとした場合に、1つだけがバスを制御しようとする場合に、勝者のメッセージが破損しないようにする手順。

同期: 2つ以上のデバイスのクロックシングルを同期する手順は、同期と呼ばれます。

I2C基本コマンドシーケンス

  1. スタートビット条件
  2. ストップビット条件
  3. 謝辞条件
  4. マスターからスレーブへの書き込み操作
  5. マスターへの操作スレーブを読む

スタートビットとストップビットの状態

マスター(マイクロコントローラー)がスレーブデバイス(ADCなど)と通信する場合、I2Cバスで開始条件を発行して通信を開始し、次に停止条件を発行します。 I2Cの開始および停止ロジックレベルを図に示します。

I2C開始条件は、SCLラインがハイである間のSDAラインのハイからローへの遷移として定義されます。 I2C停止状態は、SCLラインがハイのときにSDAラインがローからハイに切り替わるときに発生します。

I2Cマスターは常にSおよびP条件を生成します。 I2CマスターがSTART条件を開始すると、I2cバスはビジー状態であると見なされます。

スタートビットとストップビットの状態

スタートビットとストップビットの状態

プログラミング:

開始条件:

sbit SDA = P1 ^ 7 //マイクロコントローラのSDAピンとSCLピンを初期化します//
sbit SCL = P1 ^ 6
void delay(unsigned int)
void main()
{{
SDA = 1 //データの処理//
SCL = 1 //クロックが高い//
ディレイ()
SDA = 0 //データを送信しました//
ディレイ()
SCL = 0 //クロック信号が低い//
}
ボイド遅延(int p)
{{
unsignedinta、b
For(a = 0a<255a++) //delay function//
For(b = 0b}

停止条件:

void main()
{{
SDA = 0 //データの処理を停止します//
SCL = 1 //クロックが高い//
ディレイ()
SDA = 1 //停止//
ディレイ()
SCL = 0 //クロック信号が低い//
}
ボイド遅延(int p)
{{
unsignedinta、b
For(a = 0a<255a++) //delay function//
For(b = 0b}

確認応答(ACK)および確認応答なし(NCK)の状態

I2Cバスを介して送信される各バイトの後に、レシーバーからの確認応答条件が続きます。つまり、マスターがSCLをローにプルして8ビットの送信を完了した後、SDAはレシーバーによってマスターにローにプルされます。受信機の送信がプルされない場合、SDAラインLOWはNCK状態であると見なされます。

確認(ACK)

確認(ACK)

プログラミング

了承
void main()
{{
SDA = 0 // SDAラインがローになります//
SCL = 1 //クロックはハイからロー//
delay(100)
SCL = 0
}
No Acknowledgement:
void main()
{{
SDA = 1 // SDAラインがハイになります//
SCL = 1 //クロックはハイからロー//
delay(100)
SCL = 0
}

マスターからスレーブへの書き込み操作

I2Cプロトコルは、パケットまたはバイトの形式でデータを転送します。各バイトの後には確認応答ビットが続きます。

データ転送フォーマット

データ転送フォーマット

データ転送フォーマット

開始: 主に、開始条件を生成するマスターによって開始されるデータ転送シーケンス。

7ビットアドレス: その後、マスターは単一の16ビットアドレスではなく、2つの8ビット形式でスレーブアドレスを送信します。

R / W: 読み取りおよび書き込みビットがハイの場合、書き込み操作が実行されます。

ALAS: スレーブデバイスで書き込み操作が実行されると、レシーバは1ビットのACKをマイクロコントローラに送信します。

やめる: スレーブデバイスでの書き込み操作が完了すると、マイクロコントローラは停止条件をスレーブデバイスに送信します。

プログラミング

書き込み操作

voidwrite(unsigned char d)
{{
unsigned char k、j = 0x80
For(k = 0k<8k++)
{{
SDA =(d&j)
J = j >> 1
SCL = 1
delay(4)
SCL = 0
}
SDA = 1
SCL = 1
delay(2)
c = SDA
delay(2)
SCL = 0
}

マスターからスレーブへの読み取り操作

データは、ビットまたはバイトの形式でスレーブデバイスから読み戻されます。最初に最上位ビットを読み取り、最後に最下位ビットを読み取ります。

データ読み取りフォーマット

データ読み取りフォーマット

データ読み取りフォーマット

開始: 主に、データ転送シーケンスは、開始条件を生成するマスターによって開始されます。

7ビットアドレス: その後、マスターは単一の16ビットアドレスではなく、2つの8ビット形式でスレーブアドレスを送信します。

R / W: 読み取りおよび書き込みビットがローの場合、読み取り操作が実行されます。

ALAS: スレーブデバイスで書き込み操作が実行されると、レシーバは1ビットのACKをマイクロコントローラに送信します。

やめる: スレーブデバイスでの書き込み操作が完了すると、マイクロコントローラは停止条件をスレーブデバイスに送信します。

プログラミング

ボイド読み取り()
{{
unsigned char j、z = 0x00、q = 0x80
SDA = 1
for(j = 0j<8j++)
{{
SCL = 1
delay(100)
フラグ= SDA
if(flag == 1)
q)
q = q >> 1
delay(100)
SCL = 0

ADCを8051マイクロコントローラーに接続する実際の例

ADCは、アナログデータをデジタル形式に変換し、デジタルからアナログ形式に変換するために使用されるデバイスです。 8051マイクロコントローラーにはADCが組み込まれていないため、I2Cプロトコルを介して外部から追加する必要があります。 PCF8591はI2Cベースです アナログ-デジタル そしてデジタルからアナログへのコンバーター。このデバイスは、2.5〜6vの電圧とともに最大4つのアナログ入力チャネルをサポートできます。

アナログ出力

アナログ出力は電圧の形で提供されます。たとえば、5vアナログセンサーは0.01vから5vの出力ロジックを提供します。
5vの最大デジタル値は= 256です。
2.5vの値は、最大電圧値に応じて= 123です。

アナログ出力の式は次のとおりです。

デジタル出力の公式:

ADCを8051マイクロコントローラーに接続する

ADCを8051マイクロコントローラーに接続する

上の図は、ADCデバイスから8051マイクロコントローラーへのI2Cプロトコルを使用したデータ転送を示しています。 SCLとSDAのADCピンはマイクロコントローラのピン1.7と1.6に接続され、それらの間の通信を確立します。センサーがADCにアナログ値を与えると、センサーはデジタルに変換し、I2Cプロトコルを介してマイクロコントローラーにデータを転送します。

これは、適切なプログラムを使用したI2Cバスプロトコルのチュートリアルに関するものです。与えられたコンテンツが、I2C通信を使用して複数のデバイスをマイクロコントローラーとインターフェースするという実用的な概念を提供することを願っています。このプロトコルのインターフェース手順に疑問がある場合は、以下にコメントしてください。