コンピュータ同士が通信を行う手法として、非常に大雑把に分類すると、シリアル通信とパラレル通信がある。
○シリアル通信とは、基本的にはコンピュータ間(或いはCPUやメモリなどのデバイス間)を1本の線で接続し、これを使って通信を行う方式の事である。
(シリアル通信では、複数ビットのデータを同時に送ることは出来ないので、時分割して送ることになる。)
○パラレル通信とは、コンピュータ間(或いはCPUやメモリなどのデバイス間)を複数の信号線で接続し、通信を行う方式。
(パラレル通信では、複数ビットのデータを同時に通信する。)
現在では、それぞれの方式をミックスしたような通信規格が複数ある。本稿では、以降、シリアル通信について解説する。
シリアルによる通信規格には、様々な物がある。例えば、
など。
AVRマイコンでは、RS232C・I2C・SPIについては、専用ハードウエアが実装されていて使用可能である。
シリアル通信のイメージ
例えば、スイッチとLEDを繋いだ回路があって、情報を伝える方法を考えてみる。
上図のように、スイッチのON/PFFをデータの1/0に対応させる。この場合、スイッチがデータ送信側、LEDが受信側となる。
図から分かるように、
スイッチON → 1
スイッチOFF → 0
のように対応させれば、LEDの点滅でデータを送ることができる。
問題として、スイッチは2つの状態(ON/OFF)しかない(=電線の電圧も同様)であるため、そのままでは制御情報(例えばデータの区切りなど)を表現することができない。(例えば、ずっと値が1の様なデータが来たら、困ってしまう)
そこで、データの区切りを表現するために、シリアル通信では、通信の手順(=プロトコル)を定めることが一般的である。
調歩同期式通信
通信していない状態、データの開始、データ長、終了について、以下のようにルールを設ける。このルールは、通信の両端(送信側・受信側で共通とする)
○送信側の通信の手順は以下の通り。
○受信側の通信手順は以下の通り。
※通信速度は、送信側・受信側ともに共通とし、1bitの送受信(信号線上での値をキープする時間)として定義。
パリティと通信エラー
最近のシステムでは、通信環境自体が良くなっている事もあって、通信エラーの発生を目の当たりにすることは少ない。通信エラーとは、何らかの原因で通信中のデータが壊れて、送信元と受信先でデータの不一致がおこる現象の事を言う。
データが壊れてしまう事は、もちろん問題なのであるが、データが壊れた事を検出できない事は、もっと問題である。
従って、多くの通信方式では、エラーの発生を検出する仕掛けが備わっている。パリティもその一つである。
少し考えてもらうとわかると思うが、同時に2ビット、データが化けてしまうような環境で通信を行っている場合、パリティは無力である。このようにパリティビットのエラー検出能力は高いものとは言えない。
もっと劣悪な通信環境(例えば、惑星探査機の様な...)では、ハミング距離を大きく取った強力なエラー訂正能力を持つ通信方式(なんのこっちゃ)が必須となる。