CANの特徴についてまとめる
CANのプロトコルの特徴
1. マルチマスタ・プロトコル
2. 拡張CSMA/ CD
3. マルチキャスト・プロトコル
4. 優先順位付きメッセージ
5. 不具合抑制
1. マルチマスタ・プロトコル
バスがフリーのときは、どのノードもデータをネットワークに送信できる。(どのECUも信号をバスにのせていない場合、バスに信号をのせることができる。)
ただし、"バスがフリーのとき"を検知する機能が必要になる。
対になるプロトコルは"シングルマスタプロトコル"になる。
これは、送信を始めることができるノードが1つだけになってしまう方式。
2. 拡張CSMA/ CD
ベースとなったCSMA/CDは、複数のメッセージが競合して衝突が発生した場合、すぐに送信を中断する。そして、ランダムな時間だけ待って、この間に他のノードからの送信がない場合、送信を再開する。
しかし、この"ランダムな時間を待つ"という方法は、車のようなリアルタイム性を求めるものには向いていない。
その点を改善したのが拡張CSMA/ CD方式。拡張CSMA/ CD方式では、"送信しながら"、"バスの状態を監視しながら"、"競合したら優先度を決めて、負けたらその場でやめる"方式。
3. マルチキャスト・プロトコル
ネットワークに接続されているすべてのノードが同じメッセージを受信し、そのメッセージに対して各ノードがアクションをとる方式。
この方式は人間の会議と同じような方式をとっており、以下のように置き換えてみるとわかりやすい。
| 会議 | マルチキャスト・プロトコル |
|---|---|
| 発言する人はまず挙手する | フレームの始まり(SOF: start of frame) |
| 話す時間 | データ長のコード(DLC: data length code) |
| 話す内容 | データフィールド |
| 相槌 | アクノリッジメント(ACK: acknowledgement) |
| 話が終わったことの宣言 | フレームの終わり(EOF: end of frame) |
4. 優先順位付きメッセージ
拡張CSMA/ CDで述べたように、競合した場合は優先度を確認する必要がある。その優先度はCANのデータフレーム上にのせている、"ID"によって決められている。
このIDを使用して優先順位を示すことをアービトレーションという。
5. 不具合抑制
各ノードに対し、短い時間の障害と恒久的な不具合を識別し、欠陥ノード自身が離脱する機能がある。
CANネットワークで最も問題になるのが、ネットワーク全体がダウンすること。例えばネットワークにメッセージやノイズを出し続ける状態が続くような欠陥を抱えたノードが発生した場合、ネットワーク全体に与える影響が大きくなり、システムの暴走やダウンが発生する。
こういった問題を抱えたノードが離脱することで、影響を最小限に抑えることができる。
各ノードはエラーカウンタを持っており、ノード自身も自らが送信したメッセージをモニタし、エラーを検出することができる。そしてこのカウンタが規定値に達すると、自らをネットワークから離脱させる。
データフレーム構成

Vector 「はじめてのCAN/ CAN FD」より
https://cdn.vector.com/cms/content/know-how/VJ/PDF/For_Beginners_CAN_CANFD.pdf
マルチキャスト・プロトコルで書いた通り、CANのデータフレームは"SOF","DLC","データフィールド","ACK","EOF"で構成されている。
エラー検出方式(CRC方式)
アービトレーション
そもそもCAN信号は2本の線の電圧の差によって、"0"、もしくは"1"のデータを送信している。
この"0"のデータを"ドミナント"、"1"のデータを"レセシブ"という。
メッセージを送信するノードは常に通信バスの電圧を監視しており、送信したデータが本当にバスに流れているかを1bitずつ確認している。
この監視状態では、"ドミナント"が優先され、通信調停を行いレセシブを送信していたノードは送信を停止する。これを"アービトレーション"という。

Sunny Giken [CANとは]より
https://sunnygiken.jp/tech-info/can-protocol/