1. CAN FD 协议概述:从经典 CAN 到 CAN FD 的进化
大家好,我是你们的嵌入式系统讲师。今天咱们来聊聊 CAN FD 协议。说实话,我在汽车电子这行摸爬滚打了十几年,从最早的 CAN 2.0 一直做到现在的 CAN FD,亲眼见证了这条总线的进化史。
你可能会问:CAN 不是用得挺好的吗?为什么还要搞个 CAN FD?嗯,这个问题问到了点子上。咱们先看看经典 CAN 的痛点,你就明白了。
1.1 CAN 与 CAN FD 的核心区别
经典 CAN(CAN 2.0)从 1986 年诞生到现在,已经跑了快 40 年。它最大的问题是:速度上不去,数据量也上不去。CAN 2.0 最高只能跑到 1 Mbps,一帧数据最多带 8 个字节。这在当年够用,但现在?你想想看,一辆高端汽车上有上百个 ECU,OTA 升级、ADAS 数据、高精地图……8 个字节?塞牙缝都不够。
CAN FD 就是来解决这个问题的。FD 全称是 Flexible Data-rate,说白了就是「灵活数据速率」。它保留了 CAN 的物理层和仲裁机制,但在数据段把速率提了上去,同时把数据长度也翻了 8 倍。
我直接给你列个对比表,一目了然:
| 对比项 | 经典 CAN (CAN 2.0) | CAN FD |
|---|---|---|
| 最大数据速率 | 1 Mbps | 最高 8 Mbps(数据段) |
| 每帧最大数据长度 | 8 字节 | 64 字节 |
| 帧格式 | 标准帧 / 扩展帧 | 标准帧 / 扩展帧 + FD 帧 |
| CRC 校验 | 15 位 CRC | 17 位 / 21 位 CRC(更强) |
| 兼容性 | — | 向下兼容 CAN 2.0 |
| 典型应用 | 传统动力、车身控制 | ADAS、OTA、域控制器 |
看到没?数据段速率从 1 Mbps 飙到 8 Mbps,数据长度从 8 字节跳到 64 字节。这意味着什么?原来要发 8 帧才能传完的数据,现在一帧搞定。原来要等 1 毫秒才能发完的报文,现在 125 微秒就完事。
1.2 CAN FD 的诞生背景
为什么会有 CAN FD?说白了,是被需求逼出来的。
2010 年左右,汽车电子开始爆发。ADAS 摄像头、激光雷达、高精度地图、OTA 远程升级……这些新功能对总线带宽的需求呈指数级增长。经典 CAN 的 1 Mbps / 8 字节,已经成了瓶颈。
我记得当时有个项目,客户要求在一条 CAN 总线上同时跑 3 路摄像头数据、2 路雷达数据和 1 路 GPS 数据。我算了一下总线负载,直接爆表——超过 90%。这根本没法用。最后只能拆成 3 条 CAN 总线,成本翻了三倍。
2012 年,博世和几个主流芯片厂商(NXP、TI、ST)坐在一起,开始讨论下一代 CAN 总线。他们定了几条目标:
- 速度要快:数据段至少 5 Mbps 以上
- 数据要多:每帧至少 64 字节
- 要兼容:不能把现有的 CAN 设备全废了
- 要可靠:CRC 校验必须加强
2015 年,CAN FD 正式成为 ISO 11898-1:2015 标准。从此,汽车电子进入 CAN FD 时代。
1.3 CAN FD 的技术优势
咱们来细数一下 CAN FD 到底强在哪:
- 带宽翻倍:数据段速率最高 8 Mbps,仲裁段仍用 500 kbps 或 1 Mbps,保证兼容性。
- 有效载荷提升 8 倍:从 8 字节到 64 字节,减少帧数量,降低总线负载。
- 更强的 CRC 校验:17 位 CRC(数据长度 ≤ 16 字节)或 21 位 CRC(数据长度 20-64 字节),误检率更低。
- 向后兼容:CAN FD 节点可以和经典 CAN 节点共存于同一条总线。
- 更低的延迟:同样数据量,CAN FD 需要的帧数更少,传输延迟更低。
我画了一张图,帮你理解 CAN FD 的帧结构变化:
1.4 CAN FD 的应用场景
CAN FD 现在主要用在两个领域:汽车电子和工业控制。我分别说说。
汽车电子领域
- ADAS 系统:摄像头、毫米波雷达、激光雷达的数据量都很大。CAN FD 可以承载这些传感器数据,减少总线负载。
- OTA 远程升级:整车 OTA 需要传输大量固件数据。CAN FD 的 64 字节/帧,比经典 CAN 快 8 倍。
- 域控制器通信:智能座舱域、自动驾驶域、车身域之间的高速数据交换。
- BMS 电池管理:电池单体电压、温度、SOC 等数据,一帧就能传完。
工业控制领域
- 伺服驱动器:多轴伺服系统的实时控制数据,CAN FD 可以承载更多轴的状态信息。
- PLC 与远程 IO:分布式 IO 系统的数据采集,一帧可以传更多通道的数据。
- 机器人关节控制:每个关节的位置、速度、力矩数据,CAN FD 一帧搞定。
- 工程车辆:挖掘机、起重机等大型设备的传感器数据采集。
我去年帮一家工业机器人公司做控制器升级,原来用经典 CAN 传 6 个关节的数据,每帧只能传 2 个关节,3 帧才能传完。换成 CAN FD 后,一帧 64 字节,6 个关节的数据全塞进去,还富余 16 个字节。总线负载从 60% 降到了 15%。