SPI、I2C、UART:通信プロトコルとその用途を徹底比較
マイクロコントローラ開発は、電子機器組み立てにおける極めて重要なプロセスです。しかし、シリアルプロトコルと通信インターフェースの存在がこの取り組みを促進します。この記事では、SPI、I2C、UARTインターフェースなどのシリアル通信プロトコルを網羅的に探求します。シリアルプロトコルの特徴、長所、短所、例を分析します。
1. UARTインターフェース
UARTとは

UART(Universal Asynchronous Reception and Transmission:汎用非同期受信送信)は、ホストと補助デバイス間の通信を促進するシリアル通信プロトコルです。主にシリアルデータ伝送を可能にします。さらに、非同期通信と双方向伝送が可能です。
このシンプルなプロトコルは、送信(Tx)を処理するデータラインと、信号受信(Rx)を処理するもう1本の2本のデータラインを備えます。通常、信号送信はデジタルピン0、受信はデジタルピン1を介して行われます。
また、コンピュータと外部シリアルデバイスの管理同期を支援します。
動作原理

本質的に、UARTは以下の手段で2デバイス間の信号通信を管理します。
- シンプレックス
- ハーフデュプレックス
- フルデュプレックス
シンプレックスは単方向データ伝送、ハーフデュプレックスは2デバイス間の非同時双方向通信、フルデュプレックスは双方向同時データ転送を意味します。
一般的に、接続後、送信側UARTのデータラインから受信側UARTへデータ転送が行われます。これは以下の原理で起こります。
- まず、送信側UARTがマスターデバイスの並列データをシリアル形式に変換し、受信側UARTへ転送します。同様に、受信側UARTはシリアルデータを並列データに変換し、接続された受信デバイスで使用可能にします。
- UARTは非同期通信であるため、クロックを持ちません。したがって、UARTはメッセージの開始と終了を示すスタートビットとストップビットを生成します。
- 2つのUARTは同じボーレート(UARTデータ伝送速度)で動作する必要があります。理想的には、データビットの正確なタイミングを保証するためです。10%以上の差異があるとデータが無意味になります。
UART動作プロトコル
データ送信と受信
- 送信側UARTは、CPUなどのデータバスからデータを受信する必要があります。
- 次に、スタートビット、パリティビット、ストップビットの3ビットを追加します。これら3つがデータパケットを形成し、TXピンを介して受信側UARTへ伝送されます。
- 送信側UARTのデータが尽きるとデータ伝送が停止します。
割り込み制御
データ割り込みは、バッファ内容の自動送信に役立ちます。以下のシナリオで割り込み制御を促すことができます。
- まず、FIFO(先入れ先出し)オーバーフローエラー、ラインブレークエラー、フレームエラー、パリティエラーを経験したときに使用します。
- また、データ受信中、送信中、受信タイムアウト中にアクティブ化します。
FIFO動作

StellarisファミリUARTモジュールは、受信用と送信用の2つの16バイトFIFOを備えます。また、さまざまな深度で設定して異なる割り込みを配信できます。たとえば、1/8深度、1/4深度、1/2深度などです。
送信FIFOの動作プロセス
- 主に、データエントリ後にデータ伝送が開始されます。また、時間がかかるため、送信FIFOが満杯になるまでデータエントリは継続されます。
- 満杯になったら、新しいデータがすべて失われるためデータエントリを停止しなければなりません。
- 次に、送信FIFOがビット単位でデータを送信し、空になるまで続きます。最後に、送信FIFOが追加スロットを作成します。
受信FIFOの動作プロセス
- 上記ステップで受信したデータをハードウェアが受信FIFOに格納します。理想的には、受信FIFOプログラムによるデータ受信と消去は自動プロセスです。したがって、受信FIFOには十分なスペースがあります。
- また、CPU非効率問題の解決に不可欠なトランシーバーFIFOを備えます。さらに、頻繁なUARTトランシーバー割り込み問題の解決を支援します。
- 最後に、FIFOは事前にすべての想定される損失経路を封じるため、データ損失がありません。
ループバック
UARTには内部ループバックがあり、デバッグと診断用にRX入力が送信データを受信します。
シリアル赤外線プロトコル
UARTはエンコーダ/デコーダモジュールとして動作するIrDAシリアル赤外線(SIR)を備えます。ハーフデュプレックスシリアルSIRインターフェースと非同期UARTデータストリームの変換に役立ちます。
さらに、シリアル通信プロトコルはデコードされた入力とデジタルエンコードされた出力をUARTに配信します。
UART使用の利点
- シンプルな通信プロトコルは、よく文書化されたモジュールであり、使いやすいです。
- シリアルクロックラインを必要としません。
- パリティビットがあり、エラーチェックを可能にします。
UART使用の欠点
- UARTインターフェースにはデータフレームサイズ制限(9ビット)があり、転送速度が遅いです。
- 複数のマスターシステムとスレーブデバイスの使用不能。
- データ損失から守るため、10%以内のボーレートが義務付けられます。
- 一般的にデバイス間のデータ転送速度が遅いです。
マイクロコントローラでのUART例
- UART Seeeduino V4.2
- USB to UART 5V
- Base Shield V2
- USB CP2102シリアルコンバータ
2. I2Cインターフェース
I2Cとは

