変更要約: 初版
4.4シリアル通信インタフェース
2線で複数デバイスを接続するI2C、高速全二重のSPI、調歩同期のUART、車載向け差動信号のCANという4大シリアル通信方式の電気的・プロトコル的特性を比較し、要件に応じて最適なインタフェースを選ぶ判断力を養います。
組込み機器の基板設計では、「センサとMCUをどう繋ぐか」という問いに複数の正解候補(I2C・SPI・UART・CAN)が存在し、配線数・速度・接続デバイス数・ノイズ耐性・コストという要件次第で最適解が変わります。この節では、4大シリアル通信方式それぞれの電気的・プロトコル的な特性の違いを踏まえ、この要件ならどのインタフェースを選ぶかを判断する視点を養います。
4.4.1I2CとSPI
- I2C(Inter-Integrated Circuit)=SDA(データ)とSCL(クロック)の2線のみで、マスタが複数のスレーブと通信できるバス型シリアル通信。各スレーブは固有の7ビット(または10ビット)アドレスを持ち、マスタがアドレスを指定して通信相手を選ぶため、配線数を増やさずに多数のデバイスを接続できるのが最大の利点。ただし転送速度は標準100kbps・高速400kbps程度とSPIに比べて低速で、オープンドレイン出力のためプルアップ抵抗が必須。
- SPI(Serial Peripheral Interface)=SCLK(クロック)・MOSI(マスタ→スレーブ)・MISO(スレーブ→マスタ)・SS/CS(チップセレクト)の4線(スレーブごとにSSが1本ずつ必要)で通信し、送信と受信を同時に行える全二重通信。クロックをマスタが供給し続けアドレス指定の仕組みもないため、I2Cよりはるかに高速(数Mbps〜数十Mbps)だが、スレーブが増えるほどSS配線が増えるため多数デバイス接続には向かない。
4.4.2UARTとCAN
- UART(Universal Asynchronous Receiver/Transmitter)=TX(送信)・RX(受信)の2線で1対1通信を行う調歩同期(非同期)方式。クロック線を共有せず、送受信側が事前に合意したボーレートでスタートビット/データビット/(パリティビット)/ストップビットの並びを解釈するため、接続機器を追加しやすい反面、多数デバイスを1本のバスで束ねるバス型接続には不向き(1対1が基本)。デバッグ用コンソールやPCとの単純な通信に広く使われる。
- CAN(Controller Area Network)=CAN_H/CAN_Lの差動信号2線でバス型通信を行う、車載・産業機器向けの規格。差動信号のため外来ノイズに強く、長距離・電気的にノイズの多い環境(エンジンルーム等)でも高い信頼性を持つ。メッセージにIDを付与し優先度の高いID(値の小さいID)が調停で勝つ仕組みを持ち、複数ノードが同時送信してもデータが壊れずに優先度の高い方が通信を継続できる(CSMA/CR:非破壊型調停)。
「I2C=2線・多デバイス・低速・プルアップ必須」「SPI=4線(SS別)・全二重・高速・多デバイスに不向き」「UART=2線・調歩同期・1対1」「CAN=差動2線・ノイズ耐性・ID調停で優先度制御」の4者の使い分けが最頻出です。「配線数が少ない=優れている」ではなく速度・デバイス数・ノイズ耐性の要件から逆算して選ぶ視点が問われます。
4.4.3用途別のインタフェース選択
- 多数のセンサ(温度・加速度・光など)を基板内の短距離で束ねたい場合は、配線数を増やさずアドレス指定で多数デバイスを識別できるI2Cが第一候補。高速なデータ転送(フラッシュメモリ・ディスプレイ・ADC等)が必要な場合は、クロック同期の全二重通信で高速なSPIが適する。
- 基板外の機器やPCと単純に1対1で通信したい場合はUARTが手軽。車載ネットワークや工場のノイズの多い環境で複数のECU/センサノードを高信頼にバス接続したい場合はCANが適する。LIN(CANより低コスト・低速な車載サブネットワーク規格)はCANほどの信頼性・速度が不要な補助系統向けという位置づけも押さえておく。
ある組込みシステムアーキテクトが、産業用ロボットの制御ボードで、基板上の温度センサ8個・加速度センサ4個(合計12個の低速デバイス)と、高速フレームレートで画像を取り込むカメラモジュール、そしてロボットアーム各関節のモータ制御ECU同士を長距離・高ノイズ環境で接続する通信という3つの異なる要件に直面しているとします。まず12個のセンサについては、SPIを使うと12本のSS配線が必要になり基板が煩雑化するため却下し、アドレス指定で多数デバイスを識別できるI2C(2線のみ)を採用します(速度要件が低速で十分なため速度面の弱点は問題にならない)。次にカメラモジュールは、大量の画素データを高速転送する必要があるため、I2Cでは速度が全く足りず、クロック同期の全二重通信で高速なSPIを採用します(カメラは1個のみなのでSS配線増加という弱点も顕在化しません)。最後にモータ制御ECU間の通信は、アームの可動により配線が長くなり、モータ駆動由来の電気ノイズも多い環境であるため、シングルエンド信号のI2C/SPI/UARTでは誤り耐性が不足すると判断し、差動信号でノイズに強くID調停による優先度制御も持つCANを採用します。ここでの設計上の要点は、「1つの通信方式で全要件を賄おうとしない」ことです——低速多デバイス(I2C)・高速少デバイス(SPI)・長距離高ノイズ(CAN)という異なる要件には異なるインタフェースを使い分けるのが正しい設計判断であり、配線を統一したいという理由だけでI2Cにカメラを繋いだり、SPIで長距離ノイズ環境のECU間通信をしたりすると、それぞれ速度不足・信号劣化による通信エラーという致命的な問題を招きます。
| 方式 | 配線数 | 速度 | 多デバイス接続 | ノイズ耐性 |
|---|---|---|---|---|
| I2C | 2線 | 低速(〜400kbps程度) | 得意(アドレス指定) | 低い(シングルエンド) |
| SPI | 4線+SSごと | 高速(数Mbps〜) | 不得意(配線増加) | 低い(シングルエンド) |
| UART | 2線 | 中低速・調歩同期 | 基本1対1 | 低い(シングルエンド) |
| CAN | 2線(差動) | 中速・ID調停 | 得意(バス型) | 高い(差動信号) |
ひっかけ: 「配線数が少ないI2CはSPIより常に優れたインタフェースである」は誤りです——I2Cは低速でシングルエンド信号のためノイズ耐性も低く、高速転送や高ノイズ環境にはSPIやCANの方が適します。また「UARTはバス型で多数デバイスを接続できる」も誤り=UARTは基本的に1対1の調歩同期通信であり、多数デバイスを1本のバスで束ねるならI2CやCANが適切です。
4.4.4この節のまとめ
- I2Cは2線で多デバイス(アドレス指定)だが低速、SPIは4線+SS別で全二重・高速だが多デバイス接続に不向き
- UARTは2線の調歩同期で基本1対1、CANは差動信号でノイズ耐性が高くID調停で優先度制御
- インタフェース選択は速度・デバイス数・ノイズ耐性の要件から逆算する——配線数の少なさだけで優劣を決めない
進捗の記録にはログインが必要です。
理解度チェック
(軽い確認用)Q1. 基板内に温度・加速度など低速な用途のセンサを12個接続したい。配線数を極力増やさずアドレス指定で各センサを識別したい場合、最も適したインタフェースはどれか。
Q2. ロボットアームの関節間で、配線が長くなり電気的ノイズも多い環境で複数のモータ制御ECUを高信頼にバス接続したい。最も適したインタフェースはどれか。
Q3. 大量の画素データを高フレームレートで転送する必要があるカメラモジュールをMCUに接続したい。最も適したインタフェースはどれか。

