UART
UART(Universal Asynchronous Receiver/Transmitter)は、非同期式シリアル通信を実現するためのハードウェア(またはIPコア)である。クロック線を持たず、送受の各端末がそれぞれの内部クロックに基づいてビット列を規定のフレーミングで送受する。歴史的には端末とモデム間の通信に広く用いられ、現在もマイコンのコンソール、ブートローダ、組込み機器の設定ポート、センサやモジュールとの低速通信などで標準的に採用されている。
基本構成と動作原理
UARTは送信器(TX)と受信器(RX)を備え、フルデュプレックスを基本とする。線は最低2本(TXD、RXD)で、必要に応じてGNDとハードウェアフロー制御線(RTS、CTSなど)を加える。データは1ビットずつLSBファーストで送られ、受信側はスタートビットの立下りを検出すると内部クロックで所定回数のオーバーサンプリング(典型は16倍)を行い、ビット中央付近でサンプリングして判定する。
フレーミング(スタート/データ/パリティ/ストップ)
- スタートビット:常時“1”アイドルから“0”への遷移でフレーム開始を通知する。
- データビット:5〜9ビットが一般的で、8ビットが最も多い。LSB→MSBの順で送出する。
- パリティ:なし(N)、偶数(E)、奇数(O)など。簡易な誤り検出に用いる。
- ストップビット:1または2ビットの“1”でフレーム終端を示す。
ボーレートと許容誤差
ボーレートは1秒あたりのシンボル(ビット)数であり、9600、19200、115200などが広く用いられる。非同期のため、送受の内部クロック誤差が大きいとビット境界がずれて誤判定を生む。一般に±2%程度までの合算誤差は実用域とされるが、ビット数が多い設定や長配線では余裕が小さくなる。オーバーサンプリングと中央サンプル化によりジッタ耐性が向上するが、クロック源の選定(水晶/内部RC)や温度特性を考慮すべきである。
電気レベルと物理層
UARTは論理層であり、電気レベルは実装に依存する。マイコン間では3.3V/5VのTTLレベルが一般的であるが、PCや古い機器との接続ではRS-232レベル(±3〜±12V)が使われる。RS-232機器に接続する場合はレベルシフタ(例:MAX232系)が必要である。長距離・多数ノードのバス接続には差動方式のRS-485/RS-422トランシーバと組み合わせ、半二重(RS-485)や全二重(RS-422)の物理層でUARTフレームを搬送する。
配線・結線とGND参照
基本配線はTXD↔RXDの交差接続とGND共通である。レベルが同一でもGNDが共有されないとコモンモードのずれで誤動作や破損を招く。ケーブルはツイストペアやシールドを用いるとノイズ耐性が向上する。RS-232ではクロスポート(Null-modem)とストレートの違い、フロー制御線の有無に注意する。
フロー制御(XON/XOFF, RTS/CTS)
受信側バッファがあふれないよう送信制御を行う。ソフトウェアフロー制御はXON(0x11)/XOFF(0x13)を用い、追加配線不要で簡便だが、データ透過性の確保(バイナリ転送時のエスケープ)が課題となる。ハードウェアフロー制御はRTS/CTSで物理的に送出可否を握るため堅牢で遅延も小さい。
エラーハンドリング
- フレーミングエラー:ストップビットが“1”で検出できない場合。
- パリティエラー:設定と異なるパリティを受信した場合。
- オーバーラン:受信FIFO読み出しが遅く、次フレームを上書きした場合。
多くのUARTはステータスレジスタでこれらフラグを提供し、割り込みやDMAと連携して復旧処理(バッファフラッシュ、再同期)を行う。
ソフトウェア設計の要点
- 初期化:ボーレート、データ長、パリティ、ストップビット、フロー制御の一致が前提。
- 割り込み/DMA:低遅延でFIFOを掃き出し、オーバーランを防止する。
- リングバッファ:送受の非同期性を吸収し、アプリ層に連続データを提供する。
- プロトコル設計:生フレームは誤り検出が弱いため、アプリ層でチェックサム(CRC)やエスケープ、フレーミングを上乗せする。
他方式との比較観点
UARTは配線が少なく、設定も単純でデバッグ容易という利点を持つ。一方、共有クロックがないため長距離・高ボーレートでの誤差蓄積に配慮が要る。マルチマスタや多数スレーブのアドレッシングは標準化されておらず、必要ならRS-485バス+上位プロトコル(アドレス/CRC/エスケープ)で補う。高スループットや厳密な同期が必要な場面ではSPI、アドレス化とバス共有性が重要な場面ではI2Cが適する。
実装例と設計チェックリスト
- クロック源:内部RCの場合はボーレート誤差の見積と温度ドリフトを評価する。
- 配線:TXD/RXD交差、GND共通、必要ならRTS/CTS。長距離は差動物理層を検討する。
- 保護:レベル変換、ESD保護デバイス、終端抵抗(差動時)を適切に配置する。
- ソフト:リングバッファと割り込み優先度、受信タイムアウト、プロトコルのCRCと再送戦略。
- 検証:アイパターン、オシロでのスタート/ストップ位置、誤差耐性(±ppm)とビットエラーレートの確認。
典型的な応用
ブートローダのファーム更新、ログ出力、GNSS/BT/Wi-Fiモジュール制御、各種センサの低速テレメトリ、産業機器のサービスポートなど、実装容易性とツールの豊富さからUARTは依然として重要である。設計の肝は、電気レベル・クロック誤差・フロー制御・上位プロトコルの4点を総合的に最適化することにある。
コメント(β版)