UART、SPI、および I2C は、組み込みシステムや IoT デバイスで集積回路、マイクロコントローラー、センサー間でデータを転送するために使用される一般的な通信プロトコルです。
UART (Universal Asynchronous Receiver/Transmitter) は、2 つのデバイス間の全二重非同期通信を可能にするシリアル通信プロトコルです。 UART では、データは単一の通信回線を介して一度に 1 ビットずつ順次送信されます。 UART に必要なワイヤは送信ピン (TX) と受信ピン (RX) の 2 本だけなので、ハードウェアへの実装が簡単です。 UART の主な利点は、デバイス間の同期にクロック信号が必要ないことです。 送信デバイスは、送信される各バイトのフレームにスタート ビットとストップ ビットを追加し、受信デバイスはこれらのビットを使用してバイト境界を識別します。 UART は最大 10 Mbps の高速データ レートを可能にし、エラー チェック機能が組み込まれています。 これは、シリアル コンソール インターフェイス、GPS モジュール、Bluetooth モジュール、およびその他の単純な短距離通信に一般的に使用されます。
SPI (Serial Peripheral Interface) は、全二重通信を提供する同期シリアル プロトコルです。 クロック (SCK)、マスター出力/スレーブ入力 (MOSI)、マスター入力/スレーブ出力 (MISO)、およびスレーブ選択 (SS) の 4 つのワイヤを使用します。 SCK ラインは、MOSI と MISO がデータを伝送する間、デバイス間のデータ移動を同期します。 SS は、複数のスレーブが存在する場合にマスターが特定のスレーブ デバイスを選択するために使用するアクティブ Low 信号です。 SPI では、データは一度に一方向にしか移動できないため、I2C よりも単純なプロトコルになります。 SPI デバイスはマスター モードまたはスレーブ モードで動作します。 最大 80 Mbps の高速データ転送をサポートしており、SD カード、センサー、LCD ディスプレイとの通信によく使用されます。
I2C (Inter-Integrated Circuit) により、集積回路間の双方向半二重同期シリアル通信が可能になります。 必要なのは、シリアル データ (SDA) とシリアル クロック (SCL) の 2 本の双方向ワイヤだけです。 I2C はオープンコレクタ配線を使用します。つまり、SDA ラインと SCL ラインは抵抗でプルアップされます。 I2C バス上のデバイスはマスターまたはスレーブとして機能します。 マスターデバイスはクロック信号を生成し、1 つ以上のスレーブデバイスとのすべての通信を開始します。 各スレーブ デバイスはバス上に固有のアドレスを持っており、これによりマスターはそのスレーブ デバイスに対して特に転送を開始できます。 I2C は、優れた柔軟性を提供するマルチマスターおよびマルチスレーブ通信をサポートします。 最大 100 kbps のデータレートが可能です。 I2C は、センサー、モーター、EEPROM などの低速周辺機器との通信に一般的に使用されます。
要約すると、UART、SPI、および I2C は、速度、サポートされる通信モード、ハードウェアの複雑さ、デバイスの互換性などの要素に基づいて、さまざまなアプリケーションに適した広く使用されているシリアル通信プロトコルです。 UART は実装が最も簡単ですが、SPI や I2C と比較すると低速です。 SPI は高速同期全二重通信を提供しますが、I2C はマルチマスターをサポートしているため、非常に汎用性が高くなります。