Chapter 20
シリアルインタフェースの物理層
この章がなぜ必要なのか——通信の不具合はほとんど物理層で起きるから.
- 「SPI が 10 MHz までしか動かない」
- 「I2C が立ち上がらない/ハングする」
- 「UART が長い配線で化ける」
- 「CAN が 1 台外すと通信できなくなる」
- 「USB の認識が不安定」
プロトコル(ソフト)は正しいのに動かない場合、原因は必ず電気にある。 各方式が「どういう電気信号なのか」を押さえる。
この章で使う既出の用語(定義は各リンク先). バイアス(01 章 4 節)、コンデンサ(02 章 7 節)、スイッチ(05 章 2 節)、不可(06 章 6 節)、制御(06 章 6 節)、水晶(09 章 2 節)、負荷容量(09 章 2 節)、レベルシフタ(11 章 6 節)、並列(11 章 2 節)、直列(11 章 2 節)、スキュー(12 章 2 節)、バイト(13 章 5 節)、読み出し(13 章 4 節)、不安定(14 章 3 節)、モード(15 章 9 節)、突入電流(16 章 3 節)、過電流(16 章 3 節)、簡単(17 章 3 節)、プルアップ(19 章 7 節)、長い配線(19 章 7 節)
1. 物理層を分ける 4 つの軸
| 軸 | 選択肢 | 影響 |
|---|---|---|
| シングルエンド/差動 | GND 基準/2 本の差 | ノイズ耐性・距離が桁で変わる |
| プッシュプル/オープンドレイン | 能動駆動/ワイヤード AND | 速度・多ドロップ可否 |
| 同期/非同期 | クロック線あり/なし | クロック精度の要求 |
| 点対点/マルチドロップ | 1 対 1/バス | 終端・アービトレーション |
この 4 つの組合せで、以下の表がほぼ埋まる。
| 方式 | 信号 | 駆動 | クロック | 接続 | 典型速度 | 典型距離 |
|---|---|---|---|---|---|---|
| UART | シングルエンド | プッシュプル | 非同期 | 点対点 | 〜1 Mbps | 〜数 m |
| SPI | シングルエンド | プッシュプル | 同期 | 1 対 N | 〜100 MHz | 〜30 cm |
| I2C | シングルエンド | オープンドレイン | 同期 | マルチドロップ | 〜1 MHz | 〜1 m |
| RS-232 | シングルエンド(±12 V) | プッシュプル | 非同期 | 点対点 | 〜115 kbps | 〜15 m |
| RS-485 | 差動 | 3 ステート | 非同期 | マルチドロップ | 〜10 Mbps | 〜1200 m |
| CAN | 差動 | オープンドレイン的 | 非同期 | マルチドロップ | 〜1 Mbps(FD 8 Mbps) | 〜1000 m |
| USB 2.0 | 差動 | プッシュプル | 非同期(埋め込み) | 点対点 | 480 Mbps | 5 m |
| Ethernet | 差動・絶縁 | トランス結合 | 埋め込み | 点対点 | 10M〜10 Gbps | 100 m |
| LVDS | 差動・低振幅 | 定電流 | 別クロック or 埋め込み | 点対点 | 〜数 Gbps | 〜10 m |
なぜ差動が強いのか
2 本を撚る(ツイストペア)と、外来ノイズが両方に等しく乗る。 差を取ればキャンセルされる。これが コモンモード除去 である。
さらに:
- 放射も減る(+側と −側の電流が逆向きで、磁界が打ち消し合う)
- グラウンドの電位差に耐える(コモンモード電圧範囲の分だけ)
「長い」「ノイジー」「機器をまたぐ」なら差動一択である。
シングルエンドと差動を比べる
ノイズを注入して、シングルエンドと差動で受信波形がどうなるかを見る。 コモンモード電圧とグラウンド電位差の影響も。
2. UART
最も単純。クロック線がないので、送受信が同じボーレートを持つ前提で動く。
クロック精度の要求
受信側はスタートビットの立ち下がりで同期し、 各ビットの中央でサンプルする。
10 ビット目(ストップビット)まで、ずれが半ビット未満であればよい:
送受両方の誤差を考えると、片側 ±2 % 以下が実用上の目安(09 章)。
MCU の内蔵 RC 発振器(±1〜2 %)でぎりぎり。温度が変われば厳しい。
ボーレート誤差の計算.
\[ \text{誤差} = \frac{\text{実際のボーレート} - \text{目標}}{\text{目標}} \]例: \(f_{clk} = 16\) MHz、目標 115200 bps、16 倍オーバーサンプリング:
\[ \text{分周比} = \frac{16\times10^6}{16 \times 115200} = 8.68 \Rightarrow 9\ (\text{整数}) \]\[ \text{実際} = \frac{16\times10^6}{16\times9} = 111{,}111\ \text{bps} \]\[ \text{誤差} = \frac{111111-115200}{115200} = -3.5\ \% \]これは通らない。
だから「UART を使うなら 11.0592 MHz や 14.7456 MHz の水晶」という 慣習がある(115200 で割り切れる)。 現代の MCU は小数分周を持つものが多いので緩和されている。
配線と信号レベル
| 形態 | 内容 |
|---|---|
| TTL/CMOS レベル | MCU 間の直結。基板内〜数十 cm |
| RS-232 | ±5〜15 V。トランシーバ IC(MAX3232 等)が必要。論理が反転 |
| RS-485 | 差動。長距離・マルチドロップ |
| 絶縁 UART | アイソレータ経由(21 章) |
クロスかストレートか.
UART は TX と RX を交差させる。
TX と RX は交差させる。そして GND は「信号線」である——リターン経路がなければ通信は成立しない GND を繋ぎ忘れると、動いたり動かなかったりする。 電源が別の機器なら特に。
長い配線で化ける理由.
シングルエンドなので、GND の電位差とノイズがそのまま乗る。 さらに配線容量でエッジが鈍り、しきい値の跨ぎ方がずれる。
数 m を超えるなら RS-485 か絶縁 UART に変える。 ボーレートを下げるのも有効(エッジの鈍りに対する余裕が増える)。
3. SPI
クロック線があるのでクロック精度は不要。速い。
モード(CPOL / CPHA)
| モード | CPOL | CPHA | アイドル時 SCLK | サンプル |
|---|---|---|---|---|
| 0 | 0 | 0 | L | 立ち上がり |
| 1 | 0 | 1 | L | 立ち下がり |
| 2 | 1 | 0 | H | 立ち下がり |
| 3 | 1 | 1 | H | 立ち上がり |
モード 0 と 3 が圧倒的に多い。 データシートで確認する。
速度の限界——何が律速するか
| 要因 | 内容 |
|---|---|
| スレーブの最大 SCLK | データシートの値 |
| 往復遅延 | SCLK が出てから MISO が返るまで。配線長が効く |
| 配線の反射 | インピーダンス不整合。リンギング(23 章) |
| 容量負荷 | 立ち上がりが鈍る |
往復遅延の計算.
マスタが SCLK を出す → スレーブに届く(\(t_{prop}\))→ スレーブが MISO を出す(\(t_{co}\))→ マスタに戻る(\(t_{prop}\))→ マスタのセットアップ(\(t_{su}\))
\[ T_{SCLK}/2 > 2t_{prop} + t_{co} + t_{su} \]配線 30 cm(片道 2 ns)、\(t_{co} = 15\) ns、\(t_{su} = 5\) ns:
\[ T/2 > 4 + 15 + 5 = 24\ \text{ns} \Rightarrow f_{max} = 20.8\ \text{MHz} \]配線を伸ばすと直接効く。 これが「SPI は基板内で」の理由。
高速 SPI 対応の MCU は 入力サンプルタイミングを遅らせる設定を 持っていることが多い(DDR サンプリング、遅延補償)。
直列ダンピング抵抗
SPI で最もよく効く対策。
MCU の出力インピーダンス(\(R_{DS(on)}\) 30 Ω 程度)と足して、 配線の特性インピーダンス(50〜70 Ω)に近づける。
これで反射が抑えられ、リンギングが消える(23 章)。
| 効果 | 内容 |
|---|---|
| リンギングが減る | 二重クロックによる誤動作を防ぐ |
| EMI が減る | 高周波成分が減る |
| 立ち上がりが遅くなる | 高速では容量負荷とのバランスが要る |
SPI で最も多い事故.
事故 原因 たまにデータがずれる SCLK のリンギングで余分にカウント。ダンピング抵抗 CS が動いてしまう CS にプルアップがない。リセット中は入力なので不定 複数スレーブで動かない MISO が 3 ステートでない スレーブがいる。CS 非選択でも駆動している 速度を上げると化ける 往復遅延、または配線の反射 デイジーチェーンで動かない 対応していないデバイス SD カードが不安定 電源のデカップリング不足、プルアップ不足
4. I2C
オープンドレイン + ワイヤード AND(19 章)。2 本で多数のデバイスを繋ぐ。
電気的な要点
| 項目 | 内容 |
|---|---|
| プルアップが必須 | 値の決め方は 19 章 |
| 立ち上がりは RC | 速度の律速はここ。\(t_r = 1.2 R C_b\) |
| 立ち下がりは能動的 | NMOS が引くので速い |
| バス容量の上限 | 400 pF(規格値) |
| クロックストレッチ | スレーブが SCL を L に保持して待たせる。マスタが対応必須 |
特有のトラブル
バスハング——最も厄介な問題.
状況: MCU がリセットされたとき、スレーブが読み出しの途中で SDA を L に保持したままになる。 マスタはスタートコンディション(SDA の H→L)を出せない。 バスが永久に固まる。
復旧手順(ソフトで実装しておく):
- SDA を入力にして状態を読む。L なら異常
- SCL を最大 9 回トグルする(スレーブに残りのビットを吐かせる)
- SDA が H になったら、STOP コンディションを発行
- それでも駄目なら、スレーブの電源を切って再投入
電源を GPIO で切れる設計にしておくと最後の砦になる。
| トラブル | 原因 |
|---|---|
| 立ち上がらない/通信しない | プルアップ忘れ、値が大きすぎ |
| 波形が丸い | \(R_{pu}\) が大きい or \(C_b\) が大きい。抵抗を下げる |
| L レベルが 0.4 V を超える | \(R_{pu}\) が小さすぎ(複数モジュールの並列) |
| アドレス衝突 | 同種センサを 2 個。アドレス選択ピンか I2C マルチプレクサ(TCA9548A 等) |
| 長い配線で NG | 400 pF を超えている。バスバッファ(P82B715 等)または I2C を諦める |
| ノイズで固まる | シールド、フェライト、速度低下、リトライ実装 |
| スレーブが応答しない | 電源シーケンス(スレーブが起動前)、リセット解除待ち |
I2C を使うか避けるかの判断.
向いている: 基板内、低速、多数のセンサ、ピン数を減らしたい
向いていない: 基板をまたぐ、ノイズ環境、高信頼が要る、高速
産業機器で I2C を基板外に出すのは避けるのが定石である。 どうしても必要なら、絶縁 I2C(21 章)か バスバッファを使う。
5. CAN
車載・産業の標準。差動 + ワイヤード AND という独特の組合せ。
なぜこの方式なのか
優勢(0)が劣勢(1)に勝つ。 これによって:
- アービトレーションが可能。複数ノードが同時に送信しても、 ID の小さい(0 が多い)ノードが自然に勝つ。衝突による再送が要らない
- 1 本が断線しても片側で通信できる(フォールバック)
終端抵抗
バスの両端に 120 Ω を入れる。
| 状況 | 症状 |
|---|---|
| 終端なし | 反射でリンギング。短距離では動くことがあるので厄介 |
| 終端 1 個 | 片側だけ反射する。中距離で不安定 |
| 終端が多すぎる | 負荷が重すぎてドライバが優勢を出せない |
バス全体の抵抗を測ると 60 Ω(120 ∥ 120)になるはず。 これが最も簡単な診断法である。
「1 台外すと通信できなくなる」の正体.
外した機器に終端抵抗が載っていた。
終端はバスの物理的な両端に必要で、 どのノードに載っているかは設計で決めなければならない。 多くの産業機器には終端の ON/OFF スイッチが付いている。
その他の要点
| 項目 | 内容 |
|---|---|
| クロック精度 | ±0.5 % 以下が必要。内蔵 RC では不可。水晶が要る(09 章) |
| ビットタイミング | サンプルポイントを 75〜87.5 % に設定。全ノードで揃える |
| コモンモード | トランシーバの許容範囲(−12〜+12 V など)内に収める |
| 絶縁 | 電位差が大きい環境では絶縁 CAN トランシーバ |
| CAN FD | データ部だけ高速化(〜8 Mbps)。物理層の品質要求が上がる |
| スタブ長 | 分岐は短く(高速ほど厳しい) |
6. RS-485
差動・半二重・マルチドロップ。産業機器の定番(Modbus など)。
| 項目 | 内容 |
|---|---|
| 差動電圧 | ドライバ ±1.5 V 以上、レシーバ ±200 mV で判定 |
| コモンモード範囲 | −7 V 〜 +12 V。グラウンド電位差に耐える |
| ノード数 | 32(標準負荷)/256(1/8 負荷品) |
| 終端 | 両端に 120 Ω |
| バイアス抵抗 | 誰も送信していないとき、バスが不定になる。プルアップ/ダウンで H 側に寄せる |
| 方向制御 | DE/RE ピン。送信終了後に速やかに受信へ戻す |
RS-485 の 3 大トラブル.
(1) 方向制御のタイミング 送信バッファが空になる前に DE を落とすと、最後のバイトが切れる。 シフトレジスタが空になった割り込み(TC)で切るのが正しい。
(2) バイアス抵抗がない アイドル時にバスが不定になり、レシーバがノイズを拾って フレーミングエラーが出続ける。 「フェイルセーフ」レシーバなら不要な場合もある。
(3) GND を繋いでいない 差動でもコモンモード範囲がある。 ±7 V を超える電位差があれば通信できない(機器が壊れることも)。 シールドか第 3 線で GND を繋ぐか、絶縁する。
7. USB・高速差動
USB 2.0
| 項目 | 内容 |
|---|---|
| 信号 | D+ / D− の差動、Full Speed 12 Mbps / High Speed 480 Mbps |
| 差動インピーダンス | 90 Ω ±10 %。基板設計で守る(23 章) |
| 配線 | 等長(スキュー < 数 ps)、ペアで並走、層を跨がない |
| クロック精度 | ±0.25 %(Full Speed)。水晶が必須、内蔵 RC は不可 |
| 直列抵抗 | 22〜33 Ω(Full Speed のみ。High Speed では入れない) |
| ESD | 低容量 TVS(< 1 pF)が必須 |
| VBUS | 過電流保護、突入電流対策 |
USB が「たまに認識しない」原因.
原因 対策 水晶の精度・負荷容量 09 章。周波数を実測する 差動インピーダンス不整合 基板の層構成と線幅を計算する 等長になっていない 蛇行配線で合わせる ESD 保護の容量が大きすぎ 低容量品に VBUS のデカップリング不足 突入電流で電圧が落ちる ケーブルが悪い これも本当に多い
高速差動一般(LVDS、MIPI、Ethernet、PCIe)
| 原則 | 内容 |
|---|---|
| 特性インピーダンスを守る | 差動 100 Ω(LVDS)、90 Ω(USB)、100 Ω(Ethernet) |
| リターンパスを切らない | 参照プレーンを跨ぐとインピーダンスが壊れる |
| 層変更は最小に | ビアが不連続点になる。必要ならグラウンドビアを添える |
| 等長・等間隔 | ペア内のスキューがコモンモードノイズになる |
| AC 結合 | 多くの規格でコンデンサが必要(DC レベルの分離) |
| 絶縁 | Ethernet はトランス(またはトランスレス品の設計)で絶縁 |
8. 選び方
| 条件 | 推奨 |
|---|---|
| 基板内・高速・1 対 N | SPI |
| 基板内・低速・多数・ピンを節約 | I2C |
| デバッグ用・PC 接続 | UART(+ USB-シリアル変換) |
| 基板をまたぐ・数 m | RS-485 / 絶縁 UART |
| 車載・産業・高信頼 | CAN / CAN FD |
| 数十 m 以上 | RS-485 / Ethernet |
| 電位差がある・安全が要る | 絶縁付き(21 章) |
| 数百 Mbps 以上 | 差動高速規格(23 章の設計が必須) |
インタフェースを比べる
速度・距離・ノイズ耐性・ピン数・コストを軸に、 各インタフェースの位置づけを見る。
まとめ
| ポイント | 内容 |
|---|---|
| 分類の 4 軸 | シングルエンド/差動・駆動方式・同期/非同期・接続形態 |
| 差動が強い理由 | コモンモード除去 + 放射の打ち消し。長距離・ノイジーなら一択 |
| UART | クロックなし。±2 % の精度が要る。GND 接続を忘れない |
| ボーレート誤差 | 分周比の整数化で数 % ずれる。11.0592 MHz の慣習 |
| SPI | 高速だが往復遅延で速度が決まる。基板内向き |
| ダンピング抵抗 | 22〜33 Ω 直列。リンギングと二重クロックを防ぐ |
| I2C | オープンドレイン。\(t_r = 1.2R C_b\) が速度を決める |
| バスハング | SCL を 9 回トグルして復旧。ソフトに実装しておく |
| I2C の適用範囲 | 基板外に出さないのが定石 |
| CAN | 優勢/劣勢でアービトレーション。両端に 120 Ω、全体で 60 Ω |
| CAN のクロック | ±0.5 %。水晶が必須 |
| RS-485 | コモンモード −7〜+12 V。方向制御・バイアス抵抗・GND が 3 大トラブル |
| USB | 差動 90 Ω・等長・水晶必須・低容量 TVS |
| 高速差動一般 | インピーダンス・リターンパス・等長の 3 つを守る |
次章では、電位を切り離す方法——アイソレータとドライバを扱う。