1. トップ
  2. 新着ニュース
  3. IT
  4. IT総合

モデムをつなぐのに必要だったRS-232-CというシリアルI/F 消え去ったI/F史

ASCII.jp / 2024年2月12日 12時0分

 RISC-Vも一段落したところで、さて次に何をやろうかと編集氏と話あっていた時に出たお題が「あとやってないのは消えていったインターフェースですかね。IDEとかSCSIとかRS-232Cとか」。うん、まぁそれはアリだな、なんて思いながら仕事をしていた時に、いろいろ筆者にお題を下さることで定評のある(?)岩崎啓眞氏が「RS-232Cだった時代を知らない人たちの方が圧倒的に多い」なんて事をPostされてて、これはちょうど手頃なお題ではないか、と確信した次第。

 ということで、「昔のPCにはあったのに、もう今はどこに行ってしまったやら」というI/Fを紹介していこう。初回はカセットインターフェースとどっちにするか悩んだのだが、シリアルI/Fを取り上げる。

RS-232-Cという呼び名のほうが浸透している シリアルI/F

 シリアル、あるいはRS-232-Cと言った方がわかりやすいかもしれないが、それこそ10年くらい前のPCには(かろうじて)まだ生き残っていたI/Fである。232Cとハイフンなし表記のほうが世の中では浸透しているようだが、EIAが策定した正式名称は232Cではなく232-Cである。

仕様書に定義されたDTE(Data Terminal Equipment:この場合PC側)のコネクター

 シリアルI/Fというのは要するに「1bit単位でシリアルで通信する」方式である。このシリアルI/F、広義には今だとUSBやPCI Express、I2C/I3C、SPI、...と極めて広範に利用されている通信方式であるが、今回話題にする(つまりインターネット敬老会の方々が言う)シリアルI/FはRS-232-Cと呼ばれるUART(Universal Asynchronous Receiver Transmitter:非同期送受信)方式である。

 やや小難しい話になるが、データ伝送をする場合、シリアルとパラレルの2つがある。シリアルは文字通り1本の信号線で送受信する方法、パラレルは複数本を束ねて送受信を行なう方法だ。この2つだが、以下の相反した特徴がある。

 PC内部のバスや、この後出てくる周辺装置を接続するI/Fでは、パラレルを利用したケースが圧倒的に多い。というのはPCの周辺装置の接続程度であれば、信号線が増えても若干ケーブルが太くなる、あるいは広くなる程度で、信号速度をそれほど引き上げなくても転送速度を稼ぎやすいからだ。

 ではシリアルI/Fはなぜ生まれたか? というと、こちらはもともとの起源が電話線を使ったテレタイプ(*1)に起因するためだ。なにしろ電話線は長距離を引き回すので、ここで複数の線を引き回すのはコストも掛かるし故障や断線などがあったときに故障個所の特定も修理も大変である。

 したがって電話線は1本の電線で構成されるわけだが、これにモデムと呼ばれる「電話線上の信号とテレタイプの信号を双方向変換する」機械をつないでテレタイプに接続する際に、結局モデムは1bitづつ信号を受信(あるいは送信)するので、テレタイプとのI/Fもシリアルのままの方が便利ということになった。

 テレタイプは1849年に最初のサービスが始まり、1970年代末まで利用されている。テレタイプの機械そのものは1980年代いっぱいまで、コンピューターの端末として使われた。その当時はモデムの側でシリアルとパラレルを変換するのが難しく(主にコスト的な問題であるが)、シリアルで受けた通信をそのままモデム経由でテレタイプなりコンピューターに送る、あるいは逆にテレタイプやコンピューターからシリアルで受けてモデム経由で送り出す方が容易だった。

 そういった事情から、テレタイプとモデムをつなぐ規格としてシリアルI/Fが開発されたが、これは当初独自の規格だった。ちなみに1958年にAT&Tが発売したモデムの写真は連載393回の白黒写真である。2つのキャビネットの間に鎮座している電話機の大きさを見れば、いかに大きかったかがわかるが、それは本題ではない。

