連載
» 2008年08月07日 00時00分 公開

車載ネットワーク“CANの仕組み”教えます(3):CANを理解するうえで欠かせない“フレーム”の知識 (2/3)

[増田浩史(ベクター・ジャパン),@IT MONOist]

エラーの発生原因

 通常、車載ネットワークでは外来ノイズを要因とする問題は考えられるが、CANでは“2線式差動電圧方式”でのデータ伝送などにより、外来ノイズに対して影響を受けにくくなっている。

 では、それ以外にどのような理由で問題が発生するかを考えてみたい。

ネットワーク全体に関係するエラー

  • 配線の断線など、ネットワーク全体が影響を受ける問題発生が考えられる。

ネットワーク内ノードの一部にて発生するエラー

  • ネットワーク内ノードにおいて、それぞれのノードが異なるタイミングで同期していた場合。ドミナント・リセッシブ認識が異なってしまう可能性があり、エラーの原因となる。
  • ネットワーク内ノードにおいて、ドミナント・リセッシブ認識の電圧値が異なる場合。電子制御ユニット(ECU:Electronic Control Unit)内部品のばらつきや、温度特性などに違いがあり、異なった状態になってしまう。

バスの特性によるエラー

  • バスの特性により、伝播する電気信号が変化してしまう。

エラー検出時の動作<1>

 図4は送信ノードが送信中にエラーを発見した場合、どのような処理を行うかを示している。

エラー検出時の動作<1> 図4 エラー検出時の動作<1>
※ベクター・ジャパンの資料を基に作成

 送信ノードがデータフィールドにてビットエラーを検出すると即6ビット長ドミナントのエラーフラグ(プライマリ)を送信する。そして、ほかのECUはこの6ビット長ドミナントのエラーフラグをビットスタッフィングルール違反として検出し、6ビット長ドミナントのエラーフラグ(セカンダリ)を送信する。

 このビットスタッフィングルール違反だが、エラーフラグ(プライマリ)送信前の状態がドミナントであれば、エラーフラグ(セカンダリ)が送信されるタイミングが、前に移動するため、エラーフラグ(プライマリ)とエラーフラグ(セカンダリ)が重なる部分が出てくる。これにより、前述のセカンダリ部分の長さが変化する状態となる。

 この後、エラーデリミタが送信され、ITM終了後に送信ノードは再送信を行う。この場合のエラーフレームは20ビットとなりITM分を含み、再送信は23ビット後となる。ちなみに、CRCエラーを除いたそのほかのエラーの検出動作はこれと同様だ。

エラー検出時の動作<2>

 図5は受信ノードが受信中にCRCエラーを発見した場合、どのような処理を行うかを示している。

エラー検出時の動作<2> 図5 エラー検出時の動作<2>
※ベクター・ジャパンの資料を基に作成

 受信ノードがCRCフィールドにてCRCエラーを検出すると、エラーフラグの送信を行わず、さらにACKスロットでもドミナント送信を行わない(ネガティブACK:リセッシブ送信)(注)。

※注:すべての受信ノードがACKスロットでドミナント送信を行わない場合、ACKスロットはリセッシブのままとなり、アクナレッジエラーとなる。


 しかし、ほかの受信ノードがCRCを比較して正常に受信を行えた場合は、ACK(ドミナント)を送信し、図5のような処理となり、送信ノードが送信を継続する。この処理は、CRCエラーとなったノードからのエラーフラグにより、ACKスロットがどのような状態であるのかを認識できなくなる事態を回避するようになっており、これにより送信ノードは全ノードが受信に失敗したかどうかを知ることができる。

 CRCエラー検出時に即エラーフラグを送信できなかった受信ノードは、EOF開始時にエラーフラグ(プライマリ)を送信する(通常時より3ビット分遅延)。このEOF内のエラーフラグの1ビット目がドミナントであることにより、他ノード(送信ノードを含む)はフォームエラーを検出し、エラーフラグ(セカンダリ)を送信する。この場合のエラーフレームは15ビット長となりITM分を含め、再送信は18ビット後となる。

受信エラーカウンタ

 各ノードのCANコントローラはそれぞれ受信エラーカウンタを持っている(図6)。

受信エラーカウンタ 図6 受信エラーカウンタ
※ベクター・ジャパンの資料を基に作成

 このエラーカウンタは以下のような動きをする。

  • 受信ノードがエラーフラグ(プライマリ)を送信した場合
     受信エラーカウンタに「8」を加算する。
  • 受信ノードがエラーフラグ(セカンダリ)を送信した場合
     受信エラーカウンタに「1」を加算する。
  • 受信ノードがエラーなしで、受信を完了した場合
     受信エラーカウンタから「1」を減算する。

 また、各CANコントローラは、それぞれの受信エラーカウンタの値によって状態が定義されている。

受信エラーカウンタの値

  • 0〜127:「127」まではノードは『アクティブ』。
  • 96:エラーカウンタ値「96」は、バスに重度の障害があることを示す警告リミットを示す。
  • 127:この値を超えると、ノードは『パッシブ』に移行する。
※注:受信エラーカウンタは、ハードウェアの設定により上限「128」に設定できる。


送信エラーカウンタ

 各ノードのCANコントローラはそれぞれ送信エラーカウンタを持っている(図7)。

送信エラーカウンタ 図7 送信エラーカウンタ
※ベクター・ジャパンの資料を基に作成

 このエラーカウンタは以下のような動きをする。

  • 送信ノードがエラーフラグを送信した場合(ビットエラー、またはアクナレッジエラーの場合)
     送信エラーカウンタに「8」を加算する。
  • 送信ノードからフレームが正常に送信された場合
     送信エラーカウンタから「1」を減算する。
  • 例外規定の場合
     CANコントローラの状態が『パッシブ』となった送信ノードがアクナレッジエラーを検出しても送信エラーカウンタは加算されない。

 また、各CANコントローラは、それぞれの送信エラーカウンタの値によって状態が定義されている。

送信エラーカウンタの値

  • 0〜96:警告リミット以下の『アクティブ』。エラーカウンタ値が「96」を超えるとCANコントローラは警告(エラーフラグのセット、割り込み)を発する。
  • 97〜127:ノードは『アクティブ』。エラーカウンタ値がこのエリアにある場合、バスは重度の障害を持っていることになる。
  • 128〜255:ノードは『パッシブ』(ほとんどのCANコントローラはこの領域への変化についてマイコンに報告しない)。また、送信待機を行う。
  • 255:エラーカウンタがこの値への到達後、ノードは『バスオフ』となりバスから切り離される(バスへの送信アクセスが不可となる)。マイコンはこの領域への移行を知ることができる。

Copyright © ITmedia, Inc. All Rights Reserved.