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与经典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。
三、控制段: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~8 | 0~8 | 兼容经典CAN,短诊断/控制报文 |
| 9 | 12 | 中等长度信号组 |
| 10 | 16 | 多路传感器聚合 |
| 11 | 20 | 标定/参数下载 |
| 12 | 24 | 诊断响应分片 |
| 13 | 32 | 较大数据块传输 |
| 14 | 48 | 刷写/大数据量场景 |
| 15 | 64 | 最大载荷,提升有效吞吐 |
四、数据段、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=显性,接收节点在数据段仍按标称位速率采样,导致位错误和错误帧。解决方法是统一网络矩阵中的位定时参数,并在台架上用示波器测量数据段位宽,确认采样点位置。
六、复盘要点
- 标准帧与扩展帧的差异集中在仲裁段,IDE位是格式判别的关键。
- FDF、BRS、ESI是CAN FD新增控制位,决定帧格式、速率切换和错误状态。
- DLC在CAN FD中扩展为0~15,9~15映射为12~64字节,不能按线性理解。
- CRC长度随数据长度变化,≤16字节用17位,>16字节用21位。
- ACK槽、ACK界定符、EOF和间歇共同完成帧确认与结束,任一环节异常都会影响通信可靠性。