シリアルポートのピン配置 (--> 向きは 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 ボルト)と負(-12 ボルト) です。正は「オン」であり、負は「オフ」です。例えば、Linux 用のソフトウェ アが DTR に負になるように命令を出すと、ハードウェアは単にこの命令を実 行し、DTR ピンの電圧を -12 ボルトにします。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 つ目の方法は、異なる種類の機器を使わずに接 続を行う方法です。すなわちピン 3(送信ピン)を同じ種類の機器のピン 3(受 信ピン)に繋ぎます。これは 2 台の PC を接続する時や、PC を端末に 繋ぐ時の方法です(DTE 同士の接続)。この目的で使われるケーブルは クロスケーブルと呼ばれます。
シリアルのピン指定は元々、ダム端末をモデムに接続するためのものでした。 端末は DTE (Data Terminal Equipment)で、モデムは DCE (Data Communication Equipment)でした。現在は PC は普通、端末ではなく DTE として扱われます(ただし本物の端末は今でもそのように扱われます)。ピ ンの名前は DTE でも DCE でも同じです。この場合には「受信(receive)」 「送信(transmit)」という言葉は PC (DTE) から見た立場で示されます。PC の送信ピンからはモデムの「送信」ピンにデータが送られます(しかし実際に は、モデムはこのピンからデータを受け取るので、モデムの立場から見るとこ れは受信ピンと言えます)。
シリアルポートは元々、DTE を DCE に接続するためのものであり、その場合 にはケーブル配線は単純です。ストレートケーブルを使ってください。 したがってモデムを使う場合には、どのピンがどれかを気にする必要はほとん どありません。しかし、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 ボルト)にするのは「データをこ ちらに送らないでくれという要求(Request NOT To Send to me)」(送信停止) という意味です。PC が次のバイトデータを受け取る準備ができた時は、RTS をオン(+12 ボルト)にすると、バイトデータが再び流れてくるようになります。 フロー制御信号が流れる向きは常に一方向であり、制御されているバイトデー タの流れの逆向きです。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 ボルト)になるまではシリアルポートをオープ ンすることができません。