第2章:CAN FD协议概述——从诞生到结构

做CAN总线这么多年,我见过不少工程师一上来就追问“FD到底快在哪里”。其实在搞清楚速度之前,先得弄明白它为什么要诞生,又是怎么在经典CAN的骨架上“变形”的。

这一章我们就从根上讲起,把CAN FD的来龙去脉、技术差异、帧结构通通理清楚。你以后做EMI分析时,这些基础会直接帮你定位问题。

2.1 CAN FD的诞生背景

经典CAN(ISO 11898-1:2003)从90年代用到现在,稳得像块石头。但到了2010年前后,事情变了。

  • 带宽不够用:一辆高端车上的ECU数量从几十个涨到上百个,总线负载经常飙到60%以上。按经典CAN的500 kbps速率,关键信号很容易被堵住。
  • 有效载荷太小:经典CAN一帧最多带8字节数据。传输固件升级包或大数据诊断时,要拆成几十帧,效率低得让人抓狂。
  • 实时性要求提高:高级驾驶辅助系统(ADAS)和线控底盘要求消息延迟低于100微秒,经典CAN的仲裁机制在高负载情况下经常“打架”。

我记得有一次调试整车网络,一台诊断仪不停地发送8字节的刷写请求,结果导致动力CAN上的车速信号周期性地丢失——说白了就是带宽被吃死了。

为了解决这些痛点,博世在2012年推出了CAN FD的草案。2015年,它正式被纳入ISO 11898-1:2015标准。你想想看,从草案到国际标准只用了3年,这足以说明行业对它的迫切需求。

关键驱动因素:

  1. 总线负载率高,需要更高的数据传输速率
  2. 诊断/升级场景需要单帧传输超过8字节
  3. 实时控制类消息需要更低的延迟和更可靠的CRC保护

2.2 CAN FD与经典CAN的核心差异

说到差异,很多人第一反应就是“速率快、数据长”。没错,但远不止这些。

咱们直接看这张对比表,一目了然。

对比项 经典CAN CAN FD
最大数据场长度 8 字节 64 字节
数据传输阶段速率 固定不变(≤1 Mbps) 可变(最高8 Mbps或更高)
仲裁阶段速率 等同于数据阶段速率 固定(通常≤1 Mbps)
控制场结构 标准控制位 增加了EDL、BRS、ESI位
CRC长度 15/17位 17/21位
发送失败重试机制 自动重发(相同帧) 自动重发(支持错误帧恢复)
兼容性 无法识别CAN FD帧 可发送并识别经典CAN帧

这里我重点讲三个你以后做EMI分析时绕不开的差异点。

  • 可变速率:仲裁阶段用500 kbps保障总线稳定,数据阶段瞬间切换到2 Mbps以上传输。这样的好处是在不改变总线长度的前提下大幅提升吞吐量。我曾经在一条5米长的屏蔽双绞线上,把数据段速率推到4 Mbps,测试峰值吞吐量提升了近4倍。
  • 数据场长度翻倍加翻倍:从8字节飙到64字节。这对诊断刷写来说太爽了,单次传输的数据量大,可以有效减少总线上的消息数量,降低EMI干扰的产生机会。但别忘了,数据场越长,CRC保护范围也越大,否则误码率会显著上升。
  • 更强的CRC校验:经典CAN用15/17位CRC,CAN FD针对更大数据场采用了17/21位CRC。你想想看,数据场越长,位错误概率越高,没有更强的校验,那出错根本发现不了。

我给你的建议:

在学习CAN FD的错误帧关联分析时,先把“可变速率”和“数据场64字节”这两条印在脑子里。因为EMI干扰的核心影响对象就是高速数据传输阶段——你回想一下,经典CAN跑500 kbps时极少出现位错误,但跑2 Mbps以上的CAN FD在数据段就很容易出位错误。

2.3 数据帧结构详解

CAN FD的数据帧结构保留了经典CAN的基本骨架,但你在控制场和CRC场里会发现明显的“增肌”。

咱们从帧起始开始,一步步拆解。

帧起始(1 bit) → 仲裁场(12或32 bit) → 控制场(8或11 bit) → 
数据场(0~64字节) → CRC场(17或25 bit) → 应答场(2 bit) → 帧结束(7 bit)