AT&Tが1958年に発売した110bpsのモデム。連載393回より抜粋

 この独自規格はそれこそテレタイプのメーカーやモデムのメーカーごとにまちまちだったが、Teletype社のテレタイプが次第にシェアを増やし、これの互換機なども登場するようになると、このTeletypeのI/Fが一般的というか業界標準になった。

 そこでこのTeletypeのI/FをTIA(Telecommunications Industry Association:米電気通信工業会)がTIA-232という名前で標準化する。これがのちにEIA(Electronic Industries Alliance Standard:米国電子工業会)でEIA RS-232となった。RSは推奨規格(Recommended Standard)の略で、1960年にRS-232、1963年にRS-233A、1965年にRS-232B、1969年にRS-232-Cと何度か改定されており、最新版は2012年にリリースされたTIA TIA-232F(R2012)であるが、RSを冠するのは1969年版が最後で、それもあってこのRS-232-Cの名前で一般的に通用している。

(*1)「テレタイプ」は1930年に創業したTeletype Corporationの商標で、英語での一般名称はTeleprinterであるが、日本ではテレタイプで通っているので本稿ではテレタイプとする。

※お詫びと訂正:記事初出時、RS-232-Cの写真に誤りがありました。記事を訂正してお詫びします。(2024年2月12日)

RS-232-C接続に使用するのがD-Subコネクター

 RS-232-Cは本来25ピンのD-Subコネクターを使うもので、規格もこの25ピンをベースに定められている。ただ昔の機種はともかく、IBM-PC以降では9ピンのD-Subを使うことが一般的になっている。

2004年頃にShuttleのキューブ型ベアボーンでいろいろやっていた時期のもの。確かAthlon XPだったはず。赤枠の中がRS-232-CのD-Sub9ピンコネクターである

 実際の送受信は、TxDを経由して信号を送り出し、RxDを経由して信号を受け取る。DTR/DSRは相手同士、つまりモデムとテレタイプの電源が入って通信可能かどうかを確認するためのもの。DCDはモデムの先の電話回線がつながっている、つまり電話がかけられ相手と通話中であることを示すものである。RIは逆に相手から呼び出されていることを示すものだ。

 そしてCTSとRTSがフロー制御である。例えばテレタイプの受信処理が間に合わなくなると、データの取りこぼしが起きる。これを防ぐために、テレタイプ側がRTSを0に落とすと、モデム側は転送を中断する。これで時間を稼いで処理が終わり、テレタイプ側がRTSを1に上げると送信側は転送を再開する格好だ。

 CTSは逆にモデム側が間に合わない場合で、これを0に落とすとテレタイプ側が送信を中断、CTSが1になったら再び再開するという仕組みである。

 25ピンでは大半のピンが遊んでいる形だが、これはもともと25ピンはSecondary Data Channelというものを持てる仕組みを用意しており、ところがこれが使われないままコネクターだけが生き残ったからだ。

 このテレタイプが当初の予定を超えてミニコンの端末などとして使われるようになり、そのテレタイプがVDT(Video Display Terminal)に切り替わるようになっても、I/FそのものはRS-232-Cがそのまま生き残った格好である。

VDTは、連載366回で名前が出てきたVT100がその代表例だ。ちなみに写真そのものはVT100のガワだけを流用したDECmate Iである

 これはモデム側も同じで、相手がテレタイプからコンピューターやPCなどに置き換わっても、互換性を保つ目的でRS-232-Cがそのまま使われることになった。そうした経緯から、ホームコンピューター(パーソナルコンピューター)が立ち上がった時点で、特にモデムなどをつなぐ用途としてRS-232-Cが標準装備されることになった。

 最初期のホームコンピューターにはさすがに標準ではない(なにしろモデムでつなぐことそのものが一般的ではなかった)が、例えばTRS-80にはExpansion Interface Cardの形でRS-232-Cを利用可能だった。

