シリアルポート
シリアルポートとは、情報を（パラレルポートとは異なり）1度に1ビットずつ送受信するシリアル通信物理インタフェースである。パーソナルコンピュータの歴史の大半において、データはシリアルポートを通じてモデム、端末、その他様々な周辺装置のデバイスに伝送された。
イーサネット、FireWire、そしてUSBといったインタフェースも全てデータをシリアルストリームとして送信するが、「シリアルポート」という用語は通常、モデムやそれに類似した通信デバイスとの接続を目的としたRS-232規格と上位互換または下位互換なハードウェアと同一視される。
シリアルポートがない現代のコンピュータでは、RS-232シリアルデバイスとの互換を可能とするためにはシリアル-USB間のコンバータが必要となる。工業自動化システム、科学計器、POSシステムのようなアプリケーションや、一部の工業用および消費者製品では未だにシリアルポートを使用している。サーバコンピュータはシリアルポートを診断用制御コンソールとして使用することがある。（ルーターやスイッチといった）ネットワーク機器は設定用にシリアルコンソールを使用することが多い。シリアルポートは単純で安価であり、コンソール機能が高度に規格化され普及しているため、ネットワーク機器の分野では未だに使用されている。シリアルポートはホストシステムからのソフトウェアサポートをほとんど必要としない。
IBM PCのようにコンピュータの中には、非同期シリアル形式に文字を変換したり逆に文字を非同期シリアル形式に変換したり、さらに自動でデータのタイミングや構造の面倒を見てくれるUARTと呼ばれる集積回路を使用しているものもあった。初期のホームコンピュータに見られたようにとても低コストなシステムではビットバンギング技術を使用することで、出力ピンを通じたデータの送信用にはUARTの代わりにCPUを使用していた。ラージスケールインテグレーション (LSI) UART集積回路が普及する前のミニコンピュータやマイクロコンピュータは、シリアルポート用のシフトレジスタ、論理ゲート、カウンタやその他全てのロジックを実装した複数のスモールスケール集積回路から構成されたシリアルポートを搭載していた。
初期のホームコンピュータはRS-232と非互換なピンアウトであったり、RS-232と非互換な電圧レベルであるプロプライエタリなシリアルポートを搭載していることが多かった。このようなシリアルポートは生成される電圧レベルに耐えられなかったり、特定業者の製品にユーザをロックインするために様々な違いがあったりするので、RS-232デバイスとの相互運用が不可能な場合もある。
低価格プロセッサにより、RS-232を代替するUSBやFireWireのような現在の高速でより複雑なシリアル通信規格が可能となった。低価格プロセッサにより、マスストレージ、音楽、そしてビデオデバイスといったより低速なシリアル接続ではうまく動作しないデバイスを接続できるようになる。
ピンヘッダを通じてしかアクセスできないとしても、多くのパーソナルコンピュータのマザーボードには未だに最低1個のシリアルポートが搭載されている。スモールフォームファクタシステムやラップトップではスペースを節約するためRS-232コネクタポートが省かれているが、回路は依然として存在する。RS-232が標準となって非常に長いため、シリアルポートを制御するために必要な回路はとても安価になった。さらにRS-232は、時にはパラレルポート用の回路も併せた単一のチップとして存在することがよくある。
シリアルポートの個々の信号は単方向で、2つのデバイスを接続する時1つのデバイスの出力はもう1つのデバイスの入力に接続しなければならない。デバイスは「データ端末装置」(Data Terminal Equipment, DTE) と「データ回線終端装置」(Data Circuit-terminating Equipment, DCE) の2種類に分類される。DTEデバイスへの出力である回線はDCEデバイスへの入力であり、DTEデバイスへの入力である回線はDCEデバイスへの出力である。このため、ストレート有線ケーブルでDCEデバイスをDTEデバイスに接続できる。慣例として、コンピュータと端末はDTEであり、モデムと周辺装置はDCEである。
2つのDTEデバイス（または非常にまれだが2つのDCEデバイス）を接続する必要がある場合、アダプタかケーブルのどちらかの形式によるクロスオーバーヌルモデムを使用しなければならない。
RS-232規格では元々25ピンDタイプコネクタが指定されていたが、パーソナルコンピュータ設計者の多くはフル規格のサブセットのみを実装するように決めた。彼らは安価でよりコンパクトなコネクタ（特に元々のIBM PC-ATで使われたDE-9）の使用と引き換えに規格との互換性を犠牲にした。2個のポートを搭載するシリアルインタフェースカードを提供したかったため、IBMはシングルカード背面パネルにフィットするようコネクタのサイズを小さくする必要があった。DE-9コネクタならば、もう一つのコネクタであるDB-25コネクタを搭載するカードにもフィットする。このDB-25コネクタも元々のセントロニクス仕様から、DE-9コネクタと同じ理由で変更されたものである。IBM PC-ATが導入された頃からコストとスペースを節約するため、シリアルポートは通常9ピンコネクタで構築された。しかしながら、9ピンD-subminiatureコネクタはビデオ、ジョイスティック、そして他の目的にも使用されていたため、9ピンD-subminiatureコネクタが存在していても、実際には接続がシリアルポートによるものであることをはっきりさせるには不十分である。
特にグラフ電卓と携帯アマチュア無線機、そして送受信兼用無線機器のように小型化された電子装置の中にはフォーンコネクタを用いるシリアルポートを搭載したものもあり、そのコネクタは通常2.5または3.5mmよりも小さい。さらにこれら電子装置の中には、最も基本的な3線インタフェースを使用するものもある。
Macintoshのモデルの多くは最も初期のモデルを除き、主にドイツ製のMini-DINコネクタを使用して、RS-232の親戚であるRS-422規格を好んで採用していた。Macintoshにはプリンターとモデムへの接続用に2つのポート一組を標準として搭載していたが、PowerBookラップトップの中には省スペースのため統合された1つのポートしか搭載していないものもあった。
規格では20個の異なる信号接続を指定している。ほとんどのデバイスは数個の信号しか使わないため、より小さいコネクタが使用されることが多い。例えば9ピンDE-9コネクタはIBM PC AT以降のほとんどのIBM互換PCで使用されており、TIA-574として標準化された。最近ではモジュラコネクタが使用されてきている。8P8Cコネクタが最も一般的である。EIA/TIA 561規格ではピン割り当てを指定しているが、UNIXコンピュータやシスコシステムズ製の新しいデバイスではDave Yostが発明した（そして『Unix System Administration Handbook』で普及した）「Yostシリアルデバイス配線規格」が標準である。多くのデバイスはEIA/TIA 561規格とYost規格のどちらも使用していない。デバイスの中には10P10Cコネクタも見られる。ディジタル・イクイップメント・コーポレーション (DEC) はModified Modular Jack (MMJ) コネクタをベースにした、DEC固有のDECconnect接続システムを定義した。これはキーが中心位置からずれている6ピンモジュラジャックである。Yost規格と同様に、DECconnectは2つのDTEを直接接続することを可能にする、対称ピン配置を使用する。他の一般的なコネクタとしては、普通はケーブル経由でより標準的な9ピンDE-9コネクタに変換される、マザーボードやアドインカードでは一般的な（そして空きスロット板や他の覆いの部分にマウントされた）DH10ヘッダコネクタがある。
以下の表は一般に使用されるRS-232信号とピンの割り当てを一覧にしたものである。
信号は、例えばIBM-PC互換のシリアルポートのような、DTEの立場から名付けられている。接地信号は他の接続に共通の値を返す。これはYost規格では2つのピンに見られるが、共に同じ信号である。DB-25コネクタにはピン1にあるもう一つの「保護接地」が含まれる。これにピン7（信号接地）を接続することが一般的な習慣であるが、必須ではない。
EIA/TIA 561ではDSRとRIが統合されており、Yost規格ではDSRとDCDが統合されていることに注意すること。
オペレーティングシステムでは通常、コンピュータのシリアルポートを参照するのにシンボル名を使用する。Unix系オペレーティングシステムでは通常、シリアルポートデバイスを/dev/tty*（「TTY」は"teletype"の一般的な商標フリーな省略形）と名付ける。ここで、*の部分には端末デバイスを識別する文字列が入る。*文字列の構文はオペレーティングシステムとデバイスに依存する。Linuxでは8250/16550 UARTハードウェアシリアルポートは/dev/ttyS*と名付けられ、USBアダプタは/dev/ttyUSB*となる。しかし様々な種類の仮想シリアルポートは必ずしもttyで始まる名前を有しているとは限らない。
マイクロソフトのMS-DOSとWindows環境では、シリアルポートをCOMポートとして参照する。COM1、COM2、..などとしてである。COM9よりも大きい番号のポートは\\.\COM10構文を用いて参照する必要がある。
専門的なデバイスや特注のデバイスの多くはRS-232規格を使用する。以下の一覧にはPCのシリアルポートに接続される、より一般的なデバイスがいくつか含まれる。これらデバイスの中には容易に使用できるものがある一方、モデムやシリアルマウスのように使用されなくなったものもある。
シリアルポートにたいていの種類のマイクロコントローラが付属していることは最早当然であり、PCや他のシリアルデバイスと通信するためにこれらのシリアルポートを使用できる。
シリアルポートへの制御信号はスイッチで容易にオンオフが可能なため、上記の適用の中には、シリアルデータを取り交わすことなく外部デバイスを監視するためにシリアルポートの制御回線を使用するものもあった。この原理を用いた一般的な商用適用としては、「電飾損失」、「バッテリー低下警告」そして他のステータス情報信号のために制御回線を使用する無停電電源装置の一部のモデルがあった。モールス符号トレーニングソフトの中には、実際のコード使用をシミュレートするため、シリアルポートへ接続されるコードキーを使用していたものも少なからずあった。トレーニングソフトがモールス符号を解読できるので、シリアルポートのステータスビットを非常に迅速かつ予測可能な時間で実際にサンプリングすることが可能であった。
速さ、文字ごとのデータビットの数、パリティ、そして文字ごとのストップビットの数を選び抜くため、非同期スタートストップ通信に使用されるシリアル接続には多くの設定が必要となる。UART集積回路を使用する現在のシリアルポートでは、設定は通常全てソフトウェア制御である。1980年代以前のハードウェアでは回路基板にあるスイッチやジャンパの設定が必要なこともある。イーサネット、FireWire、そしてUSBといったシリアルバス規格でもたらされた簡素化の1つに、シリアルバス規格のパラメータの多くが固定された値となっていることが挙げられる。このためユーザは設定を変更できないか、変更の必要がない。速度は固定されるか自動的に取り決められるかのいずれかである。何度設定を間違って入力しても接続は切断されない。しかしながら、受信側では送信されたデータを全て無意味なものとみなす。
シリアルポートは2値（バイナリ）信号を使用している。このためビット毎秒単位のデータ転送速度はボー単位の符号転送速度に等しい。一連の標準転送速度は電気機械式テレプリンタ用の転送速度の倍数に基づいている。シリアルポートの中には多くの転送速度から任意の速度を選択できるものがある。ポートの速度とデバイスの速度は一致させる必要がある。ビット転送速度を設定できても、実用的な接続となるわけではない。全てのビット転送速度が全てのシリアルポートで利用可能であるとは限らない。楽器コントロール用のMIDIのような特定用途のプロトコルの中には、テレプリンタ用転送速度の倍数以外のシリアルデータ転送速度を使用するものもある。シリアルポートシステムの中には自動的にビット転送速度を見つけるものもある。
速度には（ストップビットやパリティなどの）構造用のビットが含まれる。このため実効データ転送速度はビット伝送速度以下になる。例えば8-N-1キャラクタのフレームではビットの80%のみがデータとして使用可能である（データの8ビットごとに、さらに2つのフレーミングビットが送られる）。
サポートされるビット転送速度には通常、75、110、300、1200、2400、4800、9600、19200、38400、57600そして115200bit/sが含まれる。周波数が1.843200MHzの水晶発振器は特にこの目的のために販売されている。この周波数は最も早いビット転送速度の16倍であり、シリアルポート回路は必要に応じて容易にこの周波数をより低い周波数に分割することができる。
各文字のデータビット数は5（Baudot Code用）、6（まれに用いられる）、7（純粋なASCII用）、8（このサイズがバイトのサイズとマッチするように、ほとんどの種類のデータ用）、または9（まれに用いられる）とすることができる。新しいシリアルポートの適用例では8データビットを使用するのがほぼ一般的である。5や7ビットは一般的にテレプリンタのような古い装置と共に用いる時のみ意味をなす。
ほとんどのシリアル通信設計では、各バイトのLSB（Least Significant Bit、最下位ビット）にあるデータビットを最初に送信するようになっている。この規格は「リトルエンディアン」としても言及される。「ビッグエンディアン」、すなわちMSB（Most Significant Bit、最上位ビット）を最初に送るシリアル通信も使用できるがほとんど使われていない。例としてビッグエンディアンはIBM 2741印刷端末で使用されていた（ビット順序についてより詳しい情報についてはビットナンバリングを参照すること）。ビットの順番は通常シリアルポートインタフェース内部では設定できない。ローカルのデフォルトとは異なるビット順序を必要とするシステムと通信するため、ローカルソフトウェアは送信直前や受信直後に、各バイトに含まれるビット順序を再設定できる。
パリティは伝送における誤り検出手法である。パリティをシリアルポートで使用する場合、各データ文字と共に余分なデータビットが送信され、パリティビットを含む各文字の1であるビットの数が常に奇数か常に偶数となるよう調整される。間違った1であるビットの数を受信した場合、それを却下しなければならない。しかしながら、誤りの数が偶数であればパリティ検査を通過できる。
電気機械式のテレプリンタはラインノイズで損害を受けたメッセージを発見できるように、受信データがパリティエラーを含む場合に特殊文字を出力するよう調整された。単一のパリティビットでは各文字の誤り訂正を実装できないので、シリアルデータリンクをやり直す通信プロトコルはデータが有効であることを保障し、誤って受信されたデータの再送を要求するハイレベルなメカニズムを有している。
各文字のパリティビットは無し (None, N)、奇数 (Odd, O)、偶数 (Evevn, E)、マーク (Mark, M)、もしくはスペース (Space, S)に設定できる。無しはパリティビットが一切送られないことを意味する。マークパリティはパリティビットが常にマーク信号状態（論理的に1）に設定され、同様にスペースパリティは常にスペース信号状態のパリティビットが送られることを意味する。マークやスペースパリティは、いくつかの種類のアドレッシングや特殊信号用に9番目の（パリティ）ビットを使用するまれな適用例を除き、誤り検出情報を追加しないため一般的ではない。奇数パリティは偶数パリティよりも有用である。なぜなら奇数パリティは各文字に少なくとも1つの状態遷移が存在することを保証しているからであり、奇数パリティをより信頼できるものとしている。しかしながら通信プロトコルが誤り検出を行うため、最も一般的なパリティ設定は「無し」である。
各文字の終わりに送信されるストップビットにより、受信信号ハードウェアが文字の終わりを検出することができ、さらに文字ストリームと再同期できる。電気デバイスは通常1つのストップビットを用いる。低速な電気機械式テレプリンタを使用する場合、1と1/2個あるいは2個のストップビットが必要となる。
D/P/S (Data/Parity/Stop) 慣例表記はシリアル接続の構造を表す。マイクロコンピュータで使用されるのはほとんど8/N/1 (8N1) である。これは8データビット、パリティなし、1ストップビットを表す。この表記において、パリティビットはデータビットに含まれない。7/E/1 (7E1) は、スタートビットとストップビットの間にある計8個のビットのうちの7個のデータビットに、偶数パリティビットが追加されていることを意味する。7/E/1ストリームの受信者が8/N/1ストリームを期待している場合、受信可能なバイトの半分は高ビットがセットされていると解釈される。
シリアルポートはデータ通信を中断したり再開するためにインタフェースの信号を使用することがある。例えば、遅いプリンターはメカニズムが行を進めている間はデータを中断するよう指示するため、シリアルポートを用いたハンドシェイクが必要な場合があった。
ハードウェアハンドシェイク信号（ハードウェアフロー制御）は通常、RS-232 RTS/CTSまたはDTR/DSR信号回線を使用する。一般的に、例えばバッファがほぼいっぱいの場合、RTSとCTSはデータフローを制御するためにどちらか一方のエンドからオンオフされる。DTRとDSRは通常常時オンであり、RS-232規格やその後継規格で、反対側のエンドの装置が実際に存在し起動している各エンドから信号を送るために使用される。しかしながら、例えばDTRをフロー制御に使用するプリンターのように、メーカーは数年に渡り規格に準拠しないバリエーションを実装した多くのデバイスを確立してしまった。
フロー制御の別の方式では、データフローを制御するためにXON/XOFFのような特殊文字を使う。送信者がいつデータを送信するかを制御するために、受信者が送信者に対しXON/XOFF文字を送信する。つまりXON/XOFF文字はデータが送信される方向とは反対方向へ向かう。回線は「送信許可」状態で開始される。受信者のバッファが容量に達した場合、受信者は送信者にデータ送信を停止するよう命じるためにXOFF文字を送信する。その後受信者はバッファを空にした後、受信者は送信者に伝送を再開するよう命じるためにXON文字を送信する。XON/XOFF文字は非出力文字であり、プリンター、端末、そしてコンピュータシステムによりハンドシェイク信号として解釈される。
XON/XOFFフロー制御は、データ用に使用される通信路と同じ通信路を通じて制御情報が送信される、インバウンド信号方式の例である。XON文字とXOFF文字は送信されるデータ中に出現する可能性があり、さらに受信者はXON文字とXOFF文字をフロー制御として解釈してしまう可能性があるため、XON/XOFFハンドシェイクは困難となる。これを防ぐため、データストリームの一部として送信されるXON文字とXOFF文字をエスケープシーケンスでエンコードする必要があり、送受信ソフトウェアはこれらエスケープシーケンスの生成および解釈を行う必要がある。その反面、余分な信号線を必要としないためXON/XOFFフロー制御は3線インタフェースで処理が行える。
仮想シリアルポートは標準シリアルポートのエミュレーションである。このポートは（拡張カードのような）追加のハードウェアインストールをせずに、オペレーティングシステムのシリアルポートを追加できるソフトウェアにより作成される。たくさんの仮想シリアルポートをPCに作成できる。制限は、多くのシリアルポートを同時にエミュレートするために必要な、操作用メモリや演算能力といったリソースの量だけである。
仮想シリアルポートは、ボーレート、データビット、パリティビット、ストップビットなどを含む全てのハードウェアシリアルポート機能をエミュレートする。さらに全ての信号線 (DTR/DSR/CTS/RTS/DCD/RI) をエミュレートしピンアウトをカスタマイズすることで、データフローを制御することができる。仮想シリアルポートはBluetoothと共に用いることが一般的であり、Bluetooth搭載のGPSモジュールからデータを受信するための標準的な手段である。
仮想シリアルポートエミュレーションは、使用可能な物理シリアルポートが足りない場合や現在の要件を満たさない場合に役立つ。例えば仮想シリアルポートは、シリアルポートに接続された1つのGPSデバイスに基づく複数アプリケーション間でデータを共有できる。また、インターネットやLAN経由でどんなシリアルデバイスとも、まるでコンピュータとローカルで接続されているかのように通信することもできる（Serial over LAN/Serial-over-Ethernet技術）。2つのコンピュータやアプリケーションはエミュレートされたシリアルポート接続を通じて通信することが可能である。仮想シリアルポートエミュレータはMac OS、Linux、Microsoft Windowsの様々なモバイルやデスクトップバージョンを含む多くのオペレーティングシステムで使用できる。