シリアル通信入門と実践ガイド:原理・規格・実装・トラブルシューティング

はじめに

シリアル通信は、ビットを順次1本の物理線(または差動対)で送受信する通信方式の総称であり、組み込み機器、産業制御、計測、そしてPCとデバイス間の接続に至るまで広く使われています。本コラムでは、基礎原理から主要規格(RS-232、TTL、RS-485)、UARTのフレーミング、フロー制御、実装上の注意点、トラブルシューティング、セキュリティや性能最適化まで、実践的かつ深堀りして解説します。

シリアル通信の基本概念

シリアル通信はデータを1ビットずつ時間的に並べて送ります。対になる概念として並列通信(複数ビットを同時に送る)がありますが、配線数やコスト、長距離伝送の観点からシリアル方式が主流です。シリアル通信は物理層、データリンク層、プロトコル層の各レイヤーで考える必要があります。

非同期通信(UART)の動作原理

UART(Universal Asynchronous Receiver/Transmitter)は最も一般的な非同期シリアル通信機構のひとつです。送信側はスタートビットでフレーム開始を示し、データビット(通常5〜8ビット)、オプションのパリティビット、そして1〜2個のストップビットでフレームを終えます。受信側は内部クロックでサンプリングし、スタートビット検出後にビットタイミングを基にサンプリングを行います。

  • ボーレート(baud rate): 1秒当たりのシンボル数(例:9600、115200)。UARTでは1シンボル=1ビットが一般的。
  • データビット: 5〜8ビットが一般的。8ビットが標準化されていることが多い。
  • パリティ: エラー検出のための1ビット(なし、偶数、奇数など)。
  • ストップビット: 1または2。非同期でフレームの余裕を与える。

同期通信との違い

同期通信はクロック信号を共有するか、あるいは埋め込みクロック(Manchester等)を用いてビット境界を認識します。代表的な同期プロトコルにはSPI、I2C、CAN、Ethernet等があります。同期方式は高スループットや厳密なタイミング制御が必要な場面で有利です。

物理層規格

シリアル通信は物理的な電気信号の定義に依存します。代表的規格を以下に示します。

  • RS-232: 古典的なPCシリアル。±3〜±15Vの単端(シングルエンド)信号。短距離・低速向け。DB9コネクタでお馴染み。ノイズ耐性は低めで、最大ケーブル長は速度や環境に依存。
  • TTLシリアル: マイコンで広く使われる0〜Vcc(通常0〜3.3Vまたは0〜5V)のシングルエンド信号。直接マイコンGPIOに接続できるが、長距離やノイズ環境では不向き。
  • RS-485: 差動信号(A/Bペア)を使い、マルチドロップや長距離(数百メートル)に強い。終端抵抗やバイアス回路(idle時のレベル決定)が重要。
  • 差動PWM/差動LVDS: 高速・低ノイズ用途で使用。CANや現代の高速リンクの基盤。

差動信号と終端、バイアスの重要性(RS-485中心)

差動信号はノイズに強く、受信機はA-Bの差を見ます。ケーブル終端に終端抵抗(通信線の特性インピーダンスに等しい)を入れることで反射を抑えます。マルチドロップ構成では送信が行われないアイドル時のバイアス(プルアップ/プルダウン)を整理してラインを安定化します。さらに長距離や産業用途では共通モード電圧やグランドループを避けるためのガルバニック絶縁が推奨されます。

フロー制御

長時間伝送やバッファの溢れを防ぐためにフロー制御を使います。

  • ハードウェアフロー制御: RTS/CTSなどの追加信号線を使って送受信を制御。信頼性が高い。
  • ソフトウェアフロー制御: XON/XOFFのようにデータ内の制御文字で停止・再開を指示。配線が節約できるが、制御文字のエスケープ等が必要な場合がある。

エラー検出と訂正

シリアル通信ではビットエラーを完全に避けられないため、エラー検出/訂正が必要です。

  • パリティ: 単純な1ビット検出。単一ビット誤りの検出は可能だが誤り訂正は不可。
  • チェックサム: 単純な加算やXORを使う方式。軽量だが検出力は限定的。
  • CRC(Cyclic Redundancy Check): 高い検出能力を持つ。Modbusやその他多くのプロトコルで使用。