TRS-80。本体に内蔵は不可能で、拡張ボックスにRS-232-Cのカードを装着する格好になっている

 日本のホームコンピューターではNECのPC-8001mk2には標準でRS-232-Cポートが追加された。かくして1980年頃から2000年代前半頃までの25年もの間、RS-232-Cは広範に利用されるI/Fとして愛された。

 主な目的はモデムの接続であるが、ほかにPC同士の接続(InterLinkという商品名で2台のPCの間をRS-232-Cのクロスケーブルで接続しファイル転送ができた。対戦プレイができるゲームも存在した)、のちにはマウス(シリアルマウスと呼ばれた。逆に専用I/Fを使うものをバスマウスと呼んだ)や、古いところではライトペン(参考動画)やデジタイザ(今でいうタブレット:液タブと異なり画面はない)などの入力装置だけでなく、産業機器の制御や計測などでも広範に利用された。

 また2010年代頃までラックサーバーにはだいたいフロントパネルにRS-232-Cポートが用意されており、ここにPCなどをつないでターミナルソフトを動かすことで、管理者モードでシステムの設定などが可能だった。例えばブレードサーバーの記事の写真で、最下段に9ピンのD-Subコネクターがあるのがわかる。

HPのc3000エンクロージャー。最下段に9ピンのD-Subコネクターがある

※お詫びと訂正:規格表記に誤りがありました。記事を訂正してお詫びします。(2024年2月12日)

同期を取るために必要な謎の呪文

 RS-232-Cを使うには、下の画像にある謎の呪文が必要である。これは冒頭で触れた「非同期送受信」が関係する。シリアル通信の場合、同期式と非同期式がある。同期式というのはデータとは別に送受信用のクロック信号を用意し、このクロック信号に合わせて送受信を行なう方式であり、I2CやSPIなどがこの代表例である。

謎の呪文。これはUSBポートに接続したwatt up! Proのもの。物理的にはUSB接続ながら、プログラム的にはRS-232-Cでの接続である

 またPCI ExpressやUSB 3.0以降などは、データ信号にクロック信号を埋め込むEmbedded Clockという方式を利用して同期を取っている。これに対し、RS-232-CやUSB 1.1/2.0では、このクロック信号に当たるものが存在しない。

 ではどうやって同期を取るか? という話であるが、RS-232-Cの場合はまず転送速度を最初に定め(上の画像の一番上段がこの設定)、次いでスタートビット/ストップビットを設定する必要がある(スタートビットは1bit固定なので設定はなし)。

 このスタートビットというのはデータビット(データの塊:5~8bit)の頭に同期を取るためのダミーbit、ストップビットは同様にデータビットの後ろに付加されるダミーbitである。RS-232-Cの約束として、スタートビットは0、ストップビットは1になることが決められており、一定期間(これはストップビットの設定次第。1/1.5/2bitの設定が可能)1が続いた後で0になったら、その次から読み出しを開始する格好になる。

 この1→0になったタイミングでタイマーをスタートし、あとはタイマーに応じてデータビットを読み取る格好だ。ちなみにパリティは、データおよびスタート/ストップビットの値を合わせて、パリティ値を設定することで、通信エラーが起きた場合にこれを検出しやすくするためのものである。ただし、必ず検出できるわけではないし、エラー訂正はできない。

 通信速度は75~38.4kbps程度。これは機種にもよる。当初IBM-PCで使われていた8250 UARTでは技術的には最大11万5200bpsの設定が可能だったが、実際の上限は38.4kbpsだった。のちに登場したNS16450と、これに16bytes FIFOを追加して高速転送に対応したNS16550A(NS16550はバグがあってFIFOが動作せず、これの修正版がNS16550Aである)では115.2kbpsが安定して使えるようになり、一部の互換品ではさらに高速な230.4kbpsが可能になった。

 Macintoshも確か最高230.4kbpsが可能だったと記憶している。普通に使うにはこれで十分すぎる速度であったが、のちにISDNモデムやADSLモデムが登場すると遅すぎるという不満が出るようになった。これに対応するために、最大920kbpsを発揮するRS-232-Cカードも市場に登場した。当初はISAだけだったが、VL-BusやPCIのものも登場している。

 なおUSBの場合、通信速度は1.5Mbpsなり12Mbpsの固定(USB 2.0では480Mbpsが追加された)であり、データの塊(フレームと呼ぶ)を送る前に一定期間のSOF(Start Of Frame)という時間があり、このSOFを利用して速度の検出と送受信の同期を取るようになっている。

 話をRS-232-Cに戻すと、通信を正しく行なうためには転送速度とデータビット/パリティ/ストップビットの値を双方の機器で一致させる必要があり、ところがたまに周辺機器をつなごうとしたらこのあたりの設定がわからずに苦労する、なんてことがあったりした。

 ちなみにRS-232-Cの信号、先の表でもわかるように、最低限必要なのはRxD/TxD/GNDで、それにフロー制御を加味してもRTS/CTSの5本の信号線があれば通信は可能である。したがって3ピンあるいは5ピンのコネクターが出ているだけ、という機器も世の中には存在した。もちろんこれは機器側の話で、ケーブルの反対側には9ピンないし25ピンのコネクターが付いていた。

 またAppleのMacintoshシリーズは8ピンのDINコネクターが採用されていた。ではDCDやRI、DTR/DSRは使われなかったか? というと、モデム相手にはちゃんと利用された。最初期のモデムは、ユーザーがプロバイダーなりホストなりに電話をかけ、相手が出たらモデムに切り替えるという原始的な接続方法を取っていた。音響カプラを使って通信するのもこれと同じ手順になる。

 例えば着信応答機能付きFAXモデム(けっこう普通にあった)を使って留守電機能やFAX受信機能を使ったり、あるいはモデム経由でプロバイダー(やその前だとパソコン通信ホスト)に通信ソフトから電話をかけて自動接続するためにはDCDやRI、DTR/DSRが必須になるために、PCあるいはモデムはこのあたりの信号のハンドリングをきちんと行なっていた。逆にシリアルマウスなどは、そもそもマウスが受信しても仕方ないので、マウスからの送信のみが実装されていたりした。

