aptpod Advent Calendar 2019 6日目担当のエンベデッドチーム 久保田です。
仕事で関わることの多い自動車関連の技術について、少しお話させていただこうと思います。
intdash Automotive Proは、自動車産業における車両CAN(Controller Area Network)データのデータロギング、データ管理、可視化・解析などのワークフローをクラウドシステムをベースにワンストップで実現するSaaSソリューションです。
このソリューションで車両CANを扱っていますが、CANの拡張型プロトコルであるCAN FD (CAN with Flexible Data rate)についてはご存じない方もいらっしゃるのではないでしょうか。
CAN FDについて調べると、ハードウェア仕様の話から始まる難しい記事ばかりです。
そこで、ソフトウェアエンジニア目線でCAN FDについてまとめてみました。
CAN FDについて、ざっくり知りたい方向けです。
CAN (Controller Area Network)
CAN FDの話の前に、CANをおさらいしておきます。
CANとは、ドイツのBosch社が開発したシリアル通信プロトコルです。
OSI参照モデルの物理層・データリンク層・トランスポート層にあたります。
ライン型バス
複数のノード接続によるネットワークを構成するため、CANはライン型バスを採用しています。
転送速度
転送速度の最大は 1 Mbpsです。
フレーム
バスに流れる信号は5つのFieldで構成されています。
フレーム機能
フィールド名 | 説明 |
---|---|
Arbitration field | 通信調停 |
Control field | 通信制御 |
Data field | 転送データ |
CRC field | 誤り検出 |
Acknowledge field | 受信完了通知 |
フレーム構成
- ID (標準ID:11 bits, 拡張ID:29 bits)
- データ長(DLC)
- データ (最大 8 bytes)
マルチマスター方式
バスに空きがある場合、ライン型バスに接続された全てのノードはフレームを送信できます。
ノードはライン型バスに接続された全てのノードにフレームを送信できます。 ( ブロードキャスト )
フレームを受信した場合は全てのノードが受信完了を通知できます。( ACK )
CSMA/CA方式バスアクセス
バスに早くアクセスしたノードがフレームを送信できます。
また、同時に複数のノードがフレームを送信開始した場合、優先順位の高いID (ID番号の小さい方) が送信できます。
CAN FD(CAN with Flexible Data-Rate)
CAN FDとは、CANプロトコル仕様を拡張し、従来のCANよりも通信速度の高速化と送受信データの大容量化に対応可能な通信プロトコルです。
- 従来のCANと物理層、システム構成がほぼ同等
- 物理層のコントローラ、トランシーバはCAN FD対応必要
- IDは「標準フォーマット(11ビットID)」と「拡張フォーマット(29ビットID)」の2種類 (従来と同等)
- データ長は最大 64 bytes (従来は最大 8 bytes)
- 通信ボーレートは最大 1 Mbps (従来と同等)
- データ部分の転送速度が可変で通信ボーレートの1 Mpbs以上が可能 (従来は通信ボーレートと同等)
CAN FD種類
- non-ISO CAN FD (The original Bosch CAN FD)
- ISO CAN FD (CRC強化による堅牢性改善)
CAN FDフレーム構成
- ID (標準ID:11 bits, 拡張ID:29 bits)
- データ長(DLC)
- データ ( 最大 64 bytes )
CAN FDデータ長 (bytes)
フレームに指定されたDLCによりデータ長が指定できます。
CANが最大 8 bytesに対して、CAN FDは最大64 bytesです。
DLC | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
CAN | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 |
CAN FD | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 12 | 16 | 20 | 24 | 32 | 48 | 64 |
通信速度
通信調停を行うnominal(arbitration)ビットレートとデータを転送するdataビットレートとを異なるビットレートに設定が可能です。
nominalビットレートは最大 1 Mbpsですが、
例えば、dataビットレートは制御用途では 2 Mbps、診断・リプログラミング用途では 5 Mbpsで使用されます。
通信パフォーマンス
種類 | CAN転送速度(kbps) | Data転送速度(Mbps) | 送信フレーム数(/sec) | CANデータ長(bytes) | busload(%) |
---|---|---|---|---|---|
CAN | 500 | - | 4000 | 8 | 99 |
CAN FD | 500 | 2 | 4000 | 8 | 46 |
CAN FD | 500 | 2 | 4000 | 32 | 99 |
通信速度の高速化と送受信データの大容量化により、データ転送効率が改善されています
CANノードとCAN FDノードの混在
CANノードとCAN FDノードが同一バス上に混在可能です。
ただし、CANノードはCAN FDフレームを受信できません。
送信フレーム | CANノード受信 | CAN FDノード受信 |
---|---|---|
CAN フレーム | OK | OK |
CAN FD フレーム | Error | OK |
まとめ
CAN FDについて、おわかりいただけましたでしょうか。
Linuxでは、SocketCanと呼ばれるsubsystemにてCAN FDがサポートされていますので
CAN FD対応トランシーバを簡単に接続することができます。
実際に動作させて、CAN FDの優位性を確認してみてください。
参考
CAN in Automation (CiA): CAN FD - The basic idea
SocketCAN - Controller Area Network — The Linux Kernel documentation