インターフェース・バス(有線)

CAN FD

高速・大容量化したCAN。

概要

CAN FD(CAN with Flexible Data-rate)は、2012年にBosch社が発表した従来のCAN(Controller Area Network)の拡張規格です。「FD」はFlexible Data-rateの略で、仲裁フェーズと異なるデータ転送レートを使えるのが最大の特徴です。

従来のCAN 2.0では最大1Mbps・最大8バイトのペイロードという制約がありました。CAN FDはこれを大幅に拡張し、データ転送フェーズで最大8Mbps(実用的には2〜5Mbps)、ペイロードを最大64バイトまで対応しました。これにより、自動車の電動化・自動運転に伴うデータ量増加に対応できます。

2015年にISO 11898-1として国際標準化され、現在の新型自動車ECUでは標準的に採用されています。既存のCANインフラや物理層(配線・トランシーバ)を基本的に流用でき、CAN FD対応コントローラがCAN 2.0フレームも処理できるため、移行が比較的容易です。

歴史・背景

2010年代に入り、自動車の先進運転支援システム(ADAS)・インフォテインメント・電動パワートレインの普及により、ECU間の通信データ量が急増しました。従来のCAN(最大1Mbps・8バイト)では帯域が不足し始めた背景からCAN FDの開発が始まりました。

2012年にBoschがCAN FD仕様書Version 1.0を公開。2015年にISO 11898-1:2015として国際規格化。同年からInfineon・NXP・Microchipなどが対応ICを量産開始しました。STM32G0/G4/H7シリーズなど多くのマイコンがCAN FDペリフェラルを内蔵しています。

2019年頃からCAN XL(CAN FDの後継、最大20Mbps・2048バイト)の標準化も始まり、車載ネットワークの更なる進化が続いています。

技術仕様

従来CANとの比較

項目CAN 2.0CAN FD
最大仲裁速度1 Mbps1 Mbps
最大データ速度1 Mbps8 Mbps(実用2〜5Mbps)
最大ペイロード8 バイト64 バイト
CRCビット数15ビット17ビット or 21ビット
ISO規格ISO 11898-1:2003ISO 11898-1:2015

データ長コード(DLC)の拡張

CAN FDではDLCの値と実際のデータ長のマッピングが拡張されました:

DLC値CAN 2.0のデータ長CAN FDのデータ長
0〜80〜8バイト0〜8バイト(同じ)
98バイト(上限)12バイト
108バイト16バイト
118バイト20バイト
128バイト24バイト
138バイト32バイト
148バイト48バイト
158バイト64バイト

フレームフォーマット

CAN FDフレームには従来CANフレームとの識別ビット(FDF: FD Format)が追加されています:

[SOF][ID][RTR→RRS][IDE][FDF=1][res][BRS][ESI][DLC][Data(0〜64B)][CRC(17 or 21bit)][CRC Del][ACK][ACK Del][EOF]
  • FDF(FD Format): 1のときCAN FDフレームを示す
  • BRS(Bit Rate Switch): 1のときデータフェーズを高速化
  • ESI(Error State Indicator): エラーアクティブ/パッシブの状態を示す

CRC強化

従来CANの15ビットCRCから、CAN FDではデータ長に応じて17ビットまたは21ビットCRCに強化されています。これにより大容量ペイロードでの誤り検出能力が向上しています。

動作原理

CAN FDのビット転送は2つのフェーズに分かれています:

仲裁フェーズ(Arbitration Phase):

  • 従来CANと同じ速度(最大1Mbps)で動作
  • ID・制御フィールドの送信と調停(アービトレーション)を行う
  • 全ノードが同じタイミングでサンプリングする必要があるため低速

データフェーズ(Data Phase):

  • BRSビット後、高速(最大8Mbps)に切り替え
  • データ・CRCを高速転送
  • CRCデリミタ後、再び仲裁速度に戻る
[低速: 仲裁フェーズ]  [高速: データフェーズ]  [低速]
[SOF..FDF..BRS=1]--->[Data..CRC]---------->[ACK..EOF]
     ↑BRS後に高速化         ↑CRC Del後に低速へ
// STM32G4 HALを使ったCAN FD設定と送信例

FDCAN_HandleTypeDef hfdcan1;