USBにその座を奪われ、物理的なポートは姿を消すが プログラム的にはいまだに健在

 そんなRS-232-Cであるが、USBの登場で急速にその座を追われることになった。最大の理由はインテルとマイクロソフトが制定したPCxxシリーズである。

 もともとUSBが登場したのは、RS-232-Cを含むさまざまなI/F規格がPCの中に混在しており、その設定も大変なら使い分けも大変で、これをもう少しなんとかしたいという目的の元に開発されたが、別に「USBを搭載したPCにRS-232-Cを搭載することはまかりならぬ」という制約はなかったし、当初はUSBも互換性などの面で問題が多かったので両者は共存していた。

 ところがマイクロソフトはインテルと共同で、まずWindows 95に合わせてHardware Design Guideを発表。次いでPC 97 Hardware Design Guide/PC 98 System Design Guide/PC 99 System Design Guide/PC 2001 System Design Guideといった仕様を2000年までに相次いで打ち出し、この中で段階的にRS-232-CやそのほかのI/FをUSBに置き換えるように指導していく。

 この流れを受けて周辺機器メーカーも次第にRS-232-CからUSBにI/Fを置き換えていき、そうなるとRS-232-Cを搭載しても使われる頻度が減る。結果、まずバックパネルからRS-232-Cが消え(ただしマザーボード上にはポートが用意されており、拡張スロットのブラケットにコネクターを装着する形)、2010年頃にはポートそのものが消えるようになった。

 もっとも組み込み用途や古い周辺機器を使いたいというニーズは消えないため、そうした用途向けにRS-232-Cポートを搭載した製品はまだ存在する。またUSBとRS-232-Cの変換アダプターは多数存在しており、例えばArduino UnoをUSBでPCと接続すると、プログラム的にはRS-232-Cで接続されているように見える仕組みだ。要するに物理的なポートが消えても、プログラムから見ればまだRS-232-Cは健在というわけだ。

この記事に関連するニュース

トピックスRSS

ランキング

記事ミッション中・・・

10秒滞在

記事にリアクションする

記事ミッション中・・・

10秒滞在

記事にリアクションする

デイリー: 参加する
ウィークリー: 参加する
マンスリー: 参加する
10秒滞在

記事にリアクションする

次の記事を探す

エラーが発生しました

ページを再読み込みして
ください