シリアルポートのピン配置 (「→」 が PC から外部への方向です) (DCD は CD と記載されることもあります) ピン番号 ピン番号 略称 正式名称 方向 動作および目的 9ピン 25ピン 3 2 TxD Transmit Data → PC からバイトデータを送信する 2 3 RxD Receive Data ← PC がバイトデータを受け取る 7 4 RTS Request To Send → RTS/CTS フロー制御 8 5 CTS Clear To Send ← RTS/CTS フロー制御 6 6 DSR Data Set Ready ← 通信可能になったことを知らせる 4 20 DTR Data Terminal Ready → 通信可能になったことを知らせる 1 8 DCD Data Carrier Detect ← モデムが相手と繋がっていることを示す 9 22 RI Ring Indicator ← 電話のベルが鳴っている状態を示す 5 7 Signal Ground
9 本のピンのうち、割り当てが固定されているのは 3 つだけです (transmit(送信), receive(受信), signal ground(接地))。これはハードウェ アに固定されており、変更することはできません。しかし他の信号線はソフト ウェアで制御することができ、ほとんど何にでも使うことができます。しかし、 配線は 2 つの状態しか取れません。すなわち正(+12 V)と負(-12 V) です。正は「オン」であり、負は「オフ」です。例えば、Linux 用のソフトウェ アが DTR に負になるように命令を出すと、ハードウェアは単にこの命令を実 行し、DTR ピンの電圧を -12 V にします。DTR 信号を受け取るモデム(あ るいは他のデバイス)は色々な動作をします。モデムの設定によっては、DTR が負の状態になると電話を切ります。DTR が負(オフ)になったときに無視した り、他の動作をすることもあります。
同じようなことが 6 本の線全てについて言えます。ハードウェアは信号を送 受信するだけですが、それによってどんな動作が行われるのかは、Linux のソ フトウェアやシリアルポートに接続しているデバイスの設定/設計次第です。 また、ほとんどのピンには通常行われる特定の機能がありますが、これは OS やデバイスドライバの設定によって変わってきます。Linux の場合は、ソース コードを変更すれば、これらの信号線の動作を変えることができます(そうし ている人もいます)。
シリアルポートからのケーブルは、必ず別のシリアルポートに接続されま す。モデム等の、シリアルポートに接続するデバイスには、内部にシリアルポート が組み込まれています。モデムの場合、ケーブルは必ずストレートケーブル (同じピン同士が接続される)です。モデムは DCE (Data Communications Equipment) と言われ、コンピュータは DTE (Data Terminal Equipment)と言われます。こ のように DTE と DCE を繋ぐ場合にはストレートケーブルが使われます。DTE 同士を繋ぐにはクロスケーブルを使わなければなりません。このようなケーブル の結線にはたくさんの種類があります(Text-Terminal-HOWTO の "Direct Cable Connection" 節に書かれている例をご覧ください)。
このように色々なケーブルを使うのには理由があります。その 1 つは、信号 が片方向性を持つからです。ピン 2 が信号を送る場合は、(ピン 2 は信号を 受け取ることはできないので)ピン 2 を同じ種類のデバイスのピン 2 に接続 できないのは明らかです。接続してしまうと、両方のピンが同じ線に互いに信 号を送るのに、どちらも信号を受け取れないという状態になってしまいます。 これを解決する方法は 2 つあります。1 つめの方法は、2 種類の異なる機器 を使う方法であり、最初の機器のピン 2 が 2 番目の機器のピン 2 (これは信 号を受信できます)に信号を送るというものです。これは PC(DTE)をモデム (DCE)に繋ぐ時の方法です。2 つめの方法は、異なる種類の機器を使わずに接 続を行う方法です。すなわち送信ピン 2 を同じ種類の機器のピン 3(受 信ピン)に繋ぎます。これは 2 台の PC を接続する時や、PC を端末に 繋ぐ時の方法です(DTE 同士の接続)。この目的で使われるケーブルは クロスケーブルと呼ばれます。 この例は 25 ピンコネクタの場合ですが、9 ピンコネクタの場合は ピンの番号はちょうど逆になります。
シリアルのピン指定は元々、ダム端末をモデムに接続するためのものでした。 端末は DTE (Data Terminal Equipment)で、モデムは DCE (Data Communication Equipment)でした。現在は普通は端末ではなく PC が DTE として使われます(ただし本物の端末もまだ DTE として使われています)。 ピンの名前は DTE でも DCE でも同じです。この場合には「受信(receive)」 「送信(transmit)」という言葉は PC (DTE) から見た立場で示されます。PC の送信ピンからはモデムの「送信」ピンにデータが送られます(しかし実際に は、モデムはこのピンからデータを受け取るので、モデムの立場から見るとこ れは受信ピンと言えます)。
シリアルポートは元々、DTE を DCE に接続するためのものであり、その場合 にはケーブルの結線は単純です。単にストレートケーブルを使ってください。 したがってモデムを使う場合には、ピンの配置を気にする必要はほとんどあり ません。 しかし、DTE を DTE に(例えばコンピュータを端末に)繋ぎたいという人々が いて、色々な特殊ケーブルが開発され、さまざまな接続方法が考案されました。 この場合には、ピンの繋げ方は重要です。
これは「ハードウェア」のフロー制御です。フロー制御は既に フロー制御の節で説明していますが、ピン と電圧に関する説明はしていません。Linux は現時点では RTS/CTS によるフ ロー制御しかサポートしていません(特定のアプリケーション用の特殊ドライ バでは DTR/DSR フロー制御をサポートしているものもあります)。ここでは RTS/CTS フロー制御しか説明しません。なぜなら DTR/DSR フロー制御の動作 も同様だからです。RTS/CTS フロー制御を行うには、アプリケーションプログ ラムでハードウェアフロー制御を選択するか、あるいは 「stty crtscts < /dev/ttyS2」というコマンド(あるいは同様のコマンド) を使う必要があります。これにより、Linux のデバイスドライバにおける、ハー ドウェアによる RTS/CTS フロー制御が有効になります。
それから DTE (PC 等)が入ってくるデータを止めたい時には、RTS をオフにし ます。RTS(「Request To Send」)をオフ(-12 V)にするのは「データをこ ちらに送らないでくれという要求(Request NOT To Send to me)」(送信停止) という意味です。PC が次のバイトデータを受け取る準備ができた時は、RTS をオン(+12 V)にすると、バイトデータが再び流れてくるようになります。 フロー制御信号が流れる向きは常に一方向であり、制御されているバイトデー タの流れの逆向きです。DCE 機器(モデム)も同様に動作しますが、停止信号を CTS ピンから送ります。このように、RTS/CTS フロー制御では線を 2 本を使 います。
この停止信号はどのピンで受信されるのでしょうか? それは DCE-DTE 接続と DTE-DTE 接続で異なります。DCE-DTE 接続の場合には、ストレートケーブルが 使われるので、信号が受信されるのは当然ながら信号が送られたピンと同じ名前 のピンです。この場合は RTS→RTS (PC からモデムの向き)および CTS←CTS(モデムから PC の向き)となります。DTE 同士の接続の場合も説明 は簡単です。常に RTS ピンが送信を行い、CTS ピンが受信を行います。 2 台の PC (PC1 と PC2)がシリアルポート経由で接続される場合を考えてみま しょう。この場合は RTS(PC1)→CTS(PC2) および CTS(PC1)←RTS(PC2) とな ります。言い換えれば、RTS と CTS が交差しています。このようなケーブル は(他の信号も交差しています)、「クロス」ケーブルと呼ばれます。詳しくは シリアルポート間のケーブル接続の節をご覧く ださい。
元々の RTS の使い方は先程の説明と反対なので、時々紛らわしくなります。この元々 の使い方とは「データをそちらに送るという要求(I Request To Send to you)」 です。この要求は端末(またはコンピュータ)からモデムに送ることを想定した もので、この要求が受け入れられると、モデムの CTS ピンからコンピュータ の CTS ピンへ CTS 信号が送り返されます(CTS は「データをこちらに送って もよい(You are Cleared To Send to me)」という意味です)。最近の RTS/CTS 双方向フロー制御と異なり、これは片方向のフロー(コンピュータ(または端末) からモデムの方向)しか保護しません。この元々の使用法は、(モデムを含めた) 現在の機器ではほとんど使われていないようです。
RTS と CTS の組合せと同様に、これらのピンも対になっています。DTE 同 士の接続の場合、これらは交差しているでしょう。 これらのピンの使用法は 2 通りあり ます。1 つは RTS/CTS フロー制御の代わりとして使う方法です。DTR ピンは RTS ピンと同様に使えますし、DSR ピンは CTS ピンのように動作します。 Linux は DTR/DSR フロー制御はサポートしていませんが、PC の RTS/CTS ピ ンを DTR/DSR フロー制御を使うデバイスの DSR/DTR ピンに接続することによ り、このようなフロー制御を行うことができます。DTR フロー制御は DTR/DSR フロー制御とほぼ同じですが、片方向通信であり、DSR ピンが使われない点が 異なります。多くのテキスト端末や一部のプリンタではこの種のフロー制御が 使われています。
DTR, DSR の通常の使用法を以下に示します。DTR がオンになっているデバイ スは、電源が入っており動作準備ができていることを示します。モデムの場合 は、PC がモデムに送る DTR 信号の意味はモデムの設定によって変わってきま す。DTR 信号を PC から stty コマンドを使って手動で送るには、ボーレート を 0 に設定してください。DTR をオフにすることは「ハングアップ」と呼ば れることもありますが、常にそれが行われるわけではありません。
"stty -clocal" を実行する(あるいは "local" フラグを無効にして getty を用いる)と、DCD がオン(+12 V)になるまではシリアルポートを オープンできません。