CAN FD 与 Classical CAN:BRS 位率切换、DLC 编码与 CRC 差异
更新时间:2026-09-19。前置:CAN 总线车载差分仲裁。CAN FD(Flexible Data-rate,Bosch 2012 / ISO 11898-1:2015)在保持仲裁机制的前提下提带宽,是车身/工业网络的升级方向。
本文要回答的问题
- CAN FD 相对经典 CAN 改了什么,为什么吞吐能高好几倍?
- BRS 位率切换在一帧内是怎么发生的,仲裁段和数据段速率为何不同?
- DLC 怎么映射到 64 字节,为什么 8 以后是跳变的?
- CRC、错误状态 ESI、收发器与经典 CAN 兼容性有哪些坑?
一、CAN FD vs Classical CAN
| 维度 | Classical CAN | CAN FD |
|---|---|---|
| 最大载荷 | 8 字节 | 64 字节 |
| 位率 | 全帧统一(常 125k/500k/1M) | 仲裁段标称 + 数据段可更高(2/5/8M) |
| 标识 | IDE/RTR | 新增 FDF、BRS、ESI,无 RTR 远程帧 |
| CRC | 15 位 | 17 位(≤16B)/21 位(>16B),含填充位计数 |
| 帧效率 | 每 8B 一帧、开销大 | 单帧 64B,协议开销占比大降 |
吞吐提升来自两点:①单帧载荷 8→64 字节;②数据段用更高速率(仲裁段保持低速以支持逐位仲裁,数据段无竞争可加速)。
二、帧结构与位率切换
SOF 仲裁段(ID/RTR/FDF..) ┃ BRS ┃ 数据段(高速) ┃ CRC界定..ACK EOF
低速 nominal bit rate 切换点 DLC/DATA/CRC 用 data rate 切回关键控制位:
- FDF(FD frame flag):原控制场中经典 CAN 的 reserved 位,FDF=1 表示 CAN FD 帧。
- BRS(bit rate switch):BRS=1 表示从该位采样点后切换到数据位率;=0 则整帧都用标称位率。
- ESI(error state indicator):发送节点是否处于错误被动(error passive)状态,供网络诊断。
切换在 BRS 位的采样点完成(进入高速),在 CRC 界定符附近切回标称速率;控制器需维护两套位定时寄存器(NBTP/DBTP),两段各自的波特率预分频、TSEG1/TSEG2、SJW 独立配置。
三、DLC 的非线性编码
经典 CAN DLC 0–8 即字节数;CAN FD 复用同一 4 位 DLC,但 8 之后按固定档跳变:
| DLC | 字节 | DLC | 字节 | |
|---|---|---|---|---|
| 0–8 | 0–8(线性) | 9 | 12 | |
| 10 | 16 | 11 | 20 | |
| 12 | 24 | 13 | 32 | |
| 14 | 48 | 15 | 64 |
没有 9/10/...字节,要发 10 字节必须占 12 字节场(填 padding)。控制器/驱动常见 API 是「给长度,硬件自动选最小可容纳 DLC」。
四、CRC 与位填充
经典 CAN 用 CRC15 并直接对填充后的位流计算;CAN FD 因速率高、帧长,改用 CRC17(数据≤16 字节)/CRC21(>16 字节),且把「填充位个数」作为固定宽度字段参与校验,避免长帧高速下填充规则导致的失步与漏检,提高报文完整性。
五、控制器/采样点配置要点
- 两套采样点:标称段与数据段都建议把采样点设在 ~75–87.5%(多数车厂规范 80%/87.5%),全网络节点必须一致,否则高速段易出错。
- 收发器:经典 CAN 收发器带宽可能不足以跑 2/5/8M,CAN FD 需要专用(或明确支持 FD 的)CAN PHY;BRS 速率受总线长度/电容约束。
- 终端匹配:高速数据段对信号完整性更敏感,120Ω 双端匹配、分支长度要更短。
六、常见的坑
- BRS 开了但收发器不支持 FD:高速段波形畸变,CRC/位错误暴增甚至完全不通。
- 全网采样点不一致:低速仲裁勉强能过,高速数据段大量错误帧。
- 误读 DLC 为线性字节数:软件按 DLC 值×8 分配缓冲区,9–15 时长度全错。
- 经典 CAN 控制器收 FD 帧:经典控制器把 FDF 位当保留位违例而报错;混用总线需全部节点支持 FD 或 FD 节点以经典帧发送。
- 忘记 CAN FD 无远程帧:FD 帧没有 RTR,套用经典 RTR 流程失败。
- 数据段速率超线缆能力:总线长/拓扑差时盲目设 5/8M,错误被动甚至 bus-off。
- NBTP/DBTP 只配一套:BRS 后仍按标称速率,吞吐没提升或直接错位。
- ESI 被忽略:不监控 ESI,某个节点已 error passive 仍被当作健康节点。
- padding 未初始化:10→12 字节中 2 字节 padding 是旧数据,触发上层校验问题。
- 示波器/协议分析仪不支持 FD:用经典工具解码看到乱码,需支持 ISO CAN FD 的探头。
相关与延伸
总结
CAN FD 在不改变逐位仲裁的前提下,用「仲裁段保持标称低速、BRS 位采样点后把数据段切到独立的高速位率、CRC 后切回」获得数倍吞吐,并把载荷扩到 64 字节;DLC 在 8 之后按 12/16/20/24/32/48/64 非线性跳变,CRC 按 16 字节分界用 CRC17/21 并计入填充位计数;落地必须配 FD 收发器、两段采样点全网一致、按码表换算长度——硬件不支持、采样点不一致和把 DLC 当线性是三大坑。