Instiq
第4章 · ハードウェアとインタフェース·v1.0.0·更新 2026/7/10·読了目安 約16分

変更要約: 初版

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間通信をしたりすると、それぞれ速度不足・信号劣化による通信エラーという致命的な問題を招きます。

方式配線数速度多デバイス接続ノイズ耐性
I2C2線低速(〜400kbps程度)得意(アドレス指定)低い(シングルエンド)
SPI4線+SSごと高速(数Mbps〜)不得意(配線増加)低い(シングルエンド)
UART2線中低速・調歩同期基本1対1低い(シングルエンド)
CAN2線(差動)中速・ID調停得意(バス型)高い(差動信号)
注意

ひっかけ: 「配線数が少ないI2CはSPIより常に優れたインタフェースである」は誤りです——I2Cは低速でシングルエンド信号のためノイズ耐性も低く、高速転送や高ノイズ環境にはSPIやCANの方が適します。また「UARTはバス型で多数デバイスを接続できる」も誤り=UARTは基本的に1対1の調歩同期通信であり、多数デバイスを1本のバスで束ねるならI2CやCANが適切です。

I2C/SPI/UART/CANの図。
用途で選ぶバス

4.4.4この節のまとめ

  • I2Cは2線で多デバイス(アドレス指定)だが低速、SPIは4線+SS別で全二重・高速だが多デバイス接続に不向き
  • UARTは2線の調歩同期で基本1対1、CANは差動信号でノイズ耐性が高くID調停で優先度制御
  • インタフェース選択は速度・デバイス数・ノイズ耐性の要件から逆算する——配線数の少なさだけで優劣を決めない

進捗の記録にはログインが必要です。

理解度チェック

(軽い確認用)

Q1. 基板内に温度・加速度など低速な用途のセンサを12個接続したい。配線数を極力増やさずアドレス指定で各センサを識別したい場合、最も適したインタフェースはどれか。

Q2. ロボットアームの関節間で、配線が長くなり電気的ノイズも多い環境で複数のモータ制御ECUを高信頼にバス接続したい。最も適したインタフェースはどれか。

Q3. 大量の画素データを高フレームレートで転送する必要があるカメラモジュールをMCUに接続したい。最も適したインタフェースはどれか。

理解度を確認第4章「ハードウェアとインタフェース」の問題を解く

学習の記録を残しませんか

参考書はすべて無料で読めます。無料登録すると、問題集での演習・既読と進捗の記録・間違えた問題の復習・ハイライトが使えます。