組み込み回路 20 · シリアルインタフェースの物理層

Chapter 20

シリアルインタフェースの物理層

この章がなぜ必要なのか——通信の不具合はほとんど物理層で起きるから.

プロトコル(ソフト)は正しいのに動かない場合、原因は必ず電気にある。 各方式が「どういう電気信号なのか」を押さえる。

この章で使う既出の用語(定義は各リンク先). バイアス(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 Mbps5 m
Ethernet差動・絶縁トランス結合埋め込み点対点10M〜10 Gbps100 m
LVDS差動・低振幅定電流別クロック or 埋め込み点対点〜数 Gbps〜10 m

なぜ差動が強いのか

シングルエンド信号GNDノイズ受信 = V_signal − V_GNDノイズも GND の電位差もそのまま信号に化ける差動+−ノイズ両方に同じだけ乗る受信 = V₊ − V₋同相成分は差を取れば消える+ 放射も互いに打ち消し合う
差動の性能は「2 本がどれだけ揃っているか」で決まる。だから等長・等間隔・撚り線が要る

2 本を撚る(ツイストペア)と、外来ノイズが両方に等しく乗る。 差を取ればキャンセルされる。これが コモンモード除去 である。

さらに:

「長い」「ノイジー」「機器をまたぐ」なら差動一択である。

シングルエンドと差動を比べる

ノイズを注入して、シングルエンドと差動で受信波形がどうなるかを見る。 コモンモード電圧とグラウンド電位差の影響も。

2. UART

最も単純。クロック線がないので、送受信が同じボーレートを持つ前提で動く。

UART のフレームアイドルスタートD0D1D2D3D4D5D6D7ストップこの立ち下がりで受信側が同期し、以降は自前のクロックで各ビットの中央をサンプルする
クロック線がないので、10 ビット目までにずれが半ビット未満であること=送受合わせて 5 % 未満が要求される

クロック精度の要求

受信側はスタートビットの立ち下がりで同期し、 各ビットの中央でサンプルする。

10 ビット目(ストップビット)まで、ずれが半ビット未満であればよい:

\[ 10 \times \Delta < 0.5 \quad\Longrightarrow\quad \Delta < 5\ \% \]

送受両方の誤差を考えると、片側 ±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 を交差させる。

MCU AMCU BTX → RXRX ← TXGNDGND を繋ぎ忘れると動いたり動かなかったりする
TX と RX は交差させる。そして GND は「信号線」である——リターン経路がなければ通信は成立しない

GND を繋ぎ忘れると、動いたり動かなかったりする。 電源が別の機器なら特に。

長い配線で化ける理由.

シングルエンドなので、GND の電位差とノイズがそのまま乗る。 さらに配線容量でエッジが鈍り、しきい値の跨ぎ方がずれる。

数 m を超えるなら RS-485 か絶縁 UART に変える。 ボーレートを下げるのも有効(エッジの鈍りに対する余裕が増える)。

3. SPI

クロック線があるのでクロック精度は不要。速い。

SPI モード 0(CPOL=0 / CPHA=0)SCLKMOSID7D6D5D4D3D2D1D0立ち上がりでサンプルする
モード 0 と 3 が圧倒的に多い。相手のデータシートで CPOL/CPHA を必ず確認する

モード(CPOL / CPHA)

モードCPOLCPHAアイドル時 SCLKサンプル
000L立ち上がり
101L立ち下がり
210H立ち下がり
311H立ち上がり

モード 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 で最もよく効く対策。

MCU22〜33 Ωスレーブ送信 IC のピンの直近(10 mm 以内)に置くR_DS(on) と足して配線の特性インピーダンスに近づけ、反射を吸収する
SPI で最もよく効く対策。SCLK のリンギングによる二重クロックを防ぐ

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)を出せない。 バスが永久に固まる。

復旧手順(ソフトで実装しておく):

  1. SDA を入力にして状態を読む。L なら異常
  2. SCL を最大 9 回トグルする(スレーブに残りのビットを吐かせる)
  3. SDA が H になったら、STOP コンディションを発行
  4. それでも駄目なら、スレーブの電源を切って再投入

電源を GPIO で切れる設計にしておくと最後の砦になる。

トラブル原因
立ち上がらない/通信しないプルアップ忘れ、値が大きすぎ
波形が丸い\(R_{pu}\) が大きい or \(C_b\) が大きい。抵抗を下げる
L レベルが 0.4 V を超える\(R_{pu}\) が小さすぎ(複数モジュールの並列)
アドレス衝突同種センサを 2 個。アドレス選択ピンか I2C マルチプレクサ(TCA9548A 等)
長い配線で NG400 pF を超えている。バスバッファ(P82B715 等)または I2C を諦める
ノイズで固まるシールド、フェライト、速度低下、リトライ実装
スレーブが応答しない電源シーケンス(スレーブが起動前)、リセット解除待ち

I2C を使うか避けるかの判断.

向いている: 基板内、低速、多数のセンサ、ピン数を減らしたい

向いていない: 基板をまたぐ、ノイズ環境、高信頼が要る、高速

産業機器で I2C を基板外に出すのは避けるのが定石である。 どうしても必要なら、絶縁 I2C(21 章)か バスバッファを使う。

5. CAN

車載・産業の標準。差動 + ワイヤード AND という独特の組合せ。

CAN の差動レベル時間電圧2.5 V3.5 V1.5 VCANHCANL劣勢(Recessive)差 0 V = 論理 1優勢(Dominant)差 2 V = 論理 0
優勢が劣勢に勝つ。だから複数ノードが同時に送っても、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 対 NSPI
基板内・低速・多数・ピンを節約I2C
デバッグ用・PC 接続UART(+ USB-シリアル変換)
基板をまたぐ・数 mRS-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 つを守る

次章では、電位を切り離す方法——アイソレータとドライバを扱う。