I2C(Inter-integrated-circuit:集積回路間通信)通信プロトコルはUARTに似ています。しかし、UARTがPC-デバイス通信向けであるのに対し、I2Cはセンサーとモジュールアプリケーションで有用です。
また、共有バスとアドレスシステムの特性により、複数のデバイスを接続しても通信経路を損なうことなく接続できます。これは双方向2線式同期シリアルバスです。
ただし、この機能はSPIと比較してデバイス間通信が比較的遅くなる代償を伴います。速度は外部ノイズ、配線品質、データ速度に依存します。
最後に、2線式インターフェースにより、EEPROM、A/Dコンバータ、マイクロコントローラなどの低速デバイスへの接続が可能です。
動作原理
I2Cプロトコルは、シリアルデータライン受信ポート(SDA)とシリアルクロックライン(SCL)の2線を備えます。SCLは伝送同期を促進し、SDAはデータビットの送受信用データラインを表します。
転送中、マスターデバイスがバスデータ伝送を促します。同時に、転送デバイスを開くクロックを生成します。このシナリオでは、伝送でアドレス指定されたデバイスがスレーブデバイスです。
注目すべきは、マスターデバイスとスレーブデバイスに一定のデータ伝送レートがないことです。むしろ、伝送時のデータ転送方向に関係が依存します。
また、単一マスターデバイスはデータ伝送開始前にスレーブセレクトデバイスに通知する必要があります。同様に、スレーブからデータを受信する前にもスレーブに通知する必要があります。
また、I2C電源にプルアップ抵抗を接続することが最適な動作のために重要です。
I2C動作プロトコル

データ伝送方法
接続手順は以下の通りです。
- マスター出力が、接続されたスレーブに伝送信号を送信します。主にSDAラインをハイ電圧レベルからローに切り替えることで行います。次に、SCLラインをハイ電圧レベルからローに切り替えます。
- 次に、マスターが7ビットまたは10ビットアドレスと読み書きビットを各スレーブに送信します。
- 3番目に、スレーブがアドレスを自分のものと比較します。一致すればACKビットを返し、SDAラインをローに切り替えます。一致しなければ、スレーブはSDAラインをハイのままにします。
- 次に、マスターがデータフレームを送信または受信します(一致するアドレスに依存)。完全なデータ伝送後、受信側コンポーネントがデータ送信者にACKビットを返します。これは完全な伝送を確認するためです。
- 最後に、マスターがSCLをハイに切り替え、次にSDAを切り替えて通信終了を伝えます。
クロック同期
すべてのマスターはデータ伝送のためにSCLラインで独自のクロック信号を生成しなければなりません。また、クロックのハイ期間中のみI2C伝送でデータが有効です。
伝送モード
主に2つの手段で伝送します。
ファストモード
ファストモードのデバイスは400kbit/sのレートでデータを送受信します。また、ファストモードI2Cバスはグリッチを大幅に抑制でき、出力にはスロープ制御機能があります。
ハイスピードモード
ハイスピードモードのI2Cバスは3.4Mbit/sのビットレートでデータ送受信を行います。したがって、従来のファストモードより高速なデータ伝送レートを備えます。
I2Cの利点
- マスターに多数のデバイスを接続しても、ピン/信号の数が大幅に制限されます。
- マルチマスターとマルチスレーブ機能により柔軟性を提供します。
- 双方向2線のみで多数のデバイスに接続できるためシンプルです。
- 広範な適応性を提供し、複数のマスターもサポートできます。
I2Cの欠点
- 比較的速度が遅く、プルアップ抵抗を使用する必要があります(SPIはプッシュプル抵抗のみ必要)。また、オープンドレイン設計が速度を制限します。
- 抵抗がスペースを占有しますが、これはPCBアセンブリで極めて重要です。
- 多数のデバイスを接続しているときに使いにくいです。
マイクロコントローラでのI2C例
- Raspberry Piの4チャネル16ビットADC
- I2Cハブ(6ポート)- Grove
- I2Cドライバー/アダプター
- I2C Arduino
3. SPIインターフェース
SPIとは

