UARTとは
UART (Universal Asynchronous Receiver/Transmitter) は、
コンピュータ内部で一般的に利用されるパラレル形式のデータを、外部機器との通信に適したシリアル形式(直列データ)に変換し、またその逆を行うための回路または
集積回路です。特に、スタートビット、データビット、
パリティビット、ストップビットといった特定のビット列を用いてデータ転送タイミングを同期させる「調歩
同期方式」(アシンクロナス通信)に特化しています。
UARTは、単体の
集積回路として提供される場合と、
マイクロプロセッサや
マイクロコントローラの周辺機能(ペリフェラル)の一部としてチップに内蔵されている場合があります。外部の機器とのデータ通信インターフェースとして利用される際は、RS-232Cなどの物理的な信号レベル規格に適合させるために、マキシム社のMAX232のようなレベル変換ICと組み合わせて使用されることが一般的です。
UARTに、特定のクロック信号を用いた同期通信方式にも対応する回路を追加したものは、USART (Universal Synchronous Asynchronous Receiver/Transmitter) と呼ばれ、より柔軟な通信方式に対応できます。
歴史と代表的なUART
UARTの基本的な機能は、テレタイプライターASR-33のような初期の
コンピュータ周辺機器との接続技術にその原型を見ることができます。DEC社のミニ
コンピュータでは、テレタイプライターとの
シリアル通信を可能にするための、発振器とエラー検出機能を持たない
トランジスタベースの専用モジュールが用いられていました。初期のUART
集積回路は、この基本的な変換機能に加え、クロック入力と通信速度選択入力を持つ形で発展しました。
集積回路として広く使われた初期のUARTとしては、
インテル社の8251やナショナルセミコンダクター社の8250が挙げられます。これらは多くの
コンピュータやシステムで利用されました。
特にパーソナル
コンピュータの世界では、
IBMがPC/ATに採用した16450 UARTがその後のデファクトスタンダードとなりました。ナショナルセミコンダクター社によって開発された16550Aは、この16450にデータの一時保持領域であるFIFO (First-In, First-Out) バッファ機能を追加した改良版です。FIFOの搭載により、CPUがデータ処理のためにUARTから頻繁にデータを読み書きする必要がなくなり、特に高速通信時の処理負荷を軽減することが可能になりました。現在でも、
PC/AT互換機|PC_AT互換機の
シリアルポートでは、16550Aと互換性のあるUARTが広く使用されています。
16550A互換のUARTの多くは、基準発振周波数を変更したり、互換性のある拡張機能を利用したりすることで、標準の115.2kbpsを超える高速通信に対応しています。例えば、16550Aからの拡張機能を持つ16950系では460.8kbps、16750系では921.6kbpsといった速度設定が可能です。さらに、基準発振周波数を最大にすることで、ソフトウェア設定を変えずに高速化(例: 16550Aで8MHz時に0.5Mbps)を実現する製品や、互換性を無くして大幅な高速化(例: OX16C950Bで60MHz時に15Mbps、XRシリーズで64MHz時に16Mbps)を達成したUARTも存在します。
Z80マイクロプロセッサファミリーでは、
Z80 SIO (Z84C40) や
Z80 SCC (Z85C30) といった
シリアル通信コントローラーが利用され、
Z80 SCCは
サン・マイクロシステムズの
ワークステーションなどでも採用されました。
応用分野と現在の状況
組み込みシステムの分野では、UARTまたはUSARTは
マイクロコントローラにほぼ必須の周辺機能となっています。フリースケール(現NXP)やルネサスエレクトロニクスといった主要なメーカーの
マイクロコントローラには、SCI (Serial Communication Interface) といった名称でUSART機能が内蔵されていることが多く、特に
8ビットや
16ビットのローコストなマイコンでは、これが唯一の外部通信インターフェースであることも珍しくありません。また、大規模なシステムオンチップ(SoC)では、UART機能は
IPコアとして容易に組み込むことが可能で、AMBA AXIバス向けのPL011などがその例です。
一方で、パーソナル
コンピュータにおいては、物理的な
シリアルポートを搭載しない機種が近年増加しています。このため、
組み込みシステムとPCの間でデータ通信を行う際には、USB接続で
シリアル通信をエミュレートする市販のUSB-シリアル変換ケーブルが一般的に利用されています。
UARTが検出するエラー
UARTは、データ転送中に発生する可能性のあるエラーを検出し、通信の信頼性を高めるための機能を備えています。検出されたエラーは、割り込み信号や内部レジスタの状態を通じて、
マイクロプロセッサに通知されます。主要なエラーとしては以下のものがあります。
パリティエラー: 受信したデータの
パリティビットが、設定されているパリティ方式(偶数パリティ、奇数パリティなど)に従って計算した値と一致しない場合に発生します。パリティチェック機能が無効に設定されている場合は、このエラーは検出されません。
オーバランエラー: UARTの受信バッファ(FIFOなど)に格納された受信データを、CPUが十分に迅速に読み出さないうちに、次のデータキャラクタ全体が
シフトレジスタに受信されてしまった場合に発生します。このエラーが発生すると、受信バッファから読み出されなかったデータは失われます。
*
フレーミングエラー: 受信データキャラクタの終了を示すストップビットを受信するべきタイミングで、本来ストップビットが取るべき論理レベル(通常はHighレベル)以外の信号レベルが検出された場合に発生します。これは、送信側と受信側の通信速度設定のずれや、伝送路のノイズなどによって引き起こされる可能性があります。
これらのエラー検出機能により、UARTは比較的単純なハードウェアで、
シリアル通信における一定レベルの信頼性を確保しています。