Edited at

猿でも分かるCANプロトコルの基本


CAN車載ネットワークの始まり

CAN(Controller Area Network)が開発される以前、自動車メーカーはポイントツーポイント方式(1対1で接続する専用経路)で電子制御ユニット(ECU)の接続を行っていたが、車両に使われる電子部品の数が増えるにつれ、重くて高価なワイヤハーネス(電源供給や信号通信に用いられる複数の電線を束にしたもの)が邪魔になってきた。これを車載ネットワークに置き換え、コスト削減と軽量化を図ったのがCANの始まりだ。

ピアツーピア(読み書きのタイミングを制御するマスタデバイスが存在しない)のシリアルバスであり、現在では車載分野を超えて、ファクトリーオートメーションやIoTなど多様な分野へと拡大している。

自動車のエンジン制御に使用されるだけあり通信の高い信頼性を誇るため、医療系の組み込みネットワークとしてもCANが利用されている。病院によっては手術台や照明、カメラ、X線装置、患者用ベッドなどもCANで制御している。

2012年、CANを拡張する形でCAN FD(CAN with Flexible Data rate)の仕様が発表される。従来のCANよりも、通信速度の高速化と送受信データの大容量化に対応し、自動運転技術の開発が加速する中、次世代の車載ネットワークとして期待されている。


CANの特徴

まず用語を抑えておこう。

ネットワークに接続される通信機器のことを一般的にはノードというが、CANでは電子制御ユニット(ECU)がそれに当たる。また、通信線のことをバスと呼び、バスへデータを送信することをバスアクセスと言う。

CANの特長を以下に示す。


  1. ライン型のバストポロジ

    複数のノードを接続するネットワークトポロジー(ネットワークの形をモデル化したもの)には、リング型、スター型、ライン型があるが、CANではライン型を採用している。ノードの追加削除がしやすく、ネットワークの設計が行いやすいシンプルな構造だ。


  2. すべての電子制御ユニット(ECU)がマスターとして振る舞うマルチマスター方式

    バスに空きがあれば、どのユニットからでも通信を開始できる。

    相手を特定せずに送信でき、誰もがマスターになれるというわけだ。

    通信はデータを要求して送ってもらうこともできるが、垂れ流しになっているのを必要なら見るというパターンが今は多いらしい。


  3. CSMA/CA方式による優先順位に応じたバスアクセス

    バスに早くアクセスしたユニットが送信権を得ることができる。

    もし同時に複数のユニットが送信を始めたら、優先順位の高いID(ID番号が小さい)のメッセージを送信しているユニットが送信権を得る。

    CSMA/CA方式ではバス使用中に他ノードからデータ送信できないよう頑張るが、実際には同時に複数のノードからデータが送信され衝突してしまうケースはある。CANにはその優先順位を決める通信調停(アービトレーション)の仕組みがある。


  4. 差動電圧送信を利用した耐ノイズ性能の向上

    2本の通信線(ツイストペアケーブル)に発生する電圧差の有無によってデータを送信する。外部から加わるノイズは同一のため電圧差が起こらず、ノイズが発生しても影響を受けにくい。


  5. エラー検出とハンドリング

    すべてのユニットがエラーを検出することができる。

    エラーを検出したユニットは、即座に他のすべてのユニットにエラーを一斉通知する。

    メッセージを送信しているユニットがエラーを検出すると、その送信を強制的に終了し、そのメッセージが正常に送信されるまで再送信を繰り返すようになっている。



データ通信の仕組み

CAN通信はフレームと呼ばれる単位で行なわれる。

以下に各フレームの役割を示す。


  • データフレーム

    送信ユニットが、受信ユニットへデータを送るためのフレーム。


  • リモートフレーム

    受信ユニットが、送信ユニットにデータ送信を要求するフレーム。


  • エラーフレーム

    送受信時になんらかのエラーを検出したときに、他のユニットへエラーを通知するためのフレーム。


  • オーバーロードフレーム

    受信ユニットが、受信準備ができていないことを通知するためのフレーム。


CANでは、データを必要とするECUからリモートフレームが送信され、そのデータを持ったECUからデータフレームを返すことで通信が成り立っている。データフレームから制御ビットを除くと、実際に送信できるデータは最大8バイト(CAN FDでは最大64バイト)になる。

近年では、各ECU間の情報交換が非常に多くなっているので、バス占有率を下げるためにリモートフレームは殆ど使わず、各ECUへ定期的にデータフレームを送信する方式(垂れ流し)が一般的だ。


関連規格/プロトコル

CANプロトコルは、開発元であるドイツBosch社が仕様書を定め、その後にISO(国際標準化機構)がISO11898(1Mbpsまでの高速CAN通信用)、ISO11519(125Kbps以下の低速CAN通信用)として規格化した。

ISOで定めたのはOSI参照モデルにおける物理層とデータリンク層で、固有のアプリケーションや制御まで定義しない。つまりメッセージIDの採番やデータの規則と応答は、CANの上位層プロトコルとして開発する必要がある。

以下に、CANの上位層として標準化された規格/プロトコルを紹介する。


CAN 2.0

CAN2.0Aプロトコルは11ビットのID(標準フォーマット)を使用し、29ビットのID(拡張フォーマット)を使用するものはCAN2.0Bと呼ばれる。2.0Bではさらに、パッシブ(受動)とアクティブ(能動)に分かれる。

2.0Aでは標準フォーマットのみ送受信可能で、もし拡張フォーマットを受信してしまった場合はエラーが発生する。

2.0Bパッシブは、送受信可能なのは2.0Aと同じ標準フォーマットのみだが、拡張フォーマットを受信した場合は無視することでエラーを回避できる。

2.0Bアクティブは、標準フォーマットも拡張フォーマットも送受信可能であり、現在の主流となっている。


J1939

J1939プロトコルは、SAE(アメリカの自動車関連規格の開発などを行っている非営利団体)から提供されているCANの上位層規格で、トラックやバスなどの大型車で広く使用されている。J1939の応用規格として、農業機械用のISO11783や船舶用のNMEA2000がある。


OBD II

OBD II 自動車診断規格は、欧州で販売されているすべての乗用車および軽トラックに搭載が義務付けられている(日本でも2008年以降の新車に搭載を義務付け)。CANはOBD IIで使用されるプロトコルの1つである。故障診断用の端末を接続してデータを吸い出すことを主な目的としている。現在では、運転席ダッシュボード下のOBD IIコネクタに挿し込むだけで、Bluetooth経由でスマホの専用アプリにエンジンの状況を表示するものまで登場している。


CANopen

CANopenは、組み込み向けの通信プロトコルであり、ドイツのCiA(CAN in Automation)によって規格化されたもの。規格の名前が示すとおり、誰もが自由に規格書を入手でき、対応製品を開発、販売、使用できるので、市場参入や市場競争もオープン。従来のRS-232/485独自規格で設計された組込ネットワークからの置き換えも進んでいる。


FMS

FMS(フリート管理システム)は、輸送効率の向上を目的に欧州自動車工業会(ACEA)が開発を進めているもので、車両データの遠隔測定を可能にする。FMS標準規格はJ1939プロトコルがベースになっている。FMSにおける外部接続ではFMSコントロールユニットを経由してCANに接続する。