組み込みの通信プロトコル - UART、I2C、SPI、DMA

目次

1. コミュニケーションの基本的な考え方

2. USART—シリアルポート通信

3. I2C通信プロトコル

4. SPI通信プロトコル

5、DMA - ダイレクト メモリ アクセス

6. USART/I2C/SPIの比較


1. コミュニケーションの基本的な考え方

1. シリアル通信とパラレル通信(データ伝送方式による)

シリアル通信:少数のデータ信号線(通常は8本未満)、グランド線、制御信号線を介してデータを1ビットずつ送信する通信方式を指します。

パラレル通信:8本、16本、32本、64本以上のデータ線を使用して、複数のデータビットのデータを同時に送信する通信方式を指します。

両者の比較:データ伝送速度が同じ場合、並列通信の方が効率が高く、より多くのデータを送信できますが、シリアル通信の方がコストが節約できます。並列伝送では同期の要求が高く、通信速度の高速化に伴い信号干渉の問題が通信性能に大きく影響します。次のように比較します。

2. 全二重、半二重、単信通信(データ通信方向による)

全二重: 同時に 2 つのデバイスが同時にデータを送受信できます。

半二重: 2 つのデバイス間でデータを送受信できますが、同時には送受信できません。

シンプレックス: 常に一方向の通信のみを実行でき、一方は送信デバイスとして固定され、もう一方は受信デバイスとして固定されます。

3. 同期通信と非同期通信(データ通信の同期モード):クロック信号を使用して区別するかどうか

同期通信: トランシーバー デバイスの双方は信号線を使用してクロック信号を表し、クロック信号の駆動下でデータを調整および同期します。通信では、通常、両者はクロック信号の立ち上がりエッジまたは立ち下がりエッジでデータ ラインをサンプリングすることに同意します。

非同期通信: データ同期にクロック信号を使用せず、データ信号に同期信号ビットを直接挿入するか、メインデータをパックしてデータフレームの形式でデータを送信します。一部の通信では、双方の合意が必要です。同期を向上させるためのデータ転送速度。

両者の比較: 同期通信では、データ信号によって送信されるコンテンツのほとんどは有効なデータですが、非同期通信にはフレームのさまざまな識別子が含まれるため、同期通信の効率が高くなりますが、同期通信では双方のクロックが異なります。許容誤差は小さいですが、非同期通信における双方の時計の許容誤差は比較的大きいです。

4.通信速度:ビットレートとボーレート

ビット レート (Bitrate): 1 秒あたりに送信される 2 進数のビット数 (bit/s)。

ボーレート: 1 秒あたりに送信されるシンボルの数を示します。

 

2. USART—シリアルポート通信

RS232、RS499、RS423、RS422、RS485 インターフェイスの仕様と標準仕様が含まれます。

シリアルポート通信プロトコルの物理層とプロトコル層:

1. 物理層: シリアル通信の物理層には多くの規格とバリエーションがありますが、主なものは RS-232 規格で、一般にデータ信号を直接送信するために使用されるのは RXD、TXD、および GND の 3 つの信号線だけです。

2. プロトコル層: シリアル ポート通信のデータ パケットは、送信デバイスから独自の TXD インターフェイスを介して受信デバイスの RXD インターフェイスに送信されます。シリアルポート通信のプロトコル層では、スタートビット、メインデータ、チェックビット、ストップビットから構成されるデータパケットの内容が規定されており、データを送受信するには通信相手のデータパケットフォーマットに合意する必要があります。通常は。

データ検証:

奇数パリティ: 有効なデータビットとパリティビットの「1」の数が奇数です。

偶数パリティ: 有効なデータビットとパリティビットの「1」の数が偶数です。

3. USART - ユニバーサル同期非同期レシーバーおよびトランスミッター (ユニバーサル同期非同期レシーバーおよびトランスミッター)

RX、TX

