3. CAN FD 错误帧的定义与类型:主动错误帧、被动错误帧、过载帧
说实话,干这行这么多年,我见过不少工程师一上来就拿着逻辑分析仪抓波形,看见一段乱糟糟的显性脉冲就喊“错误帧”。可要是连这帧是主动发出来的还是被动发出来的都分不清,后面分析故障原因根本无从下手。咱们今天就把三种错误帧的定义、结构、以及触发条件彻底理清。
3.1 错误帧的核心构成
不管哪种错误帧,其实骨架都一样:错误标志 + 错误分隔符。错误标志可以是6个连续的显性位,也可以是6个连续的隐性位(但会被其他节点覆写),而错误分隔符固定是8个隐性位。分隔符的作用是让总线恢复到隐性状态,保证后续的正常帧或过载帧能正常开始。
一个重要的细节:错误帧不是由单个节点发完就结束的。当多个节点同时检测到错误,它们会叠加发送错误标志,导致总线上的显性位长度可能超过6位。逻辑分析仪上看到的错误帧时长往往是“6+叠加”,别误以为那是另一种错误类型。
3.2 主动错误帧
主动错误帧由错误主动(Error Active)节点发出。什么节点是主动的?只要节点的发送错误计数(TEC)或接收错误计数(REC)都小于128,它就处于主动状态。主动节点一旦发现总线错误(比如位填充错、CRC错、ACK错等),立刻在下一个位时间输出6个显性位作为主动错误标志。
我之前调试一台车的中控屏,白屏死机,拿逻辑分析仪一抓——总线上一串6位的显性脉冲,紧跟着8个隐性位,前后帧还都正确。我一看,这是典型的主动错误帧。查下去发现是某个传感器芯片的供电纹波太大,导致位采样出错,传感器自己主动报了错。
- 错误标志长度:6位,全显性(0)
- 分隔符:8位,全隐性(1)
- 后续行为:主动帧结束后,出错节点自动重发被破坏的帧
- 叠加效果:多个主动节点同时报错,显性位长度变成6~12位不等
我的习惯:在逻辑分析仪上设置触发条件为“显性位连续超过5位”,就可以精准捕获主动错误帧的开始位置。之后再检查分隔符是否完整,就能跟被动错误帧区分开。
3.3 被动错误帧
当一个节点的TEC或REC大于等于128,它就会切换为错误被动(Error Passive)状态。被动节点在检测到错误时,只能发送6个隐性位作为被动错误标志。注意,隐性位本身不驱动总线,所以其他主动节点很容易覆盖这个标志——这意味着被动错误帧的波形往往不明显。
为什么会有被动状态?说白了,这是CAN协议的一种“隔离机制”。让频繁出错的节点先闭嘴,不要一直发主动错误把整条总线打垮。我遇到过一台工业机器人,电机驱动器反复掉线,追查发现它的REC已经飙到200多了,发出的被动错误标志被其他节点覆盖,连错误帧的波形都看不清晰,最后只能靠状态寄存器确认它是被动状态。
- 错误标志长度:6位,全隐性(1)
- 分隔符:8位,全隐性(1)
- 危险之处:被动标志可能完全被主动节点淹没,逻辑分析仪上只看到一段长的隐性电平,容易被忽略
- 节点状态:错误被动节点在发送完成后不会自动重发,它必须等到总线空闲后才能再次尝试
我曾经踩过的坑:刚用逻辑分析仪时,看到一段长时间隐性电平就以为总线空闲,结果漏掉了被动错误帧。后来发现,在空闲帧间隔里如果出现6个以上的隐性位,其实应该判断为被动错误帧。我建议你在解码时勾选“忽略空闲帧间隔”选项,或者手动计算位时间。
3.4 过载帧
过载帧和错误帧长得像,但原因完全不同。它并不是因为数据传错了,而是因为节点接收器没准备好,或者帧间隔的前两个位里检测到了显性位。过载帧的结构也是过载标志(6个显性位)+ 过载分隔符(8个隐性位)。
你想想看,一个节点在结束上一帧后,需要一点时间处理接收到的数据。如果总线紧接着又来一个帧的首位,处理不过来的节点就会主动发出6个显性位,把总线拉长。过载帧的目的就是“喊停”,给接收节点争取时间。
- 过载标志:6位显性(0)
- 过载分隔符:8位隐性(1)
- 触发条件:
- 帧间隔第1位或第2位检测到显性电平
- 接收器因处理延迟无法在预期时间开始下一帧
- 总线错误(但此时会优先发错误帧)
- 与错误帧的区别:过载帧只在帧间隔或帧结束前触发,而错误帧可以在帧内任何位置触发
我记得有一次系统跑着跑着突然卡顿,抓波形发现每隔几个正常帧就出现一段6位显性+8位隐性的波形。起初我以为是主动错误帧,但看帧结构完全正确,也没有错误标志。后来发现是一个网关芯片的CPU负载太高,导致接收FIFO溢出,它用过载帧来强制推迟下一帧。
3.5 三种错误帧的快速比照
| 特性 | 主动错误帧 | 被动错误帧 | 过载帧 |
|---|---|---|---|
| 触发原因 | 错误主动节点检测到总线错误 | 错误被动节点检测到总线错误 | 接收器未准备好 / 帧间隔异常 |
| 错误标志 | 6位显性 | 6位隐性 | 6位显性 |
| 分隔符 | 8位隐性 | 8位隐性 | 8位隐性 |
| 节点是否重发 | 自动重发 | 等待总线空闲后重发 | 不重发,只是延时 |
| 波形辨识度 | 极易识别 | 容易被淹没 | 与主动错误帧相似,但位置不同 |
| 节点状态 | Error Active | Error Passive | 无状态变化 |
3.6 本章知识结构图
下面这张图帮你理清三种错误帧的关系与差异,方便你以后在逻辑分析仪波形上一眼判断类型。