嗯,和经典CAN最不一样的就是控制场和CRC场。我来给你说一下核心字段。

字段 长度 作用描述
EDL (Extended Data Length) 1 bit 隐性=CAN FD帧,显性=经典CAN帧。CAN FD控制器看到显性时,立即按经典CAN格式解析
BRS (Bit Rate Switch) 1 bit 隐性=切换到高速数据段,显性=保持仲裁速率。BRS位之后的数据段和CRC段都跑在高速上
ESI (Error State Indicator) 1 bit 隐性=发送节点处于error passive状态,显性=发送节点处于error active状态
DLC (Data Length Code) 4 bit 编码数据场字节数。经典CAN最多8,CAN FD可编码9~64(采用新的线性映射)

我个人在实际项目中犯过一个低级错误:在配置CAN FD控制器时忘记把BRS位设成隐性,结果数据段一直跑在500 kbps,测了半天吞吐量上不去。所以你在做EMI测试时,一定要确认BRS位是否被正确配置。

再说说CRC场。CAN FD的CRC长度有两种:17位(数据场小于等于16字节)和21位(数据场大于16字节)。对于64字节的情况,CRC范围覆盖仲裁场、控制场、数据场和填充位。这个覆盖范围比经典CAN大得多。

避坑指南:

我曾经遇到过一个故障:某条CAN FD总线上偶尔出现CRC错误。排查了一整天发现,是因为某个节点配置的BRS位虽然正确,但数据段速率太高导致总线信号过冲明显,使得采样点偏移。最终通过调整数据段速率从4 Mbps降到3 Mbps,同时优化了终端匹配,CRC错误就消失了。

2.4 远程帧结构及其在CAN FD中的变化

远程帧在经典CAN中的典型用途是请求数据。一个节点发远程帧,目标节点收到后回复数据帧。CAN FD依然支持远程帧,但它的结构发生了显著变化。

你注意看:CAN FD的远程帧不再包含BRS位和ESI位。为什么?因为远程帧本身不传输数据,也就不需要切换到高速数据阶段。所以它的数据段速率始终等于仲裁速率。

但有个坑:CAN FD控制器必须能正确识别并处理远程帧。有些早期的CAN FD控制器在收到远程帧时错误地将EDL位解析为0,导致后续的帧解析全乱了。

远程帧结构(CAN FD中):
帧起始 → 仲裁场(ID+RTR位) → 控制场(不含BRS/ESI) → CRC(17位) → 应答场 → 帧结束

我自己的做法:在做EMI测试时,远程帧相对较少,但它出现的时机往往是在总线低负载时。一旦EMI干扰导致远程帧损坏,目标节点就会收不到请求,两个节点之间就会进入死等状态。这确实是一个容易被忽略的问题。

2.5 本章知识结构图谱

下面这张SVG图归纳了CAN FD协议的核心体系。你把它当作一张“作战地图”,以后分析错误帧时随时对照。

CAN FD协议核心知识体系 诞生背景:带宽+载荷+实时性 核心差异:速率+长度+CRC 帧结构:数据帧+远程帧 EDL位:标识FD或经典帧 BRS位:切换到高速数据段 ESI位:发送节点错误状态 可变速率:仲裁500k→数据4M 数据场:8B→64B提升效率 CRC长度:17位/21位保护 数据帧:含BRS/ESI/EDL 远程帧:不含BRS/ESI DLC编码:非线性映射变化 EMI干扰 → 位错误 → 错误帧 → 帧丢失 → 总线实时性下降 错误帧捕获与分析实操:协议分析仪 + 示波器 + 近场探头 重点掌握:BRS与EMI关系

这张图的核心思想:你从CAN FD协议本身出发,理解它能跑多快、能传多少数据、怎么保护数据;然后这条线就会自然引向EMI干扰是怎么破坏它的——说白了,BRS位切换后的高速数据段是整个协议的“弱点”,也是我们做EMI关联分析的突破口。

嗯,本章的内容就到这里。你先把CAN FD协议的结构和差异吃透,后面做错误帧分析时,就不会觉得它是个黑盒了。