◆ USB では、具体的なデータのやり取りに関する手順を含んで規格化されています。しかし、先に示した汎用直列インターフェースの規格、RS232C や RS485 等は、ハードウェアおよび基本的なデータやり取りに関する規格です。具体的なデータやり取りの方法については規定されていません。
しかし、実際に使用するときは、具体的なデータやり取りの方式が必要です。したがって、別の規格等と組み合わせて使用することになります。
◆ ここでは、汎用直列インターフェースで使用されている、具体的な伝送手順について解説します。なお、伝送手順のことを、プロトコル といいます(コラム 3.5 参照)。この講座でも、以降プロとトコルの言葉を使用します。
◆ 汎用直列インターフェースのプロトコルは、LSI 化されていますから、それを利用します。
さきに述べたように、汎用直列伝送は、大きく、非同期式と同期式とに分けられます(図.44)。
◆ 非同期式は、簡単なことが特徴で、パソコンインターフェース等に広く使用されています。非同期式は、キャラクタ単位の伝送です。
これに対して、同期式は、信頼性が高く、本格的なデータ伝送に用いられています。同期式は、それ自体は、ビット単位の伝送です。これをベースにして、各種の同期式プロトコルが存在します。
◆ キャラクタ単位でやり取りを行うときは、キャラクタ同期を取るための、別のプロトコルの規格と組み合わせます。以前よく使われた、ベーシック手順 や BSC は、これに属します。フレーム単位でやり取りする方式もあります。ハイレベル手順と呼ばれるものです。
USB などの比較的新しい規格は、特定用途のものが多くなっています。これらは、ほとんどがフレーム単位の同期式です。
(1) プロトコルの定義
★ プロトコル は、正しくは、通信プロトコル 、または伝送プロトコル です。通常は略して、単にプロトコルと呼んでいます。
★ 通信を行うには、ある決められた手順に従うことが必要です。人間同士が、電話を掛ける場合には、定められた手順は、ありませんが、おおよそ次に示す手順になるでしょう。
[A] 相手の電話番号をダイヤルする → (交換機が相手につなぐ)
[B] 呼び出し音 → 受話器を上げる → (通話開始)「はい B です」
[A] 「A です。ご無沙汰しています」
(相互に会話)
[A] 「それでは、さようなら」
[B] 「はい、さようなら」
[A] 電話を切る
[B] 電話を切る → (交換機が回線を切断する)
★ 以上のうちで、最初と最後の部分は機械(交換機)とのやり取りですから、決められた通りに行う必要があります。手順を間違えると、目的の相手に掛からなかったり、うまく電話が切れなかったりします。
★ 挨拶の部分は、人間対人間の会話です。一応のしきたりはありますが、その通りにやらなくても通話は可能です。まして、相互の会話の部分は全くの自由です。しかし、機械対機械のやり取りである、データ伝送となると、相互の会話の部分も含んで、予め決められている通りの手順を実行しないと、うまくやり取りができません。
★ この取り決めのことを、通信(伝送)プロトコルといいます。すなわち、プロトコルは、「通信(伝送)の手順を定めた規約」と定義することができます。
★ プロトコルには、純粋にハードウェア(たとえば、電話では交換機)の部分と、ソフトウェア的な手順(たとえば、電話では人間による挨拶のやり取り)とがあり、この両方を含んだ言葉です。
[注] たとえとして、分かりやすいので、電話交換機をハードウェアの例として示しました。しかし最近の交換機は、コンピュータです。したがって、実は、ソフトウェアです。
★ しかしプロトコルの言葉は、ソフトウェア的な部分だけをプロトコルと呼ぶ、狭い意味で使用されていることも多いのです。この講座では、原則として、ハードウェアを含む広い意味で使用します。
★ ここで、ソフトウェアと言わずに、ソフトウェア的と言ったのは、次の理由によります。
電話における人間による挨拶という意味ではソフトウェアです。しかし、プロトコルは、LSI 化される場合があります。LIS 化した場合、LSI に組み込まれている部分は、ハードウェアです。この意味では、ソフトウェアでは、ありません。
(2) ユーザーソフトとプロトコルソフト
★ ところで、非同期式の伝送では、パソコン間伝送などで、無手順と呼ばれる方式が多く使用されています。ここで手順とはプロトコルのことですから、プロトコルが無いという意味になってしまいます。しかし、機械対機械のやり取りですから、全く自由なやり取りはできません。
★ 無手順においても、最初に A から伝送を開始した場合、A からの伝送に対して B が応答する形をとり、以降も、これを繰り返すという原則が存在します。勝手に横槍を入れることはできません。ここで、B が応答するというのは、やり取りの形式上です。B からの応答が、その実質的な内容は、A に対する要求であることもあります。
★ 無手順の場合は、ユーザーソフトがプロトコルも実行します。無手順だけでなく、簡単なプロトコルであれば、ユーザーソフトがプロトコルを実行しても、問題はありません。
★ しかし、伝送の信頼性を高めるために、複雑なプロトコルを使用することがあります。このような場合には、プロトコルを実行することが、ユーザーにとって、負担になります。複雑であれば、間違いを犯す可能性もあります。
★ このような場合の対策として、プロトコルのソフトを、ユーザーソフトから独立させる方式があります。そして伝送を行う場合に、ユーザーソフトが、プロトコルのソフトに伝送を依頼するようにします。
プロトコルのソフトがユーザーソフトとは別に作られていれば、汎用性があります。十分に信頼性が高いものを作っておくことができます。
★ なお、プロトコルのソフトと書きましたが、プロトコルのロジックは、LSI によって、ハードウェア化することもできます。この場合には一般に、純粋にハードウェアの部分も含めて LSI 化します。
◆ 非同期式 は、1.4.(3-B)に示したように、キャラクタ(文字)単位の伝送です。CPU から 5〜8 ビットのキャラクタを、パラレルでトランスミットバッファに受け取り、それにスタートビット/ストップビットを附加してシリアルにして送信を行います。受信側では、送信されてきたビット列をレシーブバッファに受け取り、スタートビットを検出し、キャラクタを取り出して、パラレルでCPU に引き渡します(図.45)。
◆ 非同期式の伝送用 LSI を UART と呼んでいます。UART の代表例が、インテルの 8251A です(図.46)。
[注] 8251A は、非同期式だけでなく、キャラクタ単位の同期式もサポートします。キャラクタ単位の同期式 LSI を USRT といい、8251A は両方に使用できるので、USART と呼んでいます。
◆ 図の左側が CPU とのインターフェースで、コンピュータバスに接続します。図の右側が、伝送用インターフェースです。
送信時は、CPU から受け取った並列のキャラクタは、データバスバッファを経由してトランスミットバッファに入り、トランスミットコントロールの制御の下に直列に変換され、非同期式の情報を附加して、送信データ(19 ピン)から送信されます。また伝送データの他に、LSI の制御情報データも、データバスを経由して、CPU からリードライト・コントロールに取り込みます。
◆ 受信時は、レシーブコントロールの制御の下に、受信データが 3 番ピンからレシーブバッファに取り込まれます。並列に変換されたキャラクタは、データバスバッファを経由して CPU に送り込まれます。
◆ UART は、伝送速度の 16 (または 64) 倍のクロック信号を LSI に加え(9 番、25番ピン)、そのクロック信号によって動作します。最高伝送速度は19.2kビット/秒です。20 番ピンもクロックですが、これは伝送用ではなく、CPU とのインターフェース用です。
◆ UART はその基本機能のほかに、パリティ機能があります。この機能を使用するときは、送信側で、キャラクタにパリティビットを附加して送信を行います。受信側では、パリティチェックを行い、伝送誤りの有無を判定します。CPU には、パリティビットを外して送ります。誤りがあったかどうかは、UART のステータスに他の情報と共に収容されます。CPU が、UART からステータスを読んで(データバス経由)、誤りがあったかどうかを調べます。
◆ マイコンは、コンピュータらしい使い方の他に、汎用ディジタル LSI としての用途に使われています。一般のハードウェアの LSI は、特定の仕事しかできません。マイコンは、ソフトウェアによって自由に仕事の内容を変えることができる汎用コントローラとして利用することができます。
◆ このような用途に使用するマイコンのことを組み込み用マイコン といいます。そして、この組み込み用マイコンの LSI は、一般に CPU 機能だけでなく、メモリや各種の入出力を内蔵しています。
このようなメモリや入出力を内蔵し、ワンチップでコンピュータを実現することが可能な LSI のことをマイクロコントローラ (MCU または MPU )と呼んでいます。MPU の中には、UART もこの内蔵入出力の 1 つとして組み込んでいる機種があります。
◆ 非同期式は、元々は、文字コードを使用した文字のやり取りに使用されましたが、文字コードに限定されません。5〜8 ビットの一定の長さに分割して送ることができるデータなら、全てやり取りが可能です。コンピュータ内部では、データはバイト単位で取り扱われます。
◆ したがって、8 ビット単位の伝送が多く使用されています。たとえば 7 ビットの文字コードであっても、1 ビット余して 8 ビット単位でやり取りします。
ただし、インターネット等では、ASCII コードを使用し、7 ビット単位の伝送を行っています。
◆ 8251A の伝送速度は RS232C の規格を満たしますが、パソコン用の高速用途を満たすことができません。UART 専用の 8250/16450 を使用します。これらは、ボーレートジェネレータ を内蔵しており、外部から加える高速クロックを分周して、各種の伝送速度を作り出すことができます。最高伝送速度は、56kビット/秒です。
◆ その後さらに高速の 16550A が開発されました、16550A は、256kビット/秒まで可能です。高速伝送が容易なように、16バイトの FOFO バッファを内蔵しています。
FIFO は、メモリの 1 種で、アドレスを指定することなく、順に詰め込み、入れた順に取り出します。この FIFO を多段のバッファメモリとして使用することによって、処理時間のバラツキを吸収して、高速の伝送を容易に行うことができます(図.47)。
◆ 同期式 は、それ自体は、ビット同期を取るだけです(1.4.(3-A))。ビット同期を取っただけでは、データのやり取りはできません。フレーム単位の伝送のときはフレームの区切りを、キャラクタ単位の伝送のときはキャラクタの区切りを識別する必要があります。しかも、ビット同期を取るために、送信側から受信側に、データのほかに、クロック信号を送らなければなりません。
◆ 非同期式に比べて複雑であり、当然高価になります。しかし、その代わりに、非同期式よりも信頼性の高い伝送が可能です。したがって、非同期式では得られない、高速、長距離の伝送が可能です。信頼性を高める技術については、後に解説し、ここでは述べません。
◆ 同期式では、先ず、送信側から同期パターン (予め決められた同期用の特定のビットパターン)を送信します。受信側では、ビット同期を取ることによって、送信側から逐次送られてくるビットのゼロ/ 1 を判定することができます。したがって、同期信号のパターンを検出することができます(図.48)。
コンパレータ は、2 つの入力を比較して、両者が一致したとき一致信号を出力します。
◆ このビットパターンは、伝送がフレーム単位単位のときはフレームの区切りを識別します。同期式においても、キャラクタ単位の伝送を行う方式もあります。この場合には、上記のビットパターンは、キャラクタの区切りを検知します。同期式におけるキャラクタ単位の伝送は、以前はよく使われていましたが、現在はフレーム単位の伝送が主流です。
◆ キャラクタ単位の同期方式は、あまり使われていませんから、簡単に解説します。
キャラクタ単位に限らず、信頼性の高い伝送を行う場合には、いきなり相手にデータを送ることしません。先ず相手と確認動作をおこない、相手がデータを受け取ってくれる状態にあることを確認してから、データのやり取りを行います。
◆ キャラクタ単位の伝送では、全ての伝送は、キャラクタを使用します。相手を確認するためのやり取りも、制御キャラクタ を使用します(図.49)。
◆ 伝送に先立って行う「ENQ」「ACK」のやり取りを、回線接続 といいます。当然ハードウェアは、これ以前に接続されている筈で、このやり取りは、ソフトウェア上の接続処理です。
データは、「STX」と「ETX」の間に挟んで送り、データであることを明確に示します。
◆ 受信側は、データを正しく受け取ったとき、「ACK」を返します。もし正しく受け取らなかったときは、駄目だったという否定的返事「NAK 」を返します。送信側は、「NAK」を受け取ったときは、再送を行います。
◆ 1連のデータやり取りが終了したときは、「ENQ」を発行した側から、1連のデータやり取りが終了したことを、通知します。これを、回線切断 処理といいます。この例では、1方向に、1回しかデータを送っていませんが、一般には、双方向に交互に、データまたは返事のやり取りを、複数回行います。
◆ キャラクタ単位のデータやり取りでは、特定のコードを使用する必要があります。ランダムなビットパターンを取り扱うことができません。一般データ中に、制御キャラクタと同じビットパターンの文字があると、それを制御パターンと誤認して、制御が狂ってしまうからです(図.50)。
◆ キャラクタ単位の伝送においても、図.50 の問題を回避して、特定のコードに依存しない、任意のビットパターンを使用できるプロトコルもあります。しかし、プロトコルが複雑になってしまいます。任意のビットパターンを使用できる性質のことを、透過性 といいます。