目录

为什么说过载帧不需要MCU(CPU核心)参与?

1. 过载帧的触发条件

2. 过载帧的发送过程(硬件自动完成)

MCU(软件)的角色是什么?

类比理解

总结


过载帧的发送和协调完全由MCU内部的CAN控制器硬件自动完成,无需CPU核心的干预。

下面进行详细解释。

为什么说过载帧不需要MCU(CPU核心)参与?

过载帧是CAN控制器硬件级别的一种流量控制机制。它的触发条件要求响应速度极快,必须在几个位时间内完成,如果等待相对缓慢的软件(MCU核心)来响应和处理,是根本来不及的。整个过程就像身体遇到烫伤会立即缩手(硬件反射)而不是等大脑下命令(软件处理)一样。

1. 过载帧的触发条件

协议规定了三种情况,CAN控制器会发送过载帧:

  • 接收器内部繁忙:这是最常见的原因。比如,CPU还没有来得及从上一个接收邮箱中读取数据,下一个数据帧又来了。此时,CAN控制器硬件会自动发出过载帧来延迟新数据的到达。

  • 在间歇场的第一或第二位检测到显性位:间歇场应该是隐性位,出现显性位是非法的,硬件会将其解释为一个过载条件。

  • 在错误界定符或过载界定符的最后一个位检测到显性位:这表示有节点未能正确同步到错误/过载过程的结束,硬件会再次触发过载帧来同步所有节点。

所有这些条件都由CAN控制器的硬件逻辑电路实时监控和判断。

2. 过载帧的发送过程(硬件自动完成)

一旦上述任一条件被检测到,硬件会立即行动:

  1. 发送过载标志:CAN控制器会发出一个连续6个显性位的过载标志。这个标志与主动错误标志的格式完全相同。

  2. 众裁同步:总线上其他节点检测到这个过载标志后,也会同步地发出自己的过载标志。最终在总线上形成一个由多个节点标志叠加的、长度至少为6位的显性位序列。

  3. 发送过载界定符:在过载标志之后,所有节点会发送一个由8个隐性位组成的过载界定符。这个过程与错误界定符完全一样。

完成这个过程后,总线会尝试恢复正常通信。


MCU(软件)的角色是什么?

虽然过载帧的发送是硬件自动的,但导致过载发生的原因可能与软件有关。因此,软件的角色是事后处理和根本原因解决

  • 诊断与状态监控

    • 软件可以通过读取CAN控制器的状态寄存器中断标志来发现过载事件的发生。例如,一个“过载中断”会被触发。

    • 当软件检测到过载发生时,它就知道系统出现了问题。

  • 解决问题

    • 如果过载是由于“接收器内部繁忙”(这是最常见的原因),那么根本问题在于软件处理CAN数据的效率跟不上总线负载

    • 软件需要采取的行动可能包括

      • 优化中断服务程序:让CAN接收中断的处理例程更短、更高效。

      • 使用DMA:配置CAN控制器直接使用DMA将接收到的数据存入内存,完全绕过CPU,这是解决该问题的最有效方法。

      • 提高软件优先级:如果使用了RTOS,可以提高CAN处理任务的优先级。

      • 降低总线负载:如果可能,与系统架构师沟通,看是否能减少总线上不必要的数据流量。

类比理解

  • CAN控制器硬件:就像一个高效的邮差分拣员

  • MCU核心(CPU):就像办公室里的工作人员

  • 过载帧:就像邮差分拣员发现工作人员的收件箱已经满了,这时他又拿到一封新信。他不会去叫醒正在开会的工作人员,而是会自动地在分拣中心发出一个“暂停送货”的信号,让发送方稍微等一下。等他清空了一些位置(或工作人员终于来取信了),他再取消这个信号,恢复正常送货。

总结

特性错误帧过载帧
目的通知错误(如CRC错误、格式错误),确保数据正确性。流量控制,为接收节点争取更多处理时间。
触发原因总线上的电气、格式或数据错误。接收节点内部繁忙或特定的协议违规。
实现方式硬件自动完成硬件自动完成
MCU软件角色通过中断或寄存器事后感知错误,进行计数、诊断或进入降级模式。通过中断或寄存器事后感知过载,并优化自身代码以解决导致过载的根本原因。

因此,过载帧的发送本身是纯硬件行为,但由过载帧所暴露出的系统性能瓶颈,则需要MCU上的软件来负责解决。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