シリアル通信: データはフレーム形式、つまりフレームごとに送信され、各フレームには開始信号、データ情報、停止情報、および場合によってはチェック情報が含まれます。

キャラクタ フレーム: キャラクタ フレームの送信には、スタート ビット + データ フレーム + ストップ ビットの 3 つの部分が必要です。スタートビットはビット期間のローレベルであり、ビット期間は各ビットが占める時間です。データフレームは送信したい8ビットまたは9ビットのデータであり、データは下位から送信されます。ビット; ストップ ビットは特定のタイム サイクル ハイになります。

 

3. I2C通信プロトコル

I2C 通信プロトコル (Inter-Integrated Circuit): フィリップスによって開発され、ピン数が少なく、ハードウェア実装が簡単で、拡張性が高く、USART、CAN、その他の通信プロトコルなどの外部トランシーバー デバイスを必要としないため、現在広く使用されています。システム内の複数の集積回路 (IC) 間の通信。

1. 物理層: 双方向シリアルデータライン (SDA)、シリアルクロックライン (SCL)

(1) デバイスをサポートするバスです。「バス」とは、複数のデバイスが共有する信号線を指します。1 つの I2C 通信バスに複数の I2C 通信デバイスを接続して、複数の通信マスタと複数の通信スレーブをサポートできます。
(2) I2C バスは、双方向シリアル データ ライン (SDA) とシリアル クロック ライン (SCL) の 2 つのバス ラインのみを使用します。データ ラインはデータを表すために使用され、クロック ラインはデータの送受信を同期するために使用されます。

(3) バスに接続された各デバイスは独立したアドレスを持ち、ホストはこのアドレスを使用して異なるデバイス間でアクセスできます。
(4) バスはプルアップ抵抗を介して電源に接続されています。I2C デバイスがアイドル状態の場合はハイ インピーダンス状態を出力し、すべてのデバイスがアイドル状態の場合はハイ インピーダンス状態を出力し、プルアップ抵抗がバスをハイ レベルに引き上げます。
(5) 複数のホストが同時にバスを使用する場合、データの競合を防ぐために、どのデバイスがバスを占有するかをアービトレーションによって決定します。

2. プロトコル層:通信の開始信号と停止信号、データの有効性、応答、調停、クロック同期、アドレス ブロードキャストを定義します。

(1) I2Cの基本的な読み書き処理

S:送信開始信号、SLAVE_ADDRESS:スレーブアドレス、R/W:送信方向選択ビット、リード時1、ライト時0
A/A:応答(ACK)または非応答(NACK)信号、P:送信停止信号

通信処理: スタート信号が生成されると、すべてのスレーブは次にマスターからブロードキャストされるスレーブアドレス信号(SLAVE_ADDRESS)の待ちを開始します。I2C バス上では、各デバイスのアドレスは固有であり、ホストからブロードキャストされたアドレスが特定のデバイスのアドレスと同じである場合、そのデバイスが選択され、選択されていないデバイスはそれ以降のデータ信号を無視します。I2C プロトコルによれば、このスレーブ アドレスは 7 ビットまたは 10 ビットになります。アドレスビットの次は送信方向の選択ビットで、このビットが0の場合、次のデータ送信方向がマスタからスレーブ、つまりマスタからスレーブへデータを書き込むことを意味します。このビットが 1 の場合はその逆、つまりマスターがスレーブからデータを読み取ります。スレーブが一致するアドレスを受信すると、マスターまたはスレーブは肯定応答 (ACK) または非肯定応答 (NACK) 信号を返します。マスターは肯定応答信号を受信した後でのみデータの送受信を続けることができます。

