通常、車載ネットワークでは外来ノイズを要因とする問題は考えられるが、CANでは“2線式差動電圧方式”でのデータ伝送などにより、外来ノイズに対して影響を受けにくくなっている。
では、それ以外にどのような理由で問題が発生するかを考えてみたい。
図4は送信ノードが送信中にエラーを発見した場合、どのような処理を行うかを示している。
送信ノードがデータフィールドにてビットエラーを検出すると即6ビット長ドミナントのエラーフラグ(プライマリ)を送信する。そして、ほかのECUはこの6ビット長ドミナントのエラーフラグをビットスタッフィングルール違反として検出し、6ビット長ドミナントのエラーフラグ(セカンダリ)を送信する。
このビットスタッフィングルール違反だが、エラーフラグ(プライマリ)送信前の状態がドミナントであれば、エラーフラグ(セカンダリ)が送信されるタイミングが、前に移動するため、エラーフラグ(プライマリ)とエラーフラグ(セカンダリ)が重なる部分が出てくる。これにより、前述のセカンダリ部分の長さが変化する状態となる。
この後、エラーデリミタが送信され、ITM終了後に送信ノードは再送信を行う。この場合のエラーフレームは20ビットとなりITM分を含み、再送信は23ビット後となる。ちなみに、CRCエラーを除いたそのほかのエラーの検出動作はこれと同様だ。
図5は受信ノードが受信中にCRCエラーを発見した場合、どのような処理を行うかを示している。
受信ノードがCRCフィールドにてCRCエラーを検出すると、エラーフラグの送信を行わず、さらにACKスロットでもドミナント送信を行わない(ネガティブACK:リセッシブ送信)(注)。
しかし、ほかの受信ノードがCRCを比較して正常に受信を行えた場合は、ACK(ドミナント)を送信し、図5のような処理となり、送信ノードが送信を継続する。この処理は、CRCエラーとなったノードからのエラーフラグにより、ACKスロットがどのような状態であるのかを認識できなくなる事態を回避するようになっており、これにより送信ノードは全ノードが受信に失敗したかどうかを知ることができる。
CRCエラー検出時に即エラーフラグを送信できなかった受信ノードは、EOF開始時にエラーフラグ(プライマリ)を送信する(通常時より3ビット分遅延)。このEOF内のエラーフラグの1ビット目がドミナントであることにより、他ノード(送信ノードを含む)はフォームエラーを検出し、エラーフラグ(セカンダリ)を送信する。この場合のエラーフレームは15ビット長となりITM分を含め、再送信は18ビット後となる。
各ノードのCANコントローラはそれぞれ受信エラーカウンタを持っている(図6)。
このエラーカウンタは以下のような動きをする。
また、各CANコントローラは、それぞれの受信エラーカウンタの値によって状態が定義されている。
各ノードのCANコントローラはそれぞれ送信エラーカウンタを持っている(図7)。
このエラーカウンタは以下のような動きをする。
また、各CANコントローラは、それぞれの送信エラーカウンタの値によって状態が定義されている。
Copyright © ITmedia, Inc. All Rights Reserved.