シリアルインタフェース完全ガイド:UART・SPI・I2C・RS-485の仕組みと実践

シリアルインタフェースとは何か — 基本概念と用途

シリアルインタフェースは、データをビット単位で順次送受信する通信方式の総称です。並列通信(複数ビットを同時に送る)と対比され、物理配線が少なく済むため、長距離通信や組み込み機器間の接続で広く使われます。代表的なプロトコルにはUART(RS-232/TTL)、SPI、I2C、RS-422/RS-485、CAN、USB CDCなどがあります。

同期通信と非同期通信

シリアル通信は大きく同期(synchronous)と非同期(asynchronous)に分かれます。同期通信は送信側と受信側が共有クロックまたはクロック由来の線を持ち、クロックでビット同期を取ります(例:SPI、I2S)。非同期通信はクロック信号を持たず、スタートビット/ストップビットや事前合意したボーレートで同期を取ります(例:UART/RS-232)。

UART(RS-232、TTL UART)の詳細

UARTは組み込みとPC周辺機器で最も基本となる非同期シリアル通信です。典型要素はボーレート(baud)、データビット数(7または8)、パリティ(None/E/O)、ストップビット(1/1.5/2)です。フレーミングは「スタートビット(低)→データビットLSBから→(オプション)パリティ→ストップビット(高)」となります。

  • 代表的なボーレート:110、300、1200、2400、4800、9600、19200、38400、57600、115200
  • フレーミングの例:8N1 は 1 スタート、8 データ、パリティなし、1 ストップ=1 バイトあたり通常 10 ビット分の送信時間。
  • エラーの種類:フレーミングエラー(ストップビットが見つからない)、パリティエラー、オーバラン(受信FIFOが満杯)など。

物理層の代表格がRS-232で、伝送電圧は一般に±3V〜±15Vで論理レベルは負電圧が論理“1”(Mark)、正電圧が論理“0”(Space)です。これに対し、マイコン間でよく使うTTL UARTは0〜5V、あるいは0〜3.3Vのシングルエンド信号です。TTLとRS-232は電圧レベルが直結できないため、MAX232のようなレベルシフタが必要になります。

RS-422 / RS-485 — 差動通信と産業用途

RS-422とRS-485は差動信号を使うためノイズ耐性が高く、長距離・高信頼の通信が可能です。RS-485は半二重のバス型通信をサポートし、複数ノードのマルチドロップが特徴です。典型的な実装では120Ωの終端抵抗を両端に入れ、バイアス抵抗でバスのアイドル状態を確保します。RS-485は適切な設計で数百〜数千メートル、数百kbpsまで運用できます(速度と距離はトレードオフ)。

  • 終端抵抗:信号線の反射抑制のため両端に実装
  • 差動の利点:CMR(共通モード耐性)が高い、長距離での信号劣化が少ない
  • 典型用途:産業用制御、フィールドバス、Modbus RTU

SPI(Serial Peripheral Interface)の特徴

SPIは同期式のフルデュプレックスインタフェースで、マスターがクロック(SCK)、マスター出力・スレーブ入力(MOSI)、マスター入力・スレーブ出力(MISO)、スレーブ選択(CS/SS)を持ちます。SPIはクロック極性(CPOL)と位相(CPHA)で4つのモード(Mode 0〜3)に分かれ、データはクロックのエッジでサンプリングされます。

  • 利点:高速度、シンプル、フルデュプレックス
  • 欠点:多くのスレーブを扱うとCSピンが増える、バス上の衝突防止はハードウェア設計に依存
  • 速度目安:数MHz〜数十MHz(デバイスと配線次第で100MHz超も)

I2C(Inter-Integrated Circuit)の仕組み

I2Cは2線(SDAデータ、SCLクロック)のオープンドレインバスで、プルアップ抵抗が必要です。アドレス指定とACK/NACKによる通信が特徴で、マルチマスター構成もサポートします。クロックストレッチングによりスレーブが処理能力に応じてクロックを伸ばすことができます。

  • アドレッシング:7ビット(一般的)と10ビットのアドレスがある
  • スピードモード:標準(100kHz)、ファースト(400kHz)、ファーストモードプラス(1MHz)、ハイスピード(3.4MHz)
  • 利点:配線が少ない、複数デバイスの接続が容易
  • 欠点:長距離通信には不向き、速度はSPIに劣る

ソフトウェア/ドライバと実装上の注意

Unix系ではtermiosによるシリアルポート制御が一般的で、WindowsではCOMポートAPIやCDC-ACMドライバが用いられます。マイコン側ではUARTペリフェラルのFIFO、DMA、割り込み駆動をうまく使い、オーバランや割り込み嵐を防ぎます。シリアル通信はCPU負荷が高くなりがちなので、DMA+割り込み閾値設定で効率化するのが定石です。

実践的な設計指針とトラブルシューティング

シリアル回路設計でよくある課題と対処法:

  • ノイズ/EMI:差動信号の採用、ツイストペア、シールド、適切な配線経路
  • 信号レベル不整合:電圧レベル変換(MAX232、レベルシフタ)、共通GNDの確認
  • 終端とプルアップ:RS-485では終端、I2Cでは適切なプルアップ値(バス長・容量に依存)
  • クロック・タイミング:SPIのCPOL/CPHA不一致やUARTのボーレート誤設定でデータ化け
  • 長距離伝送:RS-485を用いる、ボーレートを下げる、差動終端を入れる
  • プロトコルレベル:パリティやチェックサムを使いエラー検出(Modbus RTUやPPPなど)

性能計算の例

UARTでの有効データスループットを計算する簡単な式は次の通りです:1バイトあたりのビット数(スタート+データ+パリティ+ストップ)×ボーレートで必要時間が決まります。例えば8N1(10ビット)で115200bpsの場合、1バイトは約0.0000868秒(86.8µs)で、理論上は約11520バイト/秒(約11.25KB/s)となります。ただし実際はプロトコルオーバーヘッドやソフトウェア処理時間で低下します。

セキュリティと運用上の注意点

シリアルコンソールはしばしば機器のブートロガやデバッグポートとして使われ、物理的アクセスがあると機器を操作されるリスクがあります。機密性が必要な場合はシリアル経由のアクセスを制限し、可能なら認証や暗号化(たとえばPPP上でのIPsecなど)を用いる、あるいはコンソールを物理的に封印します。

ツールとデバッグ手法

シリアル通信のデバッグには以下のツールが有効です:

  • USBシリアルアダプタ(FTDI, CP210x, CH340)を使ってPCから接続
  • ロジックアナライザやオシロスコープで波形を観測(タイミング、クロストーク、反射の診断)
  • Bus PirateやSaleaeなどのツールでSPI/I2Cを解析・エミュレート
  • ソフトウェア:minicom、picocom、PuTTY、screen、termite、シリアルプロトコルアナライザ

代表的なプロトコルとアプリケーション

産業機器ではModbus RTU(主にRS-485)、フィールド機器やセンサではI2C/SPI、機器設定コンソールやデバッグにはUART、車載ではCANが多用されます。さらに近年はUSB CDC(仮想COMポート)によりPCと組み込み機器の接続が一般化しています。

まとめ — 設計で押さえるべきポイント

シリアルインタフェース選定時は、用途(短距離か長距離か、トポロジー、速度、電磁環境)、物理層(シングルエンド vs 差動)、プロトコル要件(同期/非同期、アドレス、ACK)、実装コスト(ライン数、終端、レベル変換)、およびセキュリティを総合的に検討することが重要です。設計段階で配線、終端、電源ノイズ、プルアップ/バイアスを考慮すれば、信頼性の高い通信が実現できます。

参考文献