概要
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.0 | CAN FD |
|---|---|---|
| 最大仲裁速度 | 1 Mbps | 1 Mbps |
| 最大データ速度 | 1 Mbps | 8 Mbps(実用2〜5Mbps) |
| 最大ペイロード | 8 バイト | 64 バイト |
| CRCビット数 | 15ビット | 17ビット or 21ビット |
| ISO規格 | ISO 11898-1:2003 | ISO 11898-1:2015 |
データ長コード(DLC)の拡張
CAN FDではDLCの値と実際のデータ長のマッピングが拡張されました:
| DLC値 | CAN 2.0のデータ長 | CAN FDのデータ長 |
|---|---|---|
| 0〜8 | 0〜8バイト | 0〜8バイト(同じ) |
| 9 | 8バイト(上限) | 12バイト |
| 10 | 8バイト | 16バイト |
| 11 | 8バイト | 20バイト |
| 12 | 8バイト | 24バイト |
| 13 | 8バイト | 32バイト |
| 14 | 8バイト | 48バイト |
| 15 | 8バイト | 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 FD | Automotive Ethernet(100BASE-T1等) |
|---|---|---|
| 最大速度 | 8 Mbps | 100 Mbps〜10 Gbps |
| ペイロード | 最大64バイト | 最大1500バイト(標準Ethernet) |
| 配線 | 2線(既存流用可) | 1対の差動ペア(専用配線) |
| リアルタイム性 | 優れる(決定論的) | TSN(時刻同期)で改善中 |
| 採用コスト | 低い(既存インフラ流用) | 高い(新規設計が必要) |
高帯域が必要なカメラ映像等にはAutomotive Ethernetを使い、ECU間の制御・診断通信にはCAN/CAN FDを使うというハイブリッド構成が現在の主流です。