4. CAN FD帧结构

CAN FD(Flexible Data-rate)在保留经典CAN仲裁机制的基础上,重新定义了帧的位流组织方式,使同一帧内可以同时存在两种位速率:仲裁段使用与经典CAN兼容的标称位速率(Nominal Bit Rate),数据段则切换到更高的数据位速率(Data Bit Rate)。理解CAN FD帧结构,是分析总线负载、诊断响应时间、位定时配置以及错误帧定位的基础。本节按位流顺序拆解标准帧与扩展帧的差异,并逐段说明各字段的作用与工程含义。

一、帧格式总览:标准帧与扩展帧

CAN FD帧按标识符长度分为标准帧(11位ID)和扩展帧(29位ID)。两者在仲裁段结构不同,但从控制段开始逐步趋同。标准帧的仲裁段由SOF、11位标识符和RRS位组成;扩展帧则在11位基础ID之后插入SRR位、IDE位、18位扩展ID和RTR位。IDE位是区分两种格式的关键:显性表示标准帧,隐性表示扩展帧。

与经典CAN相比,CAN FD最显著的变化是取消了远程帧(RTR恒为显性),并引入FDF、BRS、ESI三个控制位。FDF(FD Format)隐性表示CAN FD帧,显性表示经典CAN帧,使两类帧可在同一总线上共存;BRS(Bit Rate Switch)决定数据段是否切换到高速率;ESI(Error State Indicator)用于指示发送节点处于错误主动还是错误被动状态。

CAN FD 标准帧与扩展帧位流结构对照 标准帧(11位ID) SOF 11位标识符 RRS IDE FDF res BRS ESI DLC 数据段 0~64B CRC ACK EOF 扩展帧(29位ID) SOF 11位基础ID SRR IDE 18位扩展ID RTR FDF res BRS ESI DLC 数据段 0~64B CRC 标称位速率区(仲裁段 + 控制段前部) 数据位速率区(数据段 + CRC段,BRS=隐性时切换) BRS采样点 仲裁/标识 控制 数据 CRC ACK/EOF

二、仲裁段:兼容性与优先级

仲裁段决定帧的优先级,并保证CAN FD与经典CAN在同一总线上不会因格式差异产生误判。标准帧仲裁段为SOF + 11位ID + RRS;扩展帧为SOF + 11位基础ID + SRR + IDE + 18位扩展ID + RTR。SOF为显性位,用于硬同步;ID越小优先级越高,显性位在逐位仲裁中胜出。

RRS在标准帧中替代经典CAN的RTR位置,固定发送显性;SRR在扩展帧中固定发送隐性。这样设计的目的是:当标准帧与扩展帧ID前11位相同时,标准帧因RRS显性而优先于扩展帧的SRR隐性,从而保持与经典CAN一致的仲裁行为。IDE位在扩展帧中为隐性,在标准帧中为显性,接收节点据此判断后续是否还有18位扩展ID。

工程提示:扩展帧的29位ID并非简单拼接,而是由11位基础ID和18位扩展ID组成。诊断报文常用29位ID(如0x18DAF110),其中包含优先级、目标地址和源地址信息,配置过滤器时需按完整29位匹配。

三、控制段:DLC、BRS与ESI

控制段是CAN FD区别于经典CAN的核心区域,包含IDE(扩展帧)、FDF、res、BRS、ESI和DLC。FDF隐性表示FD帧;BRS隐性表示数据段切换到数据位速率,显性则整帧使用标称位速率;ESI由发送节点根据自身错误状态填写,错误主动为显性,错误被动为隐性,便于接收方评估网络健康度。

DLC为4位,但CAN FD扩展了其编码含义:0~8仍表示0~8字节,9~15分别映射为12、16、20、24、32、48、64字节。这意味着DLC=9时实际数据长度为12字节,DLC=15时对应64字节。若发送方声明DLC=15但实际只发送了部分字节,接收方会按映射长度校验,可能触发格式错误。

DLC值数据长度(字节)典型用途
0~80~8兼容经典CAN,短诊断/控制报文
912中等长度信号组
1016多路传感器聚合
1120标定/参数下载
1224诊断响应分片
1332较大数据块传输
1448刷写/大数据量场景
1564最大载荷,提升有效吞吐

四、数据段、CRC段、ACK段与帧结束

数据段承载0~64字节有效载荷,是CAN FD提升带宽的主要来源。数据段可使用数据位速率,但发送节点与接收节点必须配置一致的位定时参数,否则采样点偏移会导致位错误。数据段越长,位错误概率越高,因此CRC多项式也相应增强。

CRC段在CAN FD中长度可变:数据长度≤16字节时使用17位CRC,>16字节时使用21位CRC,并附加CRC界定符。CRC计算覆盖SOF至数据段末尾,接收节点重新计算并比对,不一致则产生CRC错误。ACK段由ACK槽和ACK界定符组成,接收节点在ACK槽发送显性位表示正确接收;发送节点回读为隐性则判定应答错误。帧结束由7位隐性EOF和3位间歇组成,间歇后总线进入空闲或下一帧仲裁。

CAN FD 帧位流顺序(标准帧,BRS=隐性):
SOF → 11位ID → RRS → IDE → FDF → res → BRS → ESI → DLC
→ 数据段(0~64B,数据位速率)→ CRC(17/21位)→ CRC界定符
→ ACK槽 → ACK界定符 → EOF(7位隐性)→ 间歇(3位隐性)

五、案例与排障:DLC映射与BRS配置错误

某车型在刷写ECU时,诊断仪发送DLC=15的CAN FD帧,但ECU配置的数据长度仍按经典CAN的8字节处理,结果ECU在接收第9字节后触发格式错误,总线反复重传,刷写超时。排查时通过CAN分析仪抓取原始位流,发现DLC字段为15,而ECU的接收缓冲区仅分配8字节,确认是DLC映射未适配。修正ECU接收配置后,刷写时间从约12分钟降至约4分钟。

另一类常见问题是BRS配置不一致:发送节点BRS=隐性,接收节点BRS=显性,接收节点在数据段仍按标称位速率采样,导致位错误和错误帧。解决方法是统一网络矩阵中的位定时参数,并在台架上用示波器测量数据段位宽,确认采样点位置。

误区提醒:CAN FD并非“把数据段拉长”这么简单。DLC映射、CRC长度、BRS切换点、ESI状态和位定时都必须成对配置。只改数据长度而不改CRC或位定时,往往表现为随机错误帧,而非稳定通信失败,排查难度较高。

六、复盘要点

  • 标准帧与扩展帧的差异集中在仲裁段,IDE位是格式判别的关键。
  • FDF、BRS、ESI是CAN FD新增控制位,决定帧格式、速率切换和错误状态。
  • DLC在CAN FD中扩展为0~15,9~15映射为12~64字节,不能按线性理解。
  • CRC长度随数据长度变化,≤16字节用17位,>16字节用21位。
  • ACK槽、ACK界定符、EOF和间歇共同完成帧确认与结束,任一环节异常都会影响通信可靠性。