連載
» 2008年06月16日 00時00分 UPDATE

車載ネットワーク“CANの仕組み”教えます(1):CANプロトコルを理解するための基礎知識 (2/2)

[増田浩史(ベクター・ジャパン),@IT MONOist]
前のページへ 1|2       

CANの基本

 次に、CANの基本として以下の用語について解説する。

  • ドミナントとリセッシブ
  • シグナルコーディング
  • 通信速度
  • 同期
  • ビットスタッフィングルール

ドミナントとリセッシブ

 CANでは、データの伝達にデジタル方式が使われている。送信されるデータは“0”と“1”の2進数に変換されて、通信線に送信される。CANにおいて、この送信される2進数データの“0”のことを「ドミナント」、“1”のことを「リセッシブ」と呼ぶ。

 ドミナントは“優性”、リセッシブは“劣性”の意味で、ドミナントとリセッシブが別のノードから同時に送信された場合には、文字どおり“ドミナントが優先”される仕組みになっている。このルールを利用して、CANではいろいろな仕組みが実現されている。そのため、ドミナントとリセッシブの関係については必ず理解しておきたい。

シグナルコーディング

 CANでは「NRZ(Non-Return-to-Zero)方式」により、送信したいデータを変換/送信している。この方式は比較的シンプルに変換が行えるため、さまざまな通信プロトコルで使用されている。

NRZ図 図4 NRZ図
※ベクター・ジャパンの資料を基に作成

 NRZ方式では、例えば送信するデータが“0001100”の場合、連続する“0”の部分は“0”のまま、連続する“1”の部分は“1”のままとなり、ドミナント状態やリセッシブ状態が連続することになる。状態が連続することによるデメリットもあるが、これを解消するための仕組みが用意されている。それについては後述する。

通信速度

 通常、通信速度は“bps(Bit Per Second)”で表される。これは1秒間に何ビットのデータが送信可能かを表す。この数値が高ければ高いほど、より短い時間に大量のデータを伝えることができる。例えば、2bpsの通信速度の場合は1秒間に2ビットのデータ伝達が可能となる。

 図5のようにノードAが1bps、ノードBが2bpsで動作する環境だと、ノードAから“1”を1個送信した場合、ノードBでは“1”が2個受信されてしまう。つまり、ノードA−B間のデータ伝達は正常に行えない。

通信速度図 図5 通信速度図
※ベクター・ジャパンの資料を基に作成

 通信を正常に行ううえでは、各ノード間の“通信速度を同一に保つ”ことが重要といえる。

同期

 車載ネットワークでは、多種多様なノードが接続されている。そして、それぞれのノードは内部でプログラム処理などを行うための基準時間(以下、システムクロック)を作り出す“水晶発振子”を持っている。

 この水晶発振子は比較的正確に時間を作り出すことができるが、車載ネットワークの各ノードはさまざまな場所に設置されているため、外気温などの影響を受けやすく、電源投入時からの時間変化などにより結果として各ノードのシステムクロックに違いが生じてしまう。

 CANではシステムクロックを使い、ドミナントやリセッシブの長さを1ビット分として構成しているが、もし、システムクロックが各ノードで違ってしまうと、それぞれの1ビットの長さが違ってしまうことになる。また、1ビットの長さによって前述の通信速度に違いが生じるため、正常なデータのやりとりができなくなってしまう。

 これを防ぐ制御が「同期」と呼ばれるもので、各ノード間のシステムクロックの違いを補正する。CANでは“信号がリセッシブからドミナントへ変化するとき(“1”−“0”変化時)に同期”を行っている。

ビットスタッフィングルール

 前述したNRZでは“0000”のように“0”が連続した場合、同じ状態が連続することになる。同期は“1”−“0”の変化にて行われるので、もし“0”が長時間連続した場合、同期ができない状態になってしまう。同期ができないと各ノードの通信速度にずれが生じ、正常に通信ができなくなってしまう。

 そこでCANでは、「ビットスタッフィングルール」を採用している。

 これは、通信線上で同じ状態が5回連続した場合、それまで送信されていた状態と反対の状態のビット(“スタッフビット”)を1個挿入する仕組みだ。図6に実際の動きを示す。

ビットスタッフィングルール 図6 ビットスタッフィングルール
※ベクター・ジャパンの資料を基に作成

 例えば、“000000111111”と連続する場合は“00000101111101”と実際に送信されることになる(太文字は挿入されたスタッフビット)。

 また、“0000011111”と連続した場合は“000001111101”となる。

 これは、挿入されたスタッフビットも通信線上の状態としてカウントするからである。このように、ビットスタッフィングルールを採用することで、通信線上で同じ状態が延々と連続することを防止している。

 「ちょっと待てよ、これでは実際に送信するはずのデータがスタッフビットによって通信線上で変化してしまっているではないか!」と思うかもしれない。しかし、送受信側ともに同じルールで動作しているため、受信側は同じ状態が5回連続したら、次に受信されるビットはスタッフビットであると容易に判断でき、使用するデータにおいてはスタッフビットを除いたものを利用できるのだ。



 以上で今回の解説は終了だ。次回以降では、“データ送信の仕組み”について順を追って解説していく。(次回に続く)

【 筆者紹介 】
増田 浩史(ますだ ひろし)
ベクター・ジャパン株式会社 トレーニング部 チームリーダー

ベクター・ジャパンのトレーニング部 講師としてCAN、LINといったさまざまな通信プロトコルや開発ツールを対象としたトレーニングサービスに従事。受講者のレベルに応じて最適なトレーニングを提供できるように日々業務に取り組んでいる。

ベクター・ジャパン
http://www.vector-japan.co.jp/
トレーニングサービスの概要
http://www.vector-japan.co.jp/vj_training_jp,,6863.html


前のページへ 1|2       

Copyright© 2017 ITmedia, Inc. All Rights Reserved.