データの読み取りと書き込み: I2C 通信は複合フォーマットで使用されることが多く、送信プロセスには 2 つの開始信号 (S) があります。一般に、最初の送信では、ホストが SLAVE_ADDRESS を通じてスレーブ デバイスを見つけた後、「データ」の一部を送信します。これは通常、スレーブ デバイスの内部レジスタまたはメモリ アドレスを表すために使用されます (データと SLAVE_ADDRESS の違いに注意してください) ); 2 回目の送信では、アドレスの内容が読み取られるか、または書き込まれます。1 つ目の通信はスレーブにアドレスの読み書きを指示するもので、2 つ目は実際の読み書きの内容です。

(2) 通信の開始信号と停止信号: 開始信号と停止信号は通常ホストによって生成されます。

開始信号: SCL がハイ、SDA がハイ→ロー。

停止信号: SCL がハイ、SDA がロー→ハイ。

(3) データ有効性:送信時、SCL がハイレベルの場合、SDA で示されるデータが有効です。つまり、SDA がハイレベルの場合はデータ「1」を意味し、ローレベルの場合はデータ「」を意味します。 0」。SCL がローレベルのとき、SDA のデータは無効ですが、通常このとき SDA はレベル切り替えを行い、次のデータ表現に備えます。

3. I2C の機能とアーキテクチャ

ソフトウェア シミュレーション プロトコル: チップの 2 つの GPIO ピンを直接制御し、それぞれ SCL と SDA として使用します。上記の信号のタイミング要件に従って、ピンの出力を直接制御します (データを受信する場合は、SDA レベルを読み取ります)。 、I2C通信を実現できます。GPIO ピンのレベルを直接制御して通信シーケンスを生成する場合、各瞬間のピンの状態を CPU によって制御する必要があります。

ハードウェア プロトコル: STM32 の I2C オンチップ ペリフェラルは、I2C 通信プロトコルの実装を担当します。ペリフェラルが設定されている限り、プロトコル要件に従って通信信号を自動的に生成し、データを送受信し、キャッシュします。CPUデータレジスタはペリフェラルのステータスとアクセスを検出するだけでデータの送受信を完了できます。

 

4. SPI通信プロトコル

SPI (Serial Peripheral Interface): シリアル ペリフェラル インターフェイスは、高速全二重通信バスです。

1. SPI 物理層: 3 つのバスとチップ選択ライン (SCK、MOSI、MISO、チップ選択ラインの合計 4)

(1) チップ選択ライン: スレーブデバイス選択信号線 SPI マスターに複数の SPI スレーブデバイスが接続されている場合、デバイスの他の信号線 SCK、MOSI、MISO は同じ SPI バスに同時に並列に接続されます。スレーブデバイスはすべてこれら 3 つのバスを共通に使用し、各スレーブデバイスは独立した NSS 信号線を持ち、この信号線はホストのピンを独占的に占有します。チップセレクトや信号ラインなどのデバイス。I2C プロトコルでは、バス上のデバイスのアドレス指定、選択、および通信にデバイス アドレスが使用されますが、SPI プロトコルにはデバイス アドレスがなく、NSS 信号線を使用してアドレス指定が行われます。スレーブデバイス、スレーブ デバイスの NSS 信号線が Low レベルに設定されると、スレーブデバイスが選択され、チップセレクトが有効となり、ホストは選択されたスレーブデバイスと SPI 通信を開始します。したがって、SPI 通信は NSS ラインが Low に設定されることで開始され、NSS ラインが High に設定されると終了信号となります。

(3) MOSI (マスター出力、スレーブ入力): マスター出力/スレーブ入力ピン。マスターのデータはこの信号線から出力され、スレーブはマスターからこの信号線を介して送信されたデータを読み取ります。つまり、この信号線のデータの方向はマスターからスレーブです。
(4) MISO (マスター入力、スレーブ出力): マスターデバイス入力/スレーブデバイス出力ピン。ホストはこの信号線からデータを読み取り、スレーブからのデータはこの信号線を介してホストに出力されます。つまり、この信号線上のデータの方向はスレーブからホストへです。

2. プロトコル層: SPI プロトコルは、通信の開始信号と停止信号、データの有効性、クロック同期、その他のリンクを定義します。

