次のページ 前のページ 目次へ

16. 電圧の波形

16.1 ビット 1 つを表す電圧

EIA-232 準拠のシリアルポートでは、電圧は二極式(接地電圧に対して正ま たは負)であり、その大きさは 12 ボルトです(5 または 10 ボルトのものもあ ります)。送信ピンと受信ピンでは +12 ボルトが 0 を表すビット(「space」 と呼ばれることもあります)で、-12 ボルトが 1 を表すビットです(「mark」 と呼ばれることもあります)。これは反転論理として知られています。という のも、普通は 0 を表すビットは偽かつ負であり、1 は真と正を表すのが普通 だからです。送信ピンと受信ピンは反転論理ですが、他のピン(モデム制御線) は通常の論理を用いており、正の電圧が真(または「オン」)であり、負の電圧 が偽(または「オフ」)を表します。電圧 0 は意味を持ちません(その機器の電 源が切れているという意味だけは持ちます)。

電圧に範囲を持たせることもできます。仕様においては、送信される信号の強 さは 5 ボルトと 15 ボルトの間でなければならず、25 ボルトを越えてはなり ません。3 ボルト未満の電圧は未定義です(ただしデバイスによっては電圧が 低くても有効であるとして受け付けます)。 電圧は一般的には 5 ボルト(または 3 ボルトのこともあります)なのに、 11-12 ボルトが普通に使われているという誤った苦情を見ることがあります。 Macintosh の EIA-422 ポートを EIA-232 (特殊なケーブルが必要)や EIA-423 としてお使いならば、電圧は実際に 5 V しか許されません。ここでの説明で は 12 V を使うものとします。

通常のコンピュータの論理回路は数ボルト(かつては 5 ボルトが標準だったこ ともありますが)しか使わないので、3-5 ボルトのコンピュータ回路(TTL)の試 験用に設計されたテスト機器を12 ボルトのシリアルポートに対して用いると、 テスト機器が壊れてしまうことがあります。

16.2 バイトデータを表す電圧シーケンス

送信ピン(TxD)は、何も送っていないアイドル状態の時には -12 V (mark 状態)を保持しています。バイトデータを送る際には、送信ピンはスタートビッ トを送るために +12 V (space 状態)となり、スタートビットを送る間(区間) は +12 V を保ちます。次にバイトデータの下位ビットが送られます。0 を表 すビットの場合は、何も変化せず、このバイト区間の間は送信ピンは +12 V のままです。1 を表すビットの場合は、電圧は +12 V から -12 V に変わりま す。次のビット以降も同様に送られます(1 ならば -12V, 0 ならば +12V)。 最後のデータビットの後にはパリティビットや、その後の -12 V (mark 状態) のストップビットが送られることもあります。その後は、次のスタートビット までは送信ピンは -12 V(アイドル状態)のままです。 0 ボルトが返ってくることがないことと、そのため同じ極性を持つビットが 2 つ続く場合(0 が続く、あるいは 1 が続く場合)には、あるビットが終わっ て次のビットが始まることを表す簡単な方法が(同期信号以外には)ない点に注 意してください。

2 番目のストップビットも -12 ボルトになります。これは最初のストップビット と同じです。これらのビット間の境界を示す信号が無いため、2 番目の ストップビットの影響は、送信ピンが続けている -12 ボルトのアイドル状態の長 さが 2 倍になる以外にはありません。2 番目のストップビットとバイト間の 長いアイドル時間の区別を付ける方法は、受信側にはありません。 したがって、うまく通信できるのは、通信の片側がストップビットを 1 つ用 い、その反対側がストップビットを 2 つ用いた場合です。ただし、1 つしか ストップビットを用いない方が明らかに高速です。稀ですが、1 1/2 個の ストップビットが使われることがあります。これは送信ピンが 1 1/2 区間の 間 -12 ボルトを保つという意味です(ストップビットの長さが通常の 5 割増しに なったようになります)。

16.3 パリティ検査

文字は普通、7 ビットまたは 8 ビットのデータで送信されます。これに パリティビットを追加すると(追加しないこともあります) 1 バイトの長さは 7, 8, 9 ビットのいずれかとなります。一部の端末エミュレータや古い端末で は、9 ビットは使えません。ストップビットを 2 つ使うと 9 ビットが使えな くなる端末もあります(というのも、スタートビットを追加した後の合計のビッ ト数が 12 ビットと多くなりすぎるからです)。

