シリアル通信

コンピュータ同士が通信を行う手法として、非常に大雑把に分類すると、シリアル通信とパラレル通信がある。

○シリアル通信とは、基本的にはコンピュータ間(或いはCPUやメモリなどのデバイス間)を1本の線で接続し、これを使って通信を行う方式の事である。
 (シリアル通信では、複数ビットのデータを同時に送ることは出来ないので、時分割して送ることになる。)

○パラレル通信とは、コンピュータ間(或いはCPUやメモリなどのデバイス間)を複数の信号線で接続し、通信を行う方式。
 (パラレル通信では、複数ビットのデータを同時に通信する。)

現在では、それぞれの方式をミックスしたような通信規格が複数ある。本稿では、以降、シリアル通信について解説する。


シリアルによる通信規格には、様々な物がある。例えば、

  • RS232C(あまり正確な表現ではない。ただ、たいていはこれで通じるので)
    もっとも一般的、かつ、古くからある通信手法。シリアル通信と言うと、一般的にはこれを指す事が多い。
    RS232Cは信号線が非平衡の非同期通信であるが、信号レベルを平衡伝送とし、通信速度を向上させたRS422などの規格もある。
     
  • I2C
    オランダのフィリップス社が開発した通信規格。信号線(SDA)とクロック信号(SCL)の2本線(GNDを除く)で通信を行う。
    比較的低速で、基板内のデバイス間での通信などに用いられる。
     
  • SPI
    少ない本数の信号線で通信を行う規格。通信速度は遅め。(ただしI2Cよりは早い)
     
  • その他
    EthernetやPCI Express、SATAなどもシリアル通信に分類される。

など。
AVRマイコンでは、RS232C・I2C・SPIについては、専用ハードウエアが実装されていて使用可能である。
 



シリアル通信のイメージ

  例えば、スイッチとLEDを繋いだ回路があって、情報を伝える方法を考えてみる。

          

  上図のように、スイッチのON/PFFをデータの1/0に対応させる。この場合、スイッチがデータ送信側、LEDが受信側となる。

 図から分かるように、
   スイッチON   → 1
   スイッチOFF → 0
 のように対応させれば、LEDの点滅でデータを送ることができる。

 問題として、スイッチは2つの状態(ON/OFF)しかない(=電線の電圧も同様)であるため、そのままでは制御情報(例えばデータの区切りなど)を表現することができない。(例えば、ずっと値が1の様なデータが来たら、困ってしまう)

 そこで、データの区切りを表現するために、シリアル通信では、通信の手順(=プロトコル)を定めることが一般的である。

 調歩同期式通信

 通信していない状態、データの開始、データ長、終了について、以下のようにルールを設ける。このルールは、通信の両端(送信側・受信側で共通とする)

  •  通信していないときの信号線は、1(ON)
  •  通信開始するときは、1ビット分の時間、0(OFF)
  •  データ長を8ビット(それ以外の場合もある)
  •  8ビットのデータを送ったら、1ビット(それ以外の場合もある)分の時間、0(OFF)

○送信側の通信の手順は以下の通り。

  1. スタートビットを送信するため、信号線を0にし、1bit分の時間、0を維持する。
  2. 送信データの下位ビットから順番に信号線に出力。(データのビットが0なら信号線も0、1なら1) 1bit分の時間、0を維持する。
  3. 2をデータ長分、繰り返す。
  4. 最後にストップビットを送信するため、信号線を1にし、1bit分の時間、0を維持する。

○受信側の通信手順は以下の通り。

  1. スタートビットを受け取ったら通信の開始
  2. 通信速度に従って、1bit毎に信号線上のデータを読み取る。
  3. 読み取ったデータをバッファ(変数)に保存。
  4. ストップビットを受け取ったら通信終了。

※通信速度は、送信側・受信側ともに共通とし、1bitの送受信(信号線上での値をキープする時間)として定義。

   



パリティと通信エラー

 最近のシステムでは、通信環境自体が良くなっている事もあって、通信エラーの発生を目の当たりにすることは少ない。通信エラーとは、何らかの原因で通信中のデータが壊れて、送信元と受信先でデータの不一致がおこる現象の事を言う。


 データが壊れてしまう事は、もちろん問題なのであるが、データが壊れた事を検出できない事は、もっと問題である。
 従って、多くの通信方式では、エラーの発生を検出する仕掛けが備わっている。パリティもその一つである。

          

 少し考えてもらうとわかると思うが、同時に2ビット、データが化けてしまうような環境で通信を行っている場合、パリティは無力である。このようにパリティビットのエラー検出能力は高いものとは言えない。
 
 もっと劣悪な通信環境(例えば、惑星探査機の様な...)では、ハミング距離を大きく取った強力なエラー訂正能力を持つ通信方式(なんのこっちゃ)が必須となる。
 

最終更新:2017年07月03日 09:24