我正在使用 S32K314,最近在通过短路振荡器进行测试时遇到了 CAN 问题;
恢复后,我监测了SPI和ADC模块,这些模块工作正常,但CAN模块无法正常工作。
调试器显示以下信息:在此状态下,CAN 总线无法接收或发送任何帧。
这是怎么回事?如何通过软件修复这个故障?
你好,
谢谢你的回复。
我尝试在“Mcu_ClockSourceFailure_Notification”中添加一些测试代码,但此通知没有被触发;
那么从软件方面来说,我们如何才能注意到这个问题并重置CAN模块呢?
谢谢!
以下是您提到的寄存器的值:
MCR
CTRL1
认知行为疗法:
FDCBT:
ECR
ESR1
您好,
从提供的屏幕截图来看,接收错误计数器 (RXERRCNT) 正在增加,而 TXERRCNT 保持为 0,这与典型的发送相关问题并不完全吻合,即使 ESR1 指示正在进行传输尝试。
振荡器短路可能会影响时钟,例如导致恢复后 CAN 位时序不正确。然而,目前的信息不足以证实这一点。
请问您能否提供以下信息:
如果 FlexCAN 模块时钟和 CAN 协议时钟正在运行且频率符合预期,您还可以尝试执行 FlexCAN 模块软件重置,然后完全重新初始化模块,并检查通信是否恢复。
BR,彼得
您好,
如果没有进入 Mcu_ClockSourceFailure_Notification(),我的第一个假设是项目中没有配置或启用相应的 MCU 中断/通知路径。
请您核查一下:
在振荡器短路事件发生后,检查 CMU 和 RGM 状态寄存器也可能很有用,以验证是否确实检测到了时钟故障。
从 FlexCAN 寄存器转储可以看出,该模块似乎已启用并与总线同步 (SYNCH=1),而 RXERRCNT 增加,TXERRCNT 保持 0,现在没有总线活动。我看到显示的位定时寄存器(CTRL1、CBT、FDCBT)不包含有效的 CAN 定时配置,尽管如果使用增强型 CAN 位定时并且实际定时是通过相应的增强型 CAN 位定时寄存器配置的,这是可以预期的。
因此,在实施 CAN 复位策略之前,最好先验证是否检测到时钟故障事件以及通知机制是否已正确配置。
BR,彼得