CAN(三)——过载帧
目录
为什么说过载帧不需要MCU(CPU核心)参与?
1. 过载帧的触发条件
2. 过载帧的发送过程(硬件自动完成)
MCU(软件)的角色是什么?
类比理解
总结
过载帧的发送和协调完全由MCU内部的CAN控制器硬件自动完成,无需CPU核心的干预。
下面进行详细解释。
为什么说过载帧不需要MCU(CPU核心)参与?
过载帧是CAN控制器硬件级别的一种流量控制机制。它的触发条件要求响应速度极快,必须在几个位时间内完成,如果等待相对缓慢的软件(MCU核心)来响应和处理,是根本来不及的。整个过程就像身体遇到烫伤会立即缩手(硬件反射)而不是等大脑下命令(软件处理)一样。
1. 过载帧的触发条件
协议规定了三种情况,CAN控制器会发送过载帧:
-
接收器内部繁忙:这是最常见的原因。比如,CPU还没有来得及从上一个接收邮箱中读取数据,下一个数据帧又来了。此时,CAN控制器硬件会自动发出过载帧来延迟新数据的到达。
-
在间歇场的第一或第二位检测到显性位:间歇场应该是隐性位,出现显性位是非法的,硬件会将其解释为一个过载条件。
-
在错误界定符或过载界定符的最后一个位检测到显性位:这表示有节点未能正确同步到错误/过载过程的结束,硬件会再次触发过载帧来同步所有节点。
所有这些条件都由CAN控制器的硬件逻辑电路实时监控和判断。
2. 过载帧的发送过程(硬件自动完成)
一旦上述任一条件被检测到,硬件会立即行动:
-
发送过载标志:CAN控制器会发出一个连续6个显性位的过载标志。这个标志与主动错误标志的格式完全相同。
-
众裁同步:总线上其他节点检测到这个过载标志后,也会同步地发出自己的过载标志。最终在总线上形成一个由多个节点标志叠加的、长度至少为6位的显性位序列。
-
发送过载界定符:在过载标志之后,所有节点会发送一个由8个隐性位组成的过载界定符。这个过程与错误界定符完全一样。
完成这个过程后,总线会尝试恢复正常通信。
MCU(软件)的角色是什么?
虽然过载帧的发送是硬件自动的,但导致过载发生的原因可能与软件有关。因此,软件的角色是事后处理和根本原因解决。
-
诊断与状态监控:
-
软件可以通过读取CAN控制器的状态寄存器或中断标志来发现过载事件的发生。例如,一个“过载中断”会被触发。
-
当软件检测到过载发生时,它就知道系统出现了问题。
-
-
解决问题:
-
如果过载是由于“接收器内部繁忙”(这是最常见的原因),那么根本问题在于软件处理CAN数据的效率跟不上总线负载。
-
软件需要采取的行动可能包括:
-
优化中断服务程序:让CAN接收中断的处理例程更短、更高效。
-
使用DMA:配置CAN控制器直接使用DMA将接收到的数据存入内存,完全绕过CPU,这是解决该问题的最有效方法。
-
提高软件优先级:如果使用了RTOS,可以提高CAN处理任务的优先级。
-
降低总线负载:如果可能,与系统架构师沟通,看是否能减少总线上不必要的数据流量。
-
-
类比理解
-
CAN控制器硬件:就像一个高效的邮差分拣员。
-
MCU核心(CPU):就像办公室里的工作人员。
-
过载帧:就像邮差分拣员发现工作人员的收件箱已经满了,这时他又拿到一封新信。他不会去叫醒正在开会的工作人员,而是会自动地在分拣中心发出一个“暂停送货”的信号,让发送方稍微等一下。等他清空了一些位置(或工作人员终于来取信了),他再取消这个信号,恢复正常送货。
总结
| 特性 | 错误帧 | 过载帧 |
|---|---|---|
| 目的 | 通知错误(如CRC错误、格式错误),确保数据正确性。 | 流量控制,为接收节点争取更多处理时间。 |
| 触发原因 | 总线上的电气、格式或数据错误。 | 接收节点内部繁忙或特定的协议违规。 |
| 实现方式 | 硬件自动完成。 | 硬件自动完成。 |
| MCU软件角色 | 通过中断或寄存器事后感知错误,进行计数、诊断或进入降级模式。 | 通过中断或寄存器事后感知过载,并优化自身代码以解决导致过载的根本原因。 |
因此,过载帧的发送本身是纯硬件行为,但由过载帧所暴露出的系统性能瓶颈,则需要MCU上的软件来负责解决。