SPI通信タイミング:

(1) 通信開始信号と通信停止信号:

スタート信号:NSS 信号線が High から Low に変化し、SPI 通信の開始信号です。NSS は各スレーブの専用信号線であり、スレーブは自身の NSS ライン上のスタート信号を検出すると、マスターに選択されたことを知り、マスターとの通信を開始します。

停止信号:NSS 信号が Low から High に変化し、SPI 通信の停止信号となり、通信が終了しスレーブの選択状態が解除されたことを示します。

(2) データ有効性: SPI は、MOSI および MISO 信号ラインを使用してデータを送信し、SCK 信号ラインをデータ同期に使用します。MOSI および MISO データ ラインは、SCK の各クロック サイクルで 1 ビットのデータを送信し、データの入力と出力は同時に実行されます。MOSI、MISO のデータは SCK の立ち上がりエッジで変化して出力され、SCK の立ち下がりエッジでサンプリングされます。つまり、SCK の立ち下がりエッジ時に MOSI と MISO のデータが有効となり、ハイレベルの場合はデータ "1" を意味し、ローレベルの場合はデータ "0" を意味します。また、データが無効な場合もあり、MOSI と MISO は次のデータ表現の準備をします。各 SPI データ送信は 8 ビットまたは 16 ビット単位で行うことができ、送信ごとのユニット数は制限されません。

 

5、DMA - ダイレクト メモリ アクセス

DMA (Direct Memory Access): シングルチップ マイクロコンピュータの周辺機器です。その主な機能はデータの移動ですが、CPU を占有する必要はありません。つまり、データの転送中に CPU は他のことを実行できます。あたかもマルチスレッドであるかのように。ペリフェラルからメモリへ、またはメモリからメモリへのデータ転送のサポート

1. DMA リクエスト: 周辺機器が DMA 経由でデータを送信したい場合、まず DMA リクエストを DMA コントローラに送信する必要があります。DMA がリクエスト信号を受信した後、コントローラは周辺機器に応答信号を送信します。周辺機器が応答し、DMA コントローラが応答信号を受信すると、送信が完了するまで DMA 送信を開始します。

2. チャネル: DMA には独立してプログラム可能な 12 チャネル、DMA1 には 7 チャネル、DMA2 には 5 チャネルがあり、各チャネルはさまざまな周辺機器からの DMA 要求に対応します。各チャネルは複数のペリフェラル要求を受信できますが、
一度に受信できる要求は 1 つだけであり、複数の要求を同時に受信することはできません。

3. アービタ: 複数の DMA チャネル要求が発生した場合、アービタが処理する応答処理の順序に問題があることを意味します。

4. DMA データ構成: DMA は、ペリフェラルからメモリへ、メモリからペリフェラルへ、メモリからメモリの 3 方向にデータを転送します。

 

6. USART/I2C/SPIの比較

1.通信速度の比較:

SPI > I2C > UART
(1) 同期通信 > 非同期通信
(2) 同期通信では伝送の両端を接続するクロック線が必要
(3) どちらもシリアル通信方式であり、通信にはパラレル通信が使用されますフラッシュなどの内部ストレージ間
(4) 伝送に適した距離は通信速度に反比例します。

2. 接続方式:
SPI:データ線2本、クロック線1本、CS(機器チップセレクトライン)1本、シリアル同期通信全二重、I2C:
データ線1本、クロック線1本、シリアル同期通信半二重、伝送距離が短くなります。 UARTより;
UART: 2データライン、1グランドライン、シリアル非同期通信全二重、伝送距離はI2Cより長い。

(I2C インターフェイスは、ボード内でデータを送信する「
デバイス間」インターフェイスです) (UART は、2 つのデバイス間でデータを送信するためによく使用される「デバイス間」インターフェイスです)

 

 

 

 

 

おすすめ

転載: blog.csdn.net/Healer19/article/details/117401049