97、CAN FD的传输层与错误处理:从错误帧到状态恢复
CAN FD的传输层与错误处理:从错误帧到状态恢复
去年冬天,我在调试一个车载网关项目时遇到一个诡异现象:CAN FD总线在高温环境下频繁出现“间歇性失联”,示波器抓到的波形看起来正常,但节点状态寄存器里“Error Passive”标志位反复闪烁。当时团队里有人怀疑是收发器驱动能力不足,有人怀疑是终端电阻匹配问题,折腾了两天没结果。最后我翻出CAN FD协议规范,对照着错误计数器的变化规律,才发现问题出在传输层对“位错误”的响应机制上——一个被很多人忽略的细节:CAN FD在数据场阶段使用了更短的位时间,但错误帧的发送时机并没有等比缩放。
这个案例让我意识到,很多工程师对CAN FD的错误处理理解还停留在“经典CAN那套逻辑上”,但FD的传输层其实做了不少“暗改”。今天这篇笔记,我就把踩过的坑和梳理的要点摊开来聊聊。
一、传输层的“骨架”:数据帧与远程帧的FD化改造
先看最基础的帧结构。CAN FD的传输层保留了经典CAN的“帧起始-仲裁场-控制场-数据场-CRC场-ACK场-帧结束”这个骨架,但每个部分都做了针对性增强。
控制场的变化最值得注意。经典CAN的控制场只有IDE、r0、DLC四个位,而CAN FD的控制场扩展到了IDE、EDL、r0、BRS、ESI、DLC共六个位。其中EDL位是区分经典CAN和CAN FD的“身份证”——EDL=0表示经典CAN帧,EDL=1表示CAN FD帧。BRS位控制位速率切换,ESI位指示发送节点的错误状态(Error Active还是Error Passive)。
这里有个容易踩坑的点:DLC编码在
