Cortex-A7 コア IIC 実験 -- STM32MP157AAA

実験の目的:温湿度センサーの値を収集する

1. IICの概念

1.同期シリアル半二重バスは、主に回路全体をリンクするために使用され、ハードウェア構造が単純で、インターフェイス接続が便利で、コストが低いです

2. 2 線式、双方向信号線は 2 本のみ、データ線 SDA、クロック線 SCL

3. IIC 伝送速度: 1) 低速: 100k、2) 400k、フルスピード: 3.4M

4. バスの外部には 2 つのプルアップ抵抗があります。バスがアイドル状態の場合、デフォルトではハイ レベル状態になります。

2. ハードウェア接続

1. マルチマスターおよびマルチスレーブモードをサポートしますが、同時に通信できるのは 1 つのマスターと 1 つのスレーブのみであり、ほとんどの場合はシングルマスターおよびマルチスレーブモードを使用します。

2. IIC バスに接続された各スレーブ デバイスは、独自の 7 ビット スレーブ アドレスを持ちます。

3. データ送信 ---- 送信者、データ受信 ---- 受信者

 データをアクティブに開始 ----マスター、データを受動的に受信 ----スレーブ

4. クロック信号はマスターによって生成され、スレーブに作用してデータの送受信の同期を完了します。

3. 内部ブロック図

 

4、タイミング

1. バスタイミング、タイミングスプライシングはプロトコルです

2. SCL ハイレベル、開始信号と停止信号を送信できます

SCL ローレベル、データ送信信号を送信可能

3. 8 データビットを送信した後、応答ビットを送信する必要があり、終了信号は応答後にのみ送信できます。

4. スレーブアドレスはスタート信号の後に書き込む必要があるため、

1. スタート信号

1. 開始信号と停止信号は両方ともホストによって生成されます。

2. 開始信号が生成された後、バスがデータの送信を開始することを意味します

3. スタート信号: SCL が High レベルの間、データラインが High から Low (立ち下がりエッジ) に変化します。

4. スタート信号発生後、バスは占有状態になります。

2. 停止信号

1. ストップ信号発生後、バス送信データの終了を意味します

2. 停止信号: SCL が High レベルの間、データ ラインが Low から High (立ち上がりエッジ) に変化します。

3. ストップ信号発生後、バスはアイドル状態になります。

3. データ送信信号

SCL が Low の場合、データ ライン上のデータの変更が許可され、トランスミッタはデータ ラインにデータを書き込みます。

SCL がハイ レベルの間、データ ライン上のデータは安定した状態を維持する必要があり、変更は許可されず、レシーバーはデータ ラインからデータを読み取ります。

4. 応答信号

画像が破損しています:<

1. 送信データごとに 8 ビットの長さを保証する必要があります ==> 最初に上位ビットを送信し、次に下位ビットを送信します

2. 8 データ ビットが送信されるごとに、応答ビットが存在する必要があります。データの 1 フレーム = 8 データ ビット + 1 応答ビット = 9 ビット

3. 送信側は 8 ビットのデータをデータ線に書き込み、受信側は 9 クロックサイクルで応答信号/非応答信号をデータ線に書き込みます。

トランスミッタは、9 番目のクロック サイクルでデータ ラインからデータを読み取ります。

        読み取り 0: 受信機は確認信号を返します。

        読み取り 1: 受信機が非確認信号を返しました。

5. 信号のアドレス指定

1. IIC バスは広義のデータ伝送であり、8 ビットのデータまたは 7 ビットのスレーブアドレス + リード/ライトビットを伝送できます。

2. 書き込みビットは 0 で表され、読み取りビットは 1 で表されます。

3. バスからのデータの読み取り: 7 ビットのスレーブ アドレス + 読み取り (1)

4. バスへのデータの書き込み: 7 ビットのスレーブ アドレス + 書き込み (0)

5. これらの 8 ビットがアドレス指定プロセスを表すように、スレーブ アドレスは開始信号の後に書き込む必要があります。

五、IIC協定

1. マスターはスレーブにバイトを送信します

2. マスターは複数のバイトをスレーブに送信します

3. スレーブはマスターにバイトを送信します

4. スレーブはマスターにバイトを送信します

 6、si7006チップを分析する

1. si7006 スレーブアドレス ===> 0x40

2. si7006の内部ブロック図

3. チップの初期化方法(アドレス/値) ===> 0xE6 0x3A

4. 温度と湿度のアドレスの収集方法

5. si7006 チップのマニュアルの取得プロトコルを検索します。

6. データをアナログに変換する方法 ===> 式

1. 内部ブロック図

  

 2. スレーブアドレス

:0x40 

スレーブアドレス + 読み取り: 0x40 << 1 | 1

スレーブアドレス + 書き込み: 0x40 << 1 | 0

3. 温湿度コマンドコードを読み取る

画像が破損しています:<

 相対湿度を測定し、ホストモードを維持します: 0xE5

 相対湿度を測定します。ホスト モードは維持しません: 0xF5

 相対温度を測定し、ホストモードを維持します: 0xE3

 相対温度を測定します。ホスト モードは維持しません: 0xF3

以前に測定した湿度から、温度値を読み取ります: 0xE0

ユーザーレジスタ1の書き込み: 0xE6

ユーザーレジスタ 1 の読み取り: 0xE7

七、スタートの合図

スタート信号===スレーブアドレス+ライト===ACK===コマンドコード===ACK===スタート信号===スレーブアドレス+リード===ACK===遅延機能== ===== ==== 上位 8 ビット === ACK === 8 ビット NACK === 停止信号

八、換算式

測定値はアナログ値であるため、ADCを使用してデジタル値に変換する必要があります

湿度換算式 H = %RH - 125*RH_Code / 65536 -6

温度換算式 T = 175.72*Temp_Code / 65536 - 46.85 

9、初期化値

レジスタ初期化値: 0011 1010 ====== 0x3A

 [7][0] == 00: 測定精度

[6] == 0: 電源ステータス: 0 = 高レベル、1 = 低レベル

おすすめ

転載: blog.csdn.net/MaGuangming001/article/details/132482661