このページの目次

シリアルバスプロトコル

パラレル vs シリアル

パラレル: 複数の線で複数のビットを同時に送信 (1回に8/16/32ビット)
      高速だが、配線が多く、クロックスキューが速度を制限

シリアル: 1本の線でビットを順次送信
      配線が少なく、より高い周波数で動作可能 → 現代の高速インターフェースはすべてシリアル

UART (ユニバーサル非同期送受信)

基本概念

UART: 非同期フルデュプレックス、送信側と受信側のボーレートは一致させる必要があります 接続: TXとRXをクロス接続 (フルデュプレックスで同時送受信) MCU_A MCU_B TX → RX RX ← TX フレーム形式: 1フレームのデータタイミング構造 アイドル (High) Start=0 D0 D1 D2 D3 D4 D5 D6 D7 パリティ?(オプション) Stop=1 ボーレート(9600 / 115200 / 921600…)は両者で一致させ、誤差は ±2% 以内に抑える必要があります。 独立したクロック線を持たない非同期通信のため、双方が合意したボーレートに基づいて各ビットを同期します。

パラメータ

パラメータ一般的な値
ボーレート9600, 19200, 38400, 57600, 115200
データビット8 (最も一般的), 7
ストップビット1, 2
パリティビットNone, Even, Odd
フロー制御None, RTS/CTS (ハードウェア)

応用

デバッグ用シリアル (printf 出力をPCへ)
GPS/Bluetooth モジュール (AT コマンド)
レガシー周辺機器との通信

利点: シンプル、安価、信頼性が高い
欠点: 1対1のみ、低速、標準的なアプリケーション層がない

I2C (Inter-Integrated Circuit)

基本概念

同期、ハーフデュプレックス、マルチマスター・マルチスレーブ
2本の線: SCL (クロック) + SDA (データ)

    Vcc
     │
    Rp  Rp          ← プルアップ抵抗 (必須!)
     │   │
     ├───┼────────── SDA
     │   │
    ┌┴┐ ┌┴┐
    │マスター│ │スレーブ1│ │スレーブ2│ ...
    └─┘ └─┬┘ └─┬┘
          │    │
          ├────┼──── SCL
          │    │
         GND  GND

SCL: マスターがクロックを供給
SDA: 双方向データ (オープンドレイン、ワイヤードAND)
各スレーブには一意の 7bit (または 10bit) アドレスがある

通信プロセス

スタートコンディション: SCL が High の間に SDA が Low に遷移
  送信: 7bitアドレス + R/W bit → スレーブが ACK で応答
  転送: 8bitデータ + ACK ...  (連続して可能)
ストップコンディション: SCL が High の間に SDA が High に遷移

ACK: 9番目のクロックで SDA=0 (受信側が確認)
NACK: 9番目のクロックで SDA=1 (応答なし)

速度モード:
  Standard: 100 kHz
  Fast:     400 kHz  (最も一般的)
  Fast+:    1 MHz
  High Speed: 3.4 MHz

応用

センサー (温度/湿度/IMU/照度...)
EEPROM/FRAM メモリ
RTC (リアルタイムクロック)
PMIC (電源管理)
OLED ディスプレイ
ほぼすべての低速周辺機器

利点: 2本の線で済み、複数デバイスで共有可能
欠点: 速度が遅い、プルアップ設計が必要で消費電力が大きくなる、アドレス競合の可能性

プルアップ抵抗の選択

R が小さすぎる → 消費電力が大きい (シンク電流が大きい)
R が大きすぎる → 立ち上がりエッジが遅すぎる → 速度が制限される

経験則:
  100kHz: 4.7kΩ
  400kHz: 2.2kΩ
  1MHz:   1kΩ またはそれ以下

計算: Rmax = tr / (0.8473 × Cbus)
     tr = 300ns (100kHz モード)
     Cbus = バス容量 (チップ + PCB配線)

SPI (Serial Peripheral Interface)

基本概念

SPI: 同期フルデュプレックス、マスターがクロックとチップセレクトを独占 (最低4本の線) MCU (マスター) 周辺機器 (スレーブ) SCK · クロック (マスター→スレーブ) MOSI · マスター送信、スレーブ受信 MISO · スレーブ送信、マスター受信 CSn · チップセレクト (スレーブごとに1本) スレーブが複数の場合の接続方法: 2つの方式 独立 CSn: 各スレーブに1本のチップセレクト線、SCK/MOSI/MISO は共有 ジャイアントチェーン: スレーブの MISO → 次のスレーブの MOSI に直列接続、CSn は1本共用 マスターがクロックとチップセレクトを独占; アドレス機構はなく、CSn でスレーブを識別。

クロックモード (CPOL, CPHA)

CPOL=0: SCK はアイドル時に Low
CPOL=1: SCK はアイドル時に High
CPHA=0: 最初のエッジでサンプリング
CPHA=1: 2番目のエッジでサンプリング

最も一般的: Mode 0 (CPOL=0, CPHA=0) と Mode 3 (CPOL=1, CPHA=1)

双方で一致させる必要があります! そうしないと通信が破綻します。

特徴

利点:
  ✓ フルデュプレックス (同時送受信)
  ✓ 高速 (数十 MHz、場合によっては 100MHz+)
  ✓ アドレス機構がない → オーバーヘッドなし
  ✓ 柔軟 (任意のフレーム長)

欠点:
  ✗ 配線が多い (スレーブ n 個に対して n+3 本)
  ✗ 標準的なプロトコル層がない (物理層/リンク層のみ定義)
  ✗ スレーブ側のフロー制御 (ACK) がない
  ✗ 距離が短い (PCB レベル)

応用: Flash (NOR/NAND), ADC/DAC, ディスプレイ, 以太网 PHY

3つのバスの比較

特性UARTI2CSPI
線数2 (TX+RX)2 (SCL+SDA)4 (SCK+MOSI+MISO+CS)
通信方式非同期同期同期
デュプレックスフルデュプレックスハーフデュプレックスフルデュプレックス
速度< 1Mbps< 3.4Mbps数十 Mbps
マルチスレーブなしあり (アドレス)あり (CSn)
距離長い (RS-232)PCB/短距離PCB
複雑さ最も簡単中程度比較的簡単
フロー制御なし/ハードウェアACK/NACKなし
典型的な用途デバッグ/無線モジュールセンサーFlash/ディスプレイ/高速

速查: どのプロトコルを選ぶべきか

センサー読み取り (低速、多数のデバイス) → I2C
高速データ転送 (Flash/SD/ディスプレイ) → SPI
デバッグ情報、無線モジュール → UART
複数バイトレジスタの読み書き → I2C (アドレス+データ) または SPI
バッテリー駆動 (最低消費電力) → I2C (静止状態でほぼゼロ消費)
耐ノイズ性 (長距離差分) → RS-485 (UART の物理層バリアント)

キーワード: UART, I2C, SPI, ボーレート, SCL, SDA, MOSI, MISO, CS, プルアップ抵抗, ACK