パリティには「奇数(odd)」、「偶数(even)」、「なし(none)」のいずれかを 設定します(一部の端末では、mark パリティや space パリティがオプション として使えます)。奇数パリティを使うと、バイトデータ中で値が 1 になって いるビットの数が(パリティビットも含めて)奇数となるようにパリティビット が決められます。ビットがひっくり返って、このようなバイトデータが壊れた 場合、得られるデータは不正な偶数パリティのデータとなります。このエラー は検出されるので、これが端末が受け取ったバイトデータであった場合には、 文字化けを表す記号を画面に表示できます。偶数パリティの動作も同様であり、 有効なバイトデータ中の 1 であるビット数が(パリティビットも含めて)偶数 となるようにします。設定時には通常、文字当たりのビット数はバイト当たり のデータビットの数だけを意味します(正式な ASCII の場合には 7 ですし、 各種 ISO 文字集合の場合には 8 です)。

"mark" は値が 1 であるビット(つまり論理値の 1)であり、"space" は値が 0 であるビット(つまり論理値の 0)です。mark パリティの場合には、パリティ ビットは常に値が 1 であるビットです。space パリティの場合には、これは 常に値が 0 であるビットです。mark パリティや space パリティは単にバン ド幅を無駄にするだけなので、できる限り使わないようにすべきです。「パリ ティ無し」は、パリティビットを追加しないという意味です。9 ビットからな るバイトデータを受け付けない端末を使う場合、8 ビット文字集合を使うなら ば「パリティ無し」を選択しなければなりません。これはパリティビットを入 れる空きが無いからです。

16.4 バイトデータの構成 (フレーム分割)

EIA-232 を使ったバイトデータのシリアル伝送では、常に低位のビットか ら先に送られます。PC のシリアルポートは非同期通信を行います。この非同 期通信では、スタートビットとストップビットがバイトデータの始めと終わりを示 します。このような区切り方はフレーム分割と呼ばれ、フレーム分割されたバ イトデータはフレームと呼ばれることがあります。結果として、1 バイトごと に 9 個 あるいは 10, 11 個のビットデータが送られます。この中で最も一般 的なのは 10 個です。8-N-1 とは、データビット 8 個、パリティ無し、ストップ ビット 1 個という意味です。スタートビットを数に入れると合計 10 ビットに なります。ストップビット 1 つはほぼ例外なく使われます。 110 ビット/秒(300 ビット/秒の時もあります)では、ストップビットが 2 つ使わ れていたこともありましたが、現在は 2 つ目のストップビットが使われるのは ごく例外の時(あるいは、その設定でもうまく動作するために間違って使われ ているけれど、バンド幅を無駄に消費している)だけです。

16.5 「非同期」通信で同期を行う方法

PC が装備している EIA-232 のシリアルポートは非同期です。 つまり実際には、それぞれのビットを送る時に「時間を刻む」ための「クロッ ク」信号が送られないということです。送信(受信)用の線には 2 つしか状態 がありません。すなわち mark 状態(-12 V) と space 状態(+12 V)です。0 V の状態はありません。したがって 1 ビットのシーケンスは、ビットとビット の間を示すマーカーが無い定常的な -12 V だけを使って送られます。受信側 で個々のビットを区別するためには、送信側のクロックと同期しているクロッ ク信号が必ず必要です。このようなクロックは送信(受信)される各ビットと同 期している「時間の刻み」を生成します。

非同期の伝送においては、スタートビットとストップビットを使って各バイトを フレーム分割することによって同期を実現します(これはハードウェアが行い ます)。受信側は負の電圧の配線上で正のスタートビットを待ち、このビットを検 出するとクロックを刻み始めます。受信側はこのクロック刻みを使って、次の 7, 8, 9 個のビットを読み込む時間を計ります(実際にはこれよりももう少し 複雑です。というのも、普通は 1 ビットからサンプル点をいくつか取るので、 そのために別のタイミング刻みが必要になるからです)。そしてストップビット が読み込まれると、受信側はクロックを止めて、次のスタートビットを待ちま す。このように、単独のバイトデータを受け取る際には非同期伝送も実際には 同期伝送になりますが、複数のバイトデータの間での同期は行われません。


次のページ 前のページ 目次へ