// FDCAN初期化
hfdcan1.Instance                  = FDCAN1;
hfdcan1.Init.ClockDivider         = FDCAN_CLOCK_DIV1;
hfdcan1.Init.FrameFormat          = FDCAN_FRAME_FD_BRS;   // CAN FD + ビットレートスイッチ
hfdcan1.Init.Mode                 = FDCAN_MODE_NORMAL;
hfdcan1.Init.AutoRetransmission   = ENABLE;
hfdcan1.Init.TransmitPause        = DISABLE;
hfdcan1.Init.ProtocolException    = DISABLE;
// 仲裁フェーズ: 500kbps, データフェーズ: 2Mbps (クロック80MHzの場合)
hfdcan1.Init.NominalPrescaler     = 1;
hfdcan1.Init.NominalSyncJumpWidth = 16;
hfdcan1.Init.NominalTimeSeg1      = 63;
hfdcan1.Init.NominalTimeSeg2      = 16;
hfdcan1.Init.DataPrescaler        = 1;
hfdcan1.Init.DataSyncJumpWidth    = 4;
hfdcan1.Init.DataTimeSeg1         = 15;
hfdcan1.Init.DataTimeSeg2         = 4;

HAL_FDCAN_Init(&hfdcan1);

// CAN FDフレーム送信(64バイトペイロード)
FDCAN_TxHeaderTypeDef tx_header;
uint8_t tx_data[64];

tx_header.Identifier          = 0x123;
tx_header.IdType              = FDCAN_STANDARD_ID;
tx_header.TxFrameType         = FDCAN_DATA_FRAME;
tx_header.DataLength          = FDCAN_DLC_BYTES_64;   // 64バイト
tx_header.ErrorStateIndicator = FDCAN_ESI_ACTIVE;
tx_header.BitRateSwitch       = FDCAN_BRS_ON;          // データフェーズ高速化
tx_header.FDFormat            = FDCAN_FD_CAN;          // CAN FDフレーム
tx_header.TxEventFifoControl  = FDCAN_NO_TX_EVENTS;

// 64バイトデータをセット
for (int i = 0; i < 64; i++) tx_data[i] = i;

HAL_FDCAN_AddMessageToTxFifoQ(&hfdcan1, &tx_header, tx_data);

用途・ユースケース

CAN FDが採用される場面:

  • ADAS(先進運転支援): カメラ・LiDAR・レーダーセンサーのデータを大容量フレームで転送。従来CANの8バイト制約を64バイトに拡張したことで複数センサーデータを1フレームで送信可能
  • 電動パワートレイン: バッテリーマネジメントシステム(BMS)とインバーターの間で大量のセル電圧・温度データを高頻度で送信
  • ファームウェアOTA更新: 車載ECUのソフトウェア更新データをCAN FDで効率的に転送(UDS on CAN FD)
  • 産業用ロボット: CAN FD対応CANopenプロファイル(CANopen FD)による高速・高精度なモーション制御
  • CANopen FD: 産業用CANopenプロトコルのCAN FD版。2018年に標準化

実装・開発のポイント

トランシーバの互換性

CAN FDは物理層(トランシーバ)としてCAN 2.0と同じTJA1050/TJA1051等を使えますが、高速データフェーズ(2Mbps以上)では専用の高速CAN FDトランシーバ(TJA1462・SN65HVD230等)が必要です。ケーブルの品質やコネクタの品質も重要になります。

ビットタイミング計算の複雑さ

CAN FDでは仲裁フェーズとデータフェーズで独立したビットタイミング設定が必要です。特にデータフェーズでは伝搬遅延(Transmitter Delay Compensation: TDC)の補正が重要になります。各マイコンベンダーのCANビットタイミング計算ツールを活用します:

データフェーズでのTDC(送信遅延補正):
TDC補正値 = 伝搬遅延(ns) × データボーレート(bps) / 1e9
(例:2Mbps、100ns遅延の場合: 100 × 2M / 1G = 0.2 Tq)

ISO CAN FD vs non-ISO CAN FD

2012年のBosch仕様(non-ISO CAN FD)と2015年のISO 11898-1:2015(ISO CAN FD)では微妙なプロトコル差異があります。現在の実装ではISO CAN FDが標準です。互換性問題を避けるため、デバイス購入時にISO CAN FD対応を確認します。

他技術との比較

CAN FD vs Automotive Ethernet

項目CAN FDAutomotive Ethernet(100BASE-T1等)
最大速度8 Mbps100 Mbps〜10 Gbps
ペイロード最大64バイト最大1500バイト(標準Ethernet)
配線2線(既存流用可)1対の差動ペア(専用配線)
リアルタイム性優れる(決定論的)TSN(時刻同期)で改善中
採用コスト低い(既存インフラ流用)高い(新規設計が必要)

高帯域が必要なカメラ映像等にはAutomotive Ethernetを使い、ECU間の制御・診断通信にはCAN/CAN FDを使うというハイブリッド構成が現在の主流です。

関連用語

参考リンク