1. はじめに
これから業務で初めてCANを触るという方に向けて、最低限これだけ知っておけば大丈夫でしょうという内容をまとめました。がっつりCANドライバを作ったり、ビットタイミングを調整したりするような専門的な内容は扱いません。あくまで、CANがどういうものなのかを知るための入門として読んでいただければと思います。
2. CANとは?
CANとは、Controller Area Networkの略で、車載でよく使用される通信プロトコルになります。ちなみに、プロトコルとは、機器同士が通信するときに守る"共通の約束事"のことです。ここでは難しく考える必要はなく、その共通の約束事としてCANというものがあるという認識で大丈夫です。
2.1 Classic CANとCAN FD
CANには、大きく分けてClassic CANとCAN FDの2種類があります。(CAN XLという規格もあるそうですがここでは説明しません)それぞれの特徴は以下になります。
| 項目 | Classic CAN | CAN FD |
|---|---|---|
| 最大通信速度 | 1Mbps | 8Mbps |
| 最大データ長 | 8byte | 64byte |
用途によって通信速度は変わりますが、私の経験上では、Classic CANは500kbps、CAN FDは5Mbpsで使われることが多かったです。
それぞれのプロトコルは以下の通りです。ただ、すべてのフィールドを覚える必要はありません。とりあえず知っておいたほうが良いフィールドだけ説明します。
-
Classic CAN

ID:メッセージがどういう情報かを表す。(例えば、0x100は車速情報、0x200はエンジン回転数など)
DLC:メッセージの長さを表す。
データフィールド:実際のデータの中身を表す。 -
CAN FD

ID:Classic CANと同様。
FDF:このビットが 1 の場合、フレームが CAN FD 形式であることを示す。Classic CAN
では同じ位置が Reserved ビットとして定義されており、常に 0 となるため、受信側はこのビットが 0 か 1 かを見るだけで Classic CAN と CAN FD を判別できます。
DLC:Classic CANと同様
データフィールド:Classic CANと同様
※byte単位
機器同士は、上記のような 決められた形式(フレーム構造)でデータをやり取りする と取り決められているため、どの機器同士でも正しく通信ができる、という仕組みになっています。
2.2 拡張ID
前節ではIDは11bitと説明したのですが、実は29bitのID(拡張ID)も存在します。どちらもClassic CAN、CAN FDの両方で使用されます。
拡張IDの場合のプロトコルを以下に説明します。
基本的に前述の11bitのIDのプロトコルと同じ形式となっています。"拡張ID"という単語が出てきたら、「IDが11bitのほうではなく29bitのほうなんだな」と思ってくれればいいです。
3. ハードウェア構成
CANのハードウェア構成は以下のとおりです。
| ハードウェア | 説明 |
|---|---|
| MCU(Micro Controller Unit) | CANコントローラを制御するマイコン。※これまでの説明中に出てきた"機器"と同じものと思ってもらって大丈夫です。 |
| CANコントローラ | フレーム生成などCANのプロトコルを実現するためのハードウェア |
| CANトランシーバ | 電気信号として外に出すハードウェア |
CANの送信の流れを簡単に説明します。まずは、MCUがどんなメッセージを送りたいかをCANコントローラに渡します(上記図の①)。CANコントローラは受け取った情報をCANのプロトコルにしたがいデータを組み立てます(上記図の②)。その後、組み立てたデータをCANトランシーバに渡し(上記図の③)、CANトランシーバが電気信号に変換して他の機器へ送信します(上記図の④)。受信時はこの逆の流れになります。
4. CANネットワーク
CAN通信では、マルチマスター方式が採用されています。
この方式では、各機器が好きなタイミングで送信を始めることができるネットワークになっています。複数の機器が同時に送信しようとした場合、CANでは アービトレーション(調停) と呼ばれる仕組みにより、通信の衝突を回避する機能が備わっています。
とりあえず、マルチマスター方式とは、一本の通信線に複数の機器がぶら下がっていて、誰でも好き勝手に送信していい方式と思ってもらえれば大丈夫です。
5. まとめ
とりあえず最低限のことを書いてみました。もっと踏み込んだ内容を知りたい方は 外付けCANコントローラを制御してみた を見ていただけたらと思います。
本当にCANを理解するためには、実際にCANコントローラを制御してみることが一番だと思います。実際の業務では、本記事の内容だけでは足りないことがどうしても出てきます。その都度、「実際どうなってんだろう」、「この場合はどうなるんだろう?」と疑問に思って調べていくことが大切です。




