16550 UART

16550 UART (Universal Asynchronous Receiver/Transmitter) は、シリアル通信インタフェースを実装するために設計された集積回路である。16550はIBM PC互換のパーソナルコンピュータに、モデム、シリアルマウス、プリンタ等の周辺機器を接続するための、RS-232Cへ接続するシリアルポートを実装するためによく使われた。
最初の16550はナショナル セミコンダクター（NS、現テキサス・インスツルメンツ）が製造した。類似の品番で、NS社の最初の製品に対して様々なレベルの互換性を持ったデバイスが他のメーカから提供された。16550とIOレジスタ互換のUART機能が、IBM PC互換機のマルチファンクションI/Oカードに実装され、後にはPC互換機のマザーボードに統合されたり、チップセットに統合される様になった。
工場出荷状態のマザーボードに搭載された8250 UARTを16550に交換することは、IBM PCやXTおよび互換機のユーザが高速モデムを使用するときの、一般的なアップグレードであった。9600 bpsより高速になると、PCのシリアルポートはキャラクタを欠落せずにデータフローを制御出来ないことが判明した（PC/AT時代に一般的になった16450でも、本質的には同様であった）。1バイトの受信バッファしか持たない8250や16450を、16バイトのFIFOバッファを持つ16550に交換し、そのFIFOを有効化するためにソフトウェアにパッチを当てたり設定を変更することで、高速通信を達成することができた。
16550の主な特徴:
16550のハードウェアとソフトウェアのインタフェースは、以前の8250 UARTや16450 UARTと後方互換性がある。1995年に発売されたNS社による最新の版はPC16550Dとよばれている。他社製品はさらに改良されている。
PC16550D・TL16C550C・TL16C750（ともに後述）は、現在もテキサス・インスツルメンツ (TI) のサイトよりデータシートが参照できる。
16550のFIFO.
以前の8250 UARTや16450 UARTの欠点は、1バイト受信する度に割り込みが発生することであった。転送速度が向上するにつれて、割り込みが高い頻度で発生することになった。より深刻なことに、受信バッファが1バイトしかないため、割り込み要求への応答が遅れると受信したバイトを読み出す前に次の受信データで上書きされる本質的な危険があった。この欠点を克服するため、16550シリーズのUARTは、割り込みトリガレベルを1,4,8,14バイトにプログラム可能な、16バイトのFIFOを組み込んだ。
不幸なことに、最初の16550にはバグがあり、このFIFOを使用できなかった。NS社はその後、この問題を修正した16550Aをリリースした。しかし、全てのメーカがこの名称を使用しなかったので、修正したチップも16550と呼ばれ続けた。
16550は送信FIFOも組み込んだ。この特徴は絶対的なものではない。送信で要求された割り込みへの応答が遅延しても、次のデータ転送までの間が開いて転送速度が低下するが、データの欠落は発生しない。
TI社のTL16C550C以降では、対応ソフトウェアを利用することによりオートフロー制御を利用できる。受信FIFOが一杯になる前にフロー制御 (RTS) により受信を停止する。割り込みが1,4,8バイトの場合はFIFOが空になると、14バイトではFIFOが空きができると受信を再開する。TL16C550Bまでは、NSの16550Aと同じ機能レベルである。TI社はその後、更なる高速化とFIFOを64バイトに増量したTL16C750をリリースした。16バイトFIFOモードでは、オートフロー制御を除いてTL16C550Cと同等の動作である。対応ソフトウェアで利用できる64バイトFIFOモードでは、1,16,32,56バイトで割り込みをかけられる。オートフロー制御はどちらのモードでも、また割り込みが何バイトでも、FIFOが空になるまで受信を再開しない。