シリアルバスプロトコル
パラレル vs シリアル
パラレル: 複数の線で複数のビットを同時に送信 (1回に8/16/32ビット)
高速だが、配線が多く、クロックスキューが速度を制限
シリアル: 1本の線でビットを順次送信
配線が少なく、より高い周波数で動作可能 → 現代の高速インターフェースはすべてシリアル
UART (ユニバーサル非同期送受信)
基本概念
パラメータ
| パラメータ | 一般的な値 |
| ボーレート | 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)
基本概念
クロックモード (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つのバスの比較
| 特性 | UART | I2C | SPI |
| 線数 | 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