I2C・SPI・UARTの違い:配線・速度・使い分けを比較
この3つは、組み込みの開発で最初に出会うシリアル通信です。UARTは、共通のクロックがない、1対1のシンプルな通信です。SPIは4本の線を使う高速なバスで、マスターがチップセレクトの線で相手を選びます。I2Cは2本の線を多くのデバイスで共有し、アドレスで相手を選びます。使い分けの軸は、主に速度(SPI)、ピン数(I2C)、簡単さ(UART)です。
| 項目 | UART | SPI | I2C |
|---|---|---|---|
| 配線 | 信号線2本(TXとRX)とグランド | 信号線4本(SCLK、MOSI、MISO)に加えて、デバイスごとにチップセレクト(CS)1本 | 共有の2本(SDAとSCL)とグランド。プルアップ抵抗が必要 |
| クロック | 非同期。クロック線がなく、双方でボーレートを合わせる | 同期。マスターがクロックを出す | 同期。マスターがクロックを出す |
| 接続形態 | 2つのデバイスの1対1 | マスター1つとスレーブ複数。スレーブごとにCS線が必要 | マスターもスレーブも複数で、1本のバスを共有する |
| アドレス | なし | チップセレクトの線で相手を選ぶ | 通信の最初に7ビット(10ビットも可)のアドレスを送る |
| 一般的な速度 | 9,600〜115,200 bit/sから、数Mbit/sまで | 1〜50 MHzのことが多く、それ以上の部品もある | 100 kHz(標準)、400 kHz(高速)、1 MHz(ファストモードプラス)、3.4 MHz(ハイスピード) |
| 通信方向 | 全二重 | 全二重 | 半二重 |
| 誤り検出 | パリティビットとフレーミングの確認(任意) | 仕組みとしては持たない | 1バイトごとにACK/NACKを返す |
| デバイスが増えたときのピン数 | 通信相手が増えるごとに2本増える | デバイスが増えるごとにCSが1本増える | 増えない |
| 距離 | RS-232やRS-485のドライバを使えば長くできる | 短い。同じ基板上 | 短い。同じ基板上 |
| 主な用途 | デバッグ用のコンソール、GPSやBluetoothのモジュール、基板間の接続 | フラッシュメモリ、SDカード、ディスプレイ、高速なADCやセンサー | 低速のセンサー、EEPROM、リアルタイムクロック、チップの設定 |
数値は代表的な目安で、世代や製品によって異なります。