SPI(Serial Peripheral Interface:シリアルペリフェラルインターフェース)はマイクロコントローラでの使用向けに指定されています。また、フルデュプレックスで機能するため、データの同時送受信が可能です。
SPIはI2Cより比較的高速で、最低8ビットのデータ伝送レートを持ちます。主に、このモジュールのシンプルなプロトコルがより高速なデータレートを可能にします。したがって、ディスプレイモジュールやSDカードなど速度を必要とするアプリケーションで重要です。
また、情報の突然の変更を伴うアプリケーション(温度計など)でも必須です。
動作原理

SPI形式のデバイスは、以下の2つの方法のいずれかで動作します。
- まず、チップセレクトラインでデバイスを選択します。各デバイスには固有のチップセレクトラインが必要です。
- あるいは、デイジーチェーン方式でも機能します。
SPIインターフェースでは望むだけ多くのデバイスを接続できます。しかし、ほとんどの場合、利用可能なハードウェアセレクトラインによって制限されます。最後に、ポイントツーポイント通信では、モジュールはアドレス操作を必要としません。
SPI動作プロトコル
SPIは以下の4ポートで機能します。
- マスターデータ出力、スレーブデータ入力(MOSI)
- マスターデータ入力、スレーブデータ出力(MISO)
- クロック信号(SCLK)
- スレーブイネーブル信号(NSS)
マルチスレーブシステムを使用する場合、各スレーブは固有のイネーブル信号を要求します。この要件は、I2C通信と比較してハードウェア要件を複雑にします。
また、SPIインターフェースは2つのシフトレジスタを備えます。単一マスターデバイス(CPUなど)からペリフェラルデバイスへの同期シリアルデータ伝送を可能にします。
SPI使用の利点
- I2Cのような複雑なスレーブアドレッシングシステムがないためシンプルに使用できます。
- カバーしたすべてのシリアルインターフェースの中で最速のプロトコル(UARTとI2Cより高速)です。
- UART通信のようなスタートビットとストップビットがないため、中断のない連続データ伝送が可能です。
- 別個のMISOとMOSIラインを備え、データの同時送受信を可能にします。
SPI使用の欠点
- ほとんどのピンポートを占有するため、接続できるデバイス数が制限されます。
- 指定されたフロー制御がなく、I2Cのようなデータ送受信確認メカニズムがありません。
- 上記の通り4線を必要とし、UARTのようなエラーチェック機構がありません。
- シングルマスターのみです。
マイクロコントローラでのSPI例
- SPI Seeeduino V4.2
- SPIドライバー/アダプター - SPIデバイスを簡単にドライブ
UART、I2C、SPIの比較

これらの通信ペリフェラルの中で「最高」はどれ? UART、SPI、それともI2C?
3つのうち優れた通信ペリフェラルはありません。それぞれに主要な長所と短所があるためです。したがって、プロジェクトに応じて最適なプロトコルを選択してください。たとえば、速度を求めるならSPIが最適です。
しかし、複雑なアレイなしで多数のデバイスを接続したいなら、I2Cを選びましょう。
結論
UART、I2C、SPI通信インターフェースとそれらのさまざまな伝送レートについて知っておくべき重要な洞察をすべて明らかにしました。また、通信プロトコルに関するご質問にもお答えします。お問い合わせください。すぐにサポートいたします。
産業技術
- Raspberry Pi必須ブレイクアウトボード:I2C、UART、GPIOなど – キット、ヘッダー、保護機能
- データフローの理解:シンプレックスからフルデュプレックス通信まで
- ネットワークプロトコルの理解:物理層から高度なアービトレーションまで
- デジタルメモリの基礎:アドレッシング、アクセス、揮発性
- 革新的ナノテク応用14選:医療から材料まで
- 銀ロウ付け(銀ろう接)とは?プロセス、材料、用途を徹底解説
- 生産効率を解き放つ:実証済みデータドリブン製造戦略
- データ取り込みを効率化し、より賢い意思決定を推進
- 木材の種類と実用的な用途:建築から製紙まで
- タングステン:過去の用途と現代のイノベーション
- MQTT vs DDS:IoT向け最適なM2Mプロトコルの選択