典型的プロトコルと用途

  • Modbus RTU: 産業制御向けでRS-485上でよく使われる。バイトストリームにフレーム境界(時間間隔)を設ける方式。
  • MIDI: 音楽機器向けのシンプルなシリアルプロトコル(31.25 kbps、5ピンDIN)。
  • NMEA: GPSデータなどで使われるテキストベースのシリアル出力。
  • カスタムバイナリプロトコル: 組み込み機器間でしばしば使われ、ヘッダ・長さ・データ・CRCの構成が一般的。

実装上の注意点(マイコン側)

マイコンでシリアル通信を実装する際の主要ポイント:

  • UARTモジュールの設定: ボーレート、データビット、パリティ、ストップビットを正しく合わせる。
  • クロックとボーレート精度: ボーレート誤差が大きいと通信エラーが増える。例えば115200bpsではクロック誤差を小さく抑える必要がある。
  • 割り込み vs DMA: 高速または連続データではDMA(またはFIFO)を使うとCPU負荷が大幅に下がる。割り込みベースではバッファオーバーフローに注意。
  • リングバッファとスレッド同期: 受信データはリングバッファに格納し、処理スレッド/タスクでデータ抽出する設計が一般的。

ノイズ対策と配線のベストプラクティス

  • シールド付きツイストペアケーブルを使用してEMIを抑える。
  • 差動配線(RS-485等)を使うことで共通モードノイズを低減。
  • 終端抵抗を両端に配置し、不要な分岐は避ける。
  • アイドル時のバイアスやプルアップ/プルダウンを適切に設定する。
  • 長距離では中継器や光アイソレーションを検討する。

デバッグツールと手法

トラブルシューティングでは以下のツールが有用です。

  • 論理アナライザ: UARTフレームをキャプチャしてボーレート、フレーミング、データ内容を解析できる。
  • オシロスコープ: 電気的波形の品質(振幅、スパイク、反射)を確認。
  • USB-シリアルアダプタ(FTDI等)とシリアルモニタ: テキストベースのデータ確認や手動送信。
  • プロトコルアナライザ: Modbusなど特定プロトコルのデコード。

性能最適化のポイント

  • 適切なボーレート選定: ケーブル長・ノイズ環境・CPU負荷とのバランス。
  • バースト転送とバッファリング: 小さなパケットを連続送信するとオーバーヘッドが増えるため、可能ならパケットをまとめる。
  • ハードウェアフロー制御とバッファサイズを増やしてデータ欠落を防ぐ。
  • 非同期通信での最小遅延はフレーム長とボーレートに依存する点を理解する。

セキュリティと認証

シリアル通信自体に暗号化や認証は組み込まれていないことが多く、特に産業制御や重要データを扱う場合は注意が必要です。対策例:

  • 上位プロトコルでのメッセージ認証(HMAC)や暗号化を追加。
  • アクセス制御、物理的な接続管理。
  • 重要ネットワークではゲートウェイでのフィルタリング・監査ログ。

よくあるトラブルと対処法

  • データ化け: ボーレートやパリティの不一致を疑う。まず両端設定を確認。
  • ラインが常にアクティブ/ノイズ: 終端やバイアス設定の不具合、あるいはグランドループ。
  • バッファオーバーフロー: 割り込み処理やDMA、バッファサイズの見直し。
  • 長距離での断続的エラー: 絶縁、差動化、終端、ケーブル品質を確認。

実例とケーススタディ

1) 産業フィールドバス(RS-485 + Modbus): 多数のセンサを長距離で接続。終端・バイアス・アドレス管理が鍵。

2) マイコンとPCの接続(TTL <-> USB): TTLレベルとPCのRS-232はレベル変換が必要。FTDIやPL2303などのUSBシリアルICが一般的。

今後の動向

近年は高速な差動シリアル(USB、Ethernet、CAN-FD等)や無線化が進んでいますが、単純で低コスト、低レイテンシを求める場面では従来のUART/RS-485が依然として有用です。さらにセキュリティ要件の強化や産業IoT連携により、上位層でのプロトコル設計が重要になっています。

まとめ

シリアル通信はその単純さと柔軟性からいまだに重要な役割を担っています。正しい物理層の選定、フレーミングとフロー制御の整合、ノイズ対策、適切なバッファ設計とデバッグ能力があれば、安定した通信システムを構築できます。実装前に使用環境(距離、ノイズ、接続台数、セキュリティ要件)を整理し、規格に沿った計画を立てることが成功の鍵です。

参考文献