1. CAN FD 技术概述
各位同学,咱们今天聊聊 CAN FD。说实话,我第一次接触 CAN FD 是在一个车载项目上,客户要求把几十个传感器的数据在一条总线上实时传输。经典 CAN 的 8 字节数据场,根本塞不下。那时候我就意识到——CAN 总线必须得进化了。
1.1 CAN FD 的诞生背景
经典 CAN(Classic CAN)从 80 年代用到现在,稳定、可靠,但有个硬伤:数据场只有 8 字节。你想想看,现在一辆智能汽车里,光一个激光雷达的点云数据就几百 KB,8 字节能传什么?
所以 2012 年,Bosch 牵头推出了 CAN FD(CAN with Flexible Data-Rate)。说白了,就是在不改变物理层的前提下,把数据场撑到 64 字节,同时支持可变速率传输。我当年第一次看到 CAN FD 的帧结构时,第一反应是——嗯,这才对嘛。
核心驱动力:
- 汽车电子系统复杂度爆炸式增长
- ECU 之间需要交换更多数据(诊断、OTA、传感器融合)
- 经典 CAN 带宽瓶颈(最高 1 Mbps)
- 不想推翻现有物理层,兼容性优先
1.2 CAN FD 与经典 CAN 的区别
我习惯把 CAN FD 看作经典 CAN 的「增强版」。两者在物理层上完全兼容——同一个收发器、同一根双绞线。但协议层上,CAN FD 做了几个关键改动。
| 对比项 | 经典 CAN | CAN FD |
|---|---|---|
| 数据场长度 | 最多 8 字节 | 最多 64 字节 |
| 传输速率 | 固定(最高 1 Mbps) | 仲裁段 1 Mbps,数据段最高 8 Mbps |
| 帧格式 | 标准帧 / 扩展帧 | 兼容标准帧 / 扩展帧 + FD 标志 |
| CRC 校验 | 15 位 / 17 位 | 17 位 / 21 位(数据场更长,需要更强校验) |
| BRS 位 | 无 | 有(切换速率的关键) |
| ESI 位 | 无 | 有(错误状态指示) |
这里有个细节我特别想强调:BRS 位(Bit Rate Switch)。它就像个变速杆——在仲裁段用标准速率(保证所有节点都能参与仲裁),一旦拿到总线控制权,立刻切换到高速模式传输数据。我在项目中调试时,经常用示波器抓这个位,看它有没有正确翻转。
避坑指南:我曾经在一个项目中,因为 BRS 位配置错误,导致数据段速率切换失败,整个总线直接报错。后来发现是 STM32 的 CAN FD 外设初始化时,BRS 位默认是关闭的。记得手动开启。
1.3 CAN FD 的核心优势
咱们一条条说。
1.3.1 数据场 64 字节
这是最直观的优势。经典 CAN 一次只能发 8 字节,传一个 32 位的浮点数加个时间戳就满了。CAN FD 一次能塞 64 字节——你可以把 8 个传感器数据打包成一帧发出去。我做过一个测试:同样传输 512 字节数据,经典 CAN 需要 64 帧,CAN FD 只需要 8 帧。总线负载率直接降了 80%。
1.3.2 可变速率
这个设计很聪明。仲裁段用 500 kbps 或 1 Mbps,保证所有节点都能公平竞争总线。数据段可以飙到 2 Mbps、5 Mbps,甚至 8 Mbps。为什么能做到?因为数据段只有发送节点在讲话,没有其他节点参与仲裁,所以可以跑得更快。
我个人的经验是:STM32 的 CAN FD 外设,配合合适的收发器(比如 TJA1044),数据段跑到 5 Mbps 很稳。再往上就需要仔细调终端电阻和线束了。
1.3.3 向后兼容
CAN FD 节点可以和经典 CAN 节点在同一总线上共存。CAN FD 帧里有个 EDL 位(Extended Data Length),经典 CAN 节点看到这个位后,会忽略后面的数据段——不会报错。这个设计太重要了,不然你没法逐步升级现有系统。
注意:虽然物理层兼容,但 CAN FD 节点不能和经典 CAN 节点混用数据段高速模式。如果总线上有经典 CAN 节点,CAN FD 节点必须降速到经典 CAN 的速率。否则经典 CAN 节点会误判位填充规则,直接报错。
1.4 CAN FD 帧结构速览
咱们用一张图把 CAN FD 的帧结构看清楚。这是我自己画的一个简化版,重点标出了与经典 CAN 不同的地方。
看到没?EDL、BRS、ESI 这三个位,是经典 CAN 没有的。EDL 告诉接收方「这是一帧 CAN FD 数据」,BRS 告诉接收方「数据段要加速了」,ESI 则指示发送节点的错误状态。
1.5 什么时候该用 CAN FD?
我个人的判断标准很简单:
- 数据量超过 8 字节——比如传输固件升级包、诊断日志、传感器原始数据
- 总线负载率超过 50%——经典 CAN 已经快撑不住了
- 需要更低的延迟——高速数据段能缩短帧传输时间
- 系统需要向后兼容——现有经典 CAN 节点不用换
我的建议:如果你正在设计一个新项目,而且 MCU 支持 CAN FD(比如 STM32H7、G4、L5 系列),直接上 CAN FD。即使初期只用 8 字节数据场,也为未来升级留了余地。我吃过亏——当年一个项目用了经典 CAN,后来要加 OTA 功能,只能换芯片重做板子,成本翻了三倍。
1.6 本章小结
CAN FD 不是颠覆性的新技术,它是在经典 CAN 基础上做了三个关键升级:64 字节数据场、可变速率、向后兼容。这三个特性让它既能解决当下的带宽瓶颈,又不会让现有系统作废。