aptpod Tech Blog

株式会社アプトポッドのテクノロジーブログです

CAN FDことはじめ

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参照モデルの物理層・データリンク層・トランスポート層にあたります。

ライン型バス

f:id:aptpod_tech-writer:20191129190652p:plain

複数のノード接続によるネットワークを構成するため、CANはライン型バスを採用しています。

転送速度

転送速度の最大は 1 Mbpsです。

フレーム

f:id:aptpod_tech-writer:20191129190849p:plain

バスに流れる信号は5つのFieldで構成されています。

フレーム機能

フィールド名 説明
Arbitration field 通信調停
Control field 通信制御
Data field 転送データ
CRC field 誤り検出
Acknowledge field 受信完了通知

フレーム構成

  • ID (標準ID:11 bits, 拡張ID:29 bits)
  • データ長(DLC)
  • データ (最大 8 bytes)

マルチマスター方式

f:id:aptpod_tech-writer:20191129191023p:plain

バスに空きがある場合、ライン型バスに接続された全てのノードはフレームを送信できます。
ノードはライン型バスに接続された全てのノードにフレームを送信できます。 ( ブロードキャスト )
フレームを受信した場合は全てのノードが受信完了を通知できます。( ACK )

CSMA/CA方式バスアクセス

f:id:aptpod_tech-writer:20191129191047p:plain

バスに早くアクセスしたノードがフレームを送信できます。
また、同時に複数のノードがフレームを送信開始した場合、優先順位の高い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

通信速度

f:id:aptpod_tech-writer:20191129191113p:plain

通信調停を行う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