SPI、I2c、UARTプロトコルの違いを学びます。それぞれに異なる長所とトレードオフがあり、特定の状況に適しています。
Jeremy Cook著
多くの場合、エンジニアは短距離デバイス通信にSPI、UART、およびI2Cを採用しています。これらのプロトコルはすべて何十年も使用されてきましたが、SPIとI2C、UARTとSPI、またはその他の組み合わせの利点は完全には単純ではありません。それぞれに長所とトレードオフがあります。この記事では、それぞれの仕組みと、どの部分がプロジェクトのニーズに他よりも適しているかを簡単に説明します。
UART – ユニバーサル非同期送受信機
UARTはコンピューティング開発の初期段階で実装され、その起源は電信にまで遡ります。マシン間通信に関しては、 UART は「アルファ プロトコル」と考えることができます。最新の実装では、パラレル データをUARTチップに渡すことができます。チップは、この入力をシリアル データに変換し、単一の送信 (Tx) ラインを介して送信します。単一の受信 (Rx) ラインにより、別のUARTデバイスからのデータ受信が可能になります。データ伝送は、単方向(一方向)、半二重(一度に一方向)、全二重(同時に両方向)のいずれかで行われ、2つのデバイス間で行われます。
UARTの配線は簡単で、RxとTxの接続のみが必要です。速度は設定によって異なりますが、両方のデバイス間で調整する必要があります。クロック信号はありません。115200ボーが標準ですが、他の速度も使用できます。このプロトコルは、プログラムに実装されることが多い。 マイクロコントローラ。
I2C – インターインテグレーテッドサーキット
フィリップスセミコンダクター(現在は NXP)1982年、 I2C マイクロコントローラと 周辺機器。データは、半二重モードで2本のワイヤ (SDA - シリアル データとSCL - シリアル クロック) で構成されるバスを介して転送されます。通常、1つのマスター デバイスを使用して、1つ以上のスレーブ デバイスに信号を送信します。それぞれに固有のアドレスがあり、同じバスを共有できます。マルチマスターシステムも可能ですが、あまり一般的ではありません。
I2C配線は簡単です。マスター デバイスとスレーブ デバイス間では、1つの共通SDA共通SCLラインのみを実行する必要があります。一般的な7ビットのアドレス指定方式では、最大128個の個別のエンティティを制御できます。プルアップ 抵抗器 SDAおよびSCLライン用のものも実装される場合があります。
このバス テクノロジは通常、UARTよりも高速です。標準速度は100kbit/sから、超高速モードでは5Mbit/sまでになります。ただし、半二重動作のみが使用可能であり、一度にアドレス指定できるスレーブは1つだけです。
SPI – シリアル ペリフェラル インターフェース
SPI 1980年代半ばにモトローラによって通信規格として開発され、現在はデバイス間のデータ転送に広く使用されています。単一のマスターデバイスは、1つ以上のスレーブからデータを送受信することができ、 データ転送速度 使用されるデバイスによって異なります。
SPIは配線の面でも最も複雑で、シリアル クロック出力 (SCLK)、マスター出力スレーブ入力 (MOSI)、マスター入力スレーブ出力 (MISO)、およびチップ選択/スレーブ選択用のCS/SS用のマスター デバイスからのラインが必要です。すべてのスレーブ デバイスにCS/SSラインが必要になります。したがって、1つのマスター デバイスが3つの周辺機器を制御する場合は、この目的のために6つのIOラインを割り当てる必要があります。
一般的に、SPIはこれら3つのプロトコルの中で最も高速です。独立したMOSIおよびMISOラインにより、全二重動作で同時に送信と受信を行うことができます。SPIは、周辺機器の速度が重要な場合には最適な選択肢となることが多い。例えばSDカードの場合など。 カードリーダー、またはすぐに更新される表示。
I2C vs. SPI vs. UART – 選択すべき適切なプロトコルはどれですか?
UARTの実績のある動作、I2Cの非常に拡張可能な性質、SPIの高速動作など、これらのプロトコルのいずれかが状況に最も適しています。ただし、多くの周辺機器はこれらのプロトコルの1つだけを使用して通信できるため、選択は使用する周辺機器によって決まることがよくあります。