This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] DWD-AM243X:MCU-PLUS-SDK 意外触发

Guru**** 2524460 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1562059/mcu-plus-sdk-am243x-dwwd-does-trigger-unexpectedly

器件型号:AM243X - MCU-PLUS-SDK


工具/软件:

您好:  

我们在 Sitara 上使用的是 DWWD。  

我们的应用非常简单:我们有一个任务和一个看门狗。 此任务会在短于看门狗周期的时间内清除看门狗。 因此、触发不会发生。  

在调试构建时停用看门狗、在发行构建时激活看门狗。 如果我们要调试版本构建、由于看门狗在某些情况下会触发、因此我们会遇到一些问题:

如果器件上已经存在 release-build 并且通过 CCS 加载了 release-build:watchdog 会在 watchdog_clear () 之后立即触发
如果器件上已经有调试构建、并且首先通过 CCS 加载了版本编译:工作。
如果随后再次加载发行版:看门狗立即触发。  

因此、如果看门狗配置一次、它会直接触发、我不知道为什么。  

我们还编写了自己的看门狗驱动程序、该驱动程序利用了看门狗功能、但我在示例和 TRM 中有所介绍。 我所做的与示例相反的唯一事情是清楚的、因为 TRM 说:
“RTI_INTR_WWD 中断处理程序需要清除看门狗违例状态标志、然后通过在看门狗密钥 RTI_WDKEY 寄存器中写入正确的序列来对看门狗进行维护“
但这些例子却相反。 尽管如此、问题依然存在。  

通常、我们可以说这是用于我们的看门狗的代码:

BFWATCHDOG_OPEN 与 WATCHDOG_OPEN 相同、不同之处在于它不采用数组索引、而是配置本身。  

我们还将其用作 Fiq-interrupt、因为我们注意到 HwiP_disable 也会阻止看门狗中断、但这不应该发生、并且 NMI 在 am243x 上也不可用:

AM243X-AM243X:RTI_DWWD 没有不可屏蔽中断 MCU-PLUS-SDK? -基于 Arm 的微控制器论坛 — 基于 Arm 的微控制器 — TI E2E 支持论坛

我们使用看门狗实例 8、即 mcu0_0 上的 TISCI_DEV_RTI8/WATCHDOG_INST_ID_8。 另一个是对应于 mcu0_1 的 9。

因此、如果我们的器件上已经有版本构建、下面我们来看看:

WDSTUS 看起来不错。

现在、在 Watchdog_clear 返回时:  


WDSSTATUS 以某种方式被设置?

CCS 不使用 v1 文件、但 V0、这就是该行与左侧代码不匹配的原因。  
但我们始终会遇到这种情况、因此无法调试已包含发布固件的电路板。 那么、一个已经初始化看门狗一次的固件。  

此外、我们的看门狗周期设置为 16 秒! 所以这不像我在断点时间过长或过短。 它会在启动后创建看门狗后立即发生。

是否还有其他没有记录的内容、或者我刚刚通读过、需要做些什么才能完成此工作?

在某些情况下、真正需要这样才能调试我们的发布固件。 这是不可能的。  

此致

Felix

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Felix、

    在 AM64x 器件中、看门狗计时器 (WDT) 只能在复位后配置一次。 设置看门狗时间周期后、稍后重新配置它将不会覆盖现有配置。

    在您的场景中:

    • 如果您已经刷写了一个使用周期 X 配置 WDT 的映像、然后您从具有不同周期的 CCS 加载另一个映像、则 WDT 外设将保留第一个周期并忽略新配置。
    • 这是 AM64x 上的预期行为—WDT 参数在首次配置后锁存、直到器件复位。

    另一个要点:AM64x 看门狗不支持 SoC 自动复位。 如果我们要在 WDT 过期后进行 soc 重置、则需要将 WDT 与 ESM 模块集成。

    • 如果 SoC 在异常状态(例如,由于故障)下运行、那么即使 WDT 到期、也不会处理中断、并且不会触发复位。
    • 这意味着如果您只依赖于看门狗中断、系统可能出现“卡住“现象。

    要解决此问题、建议使用 ESM 配置 WDT 以在到期后复位 SoC。 这可以确保即使 CPU 卡在异常中或无法处理中断、看门狗仍将恢复系统。

    另请查看下面链接的 WDT 常见问题解答文档、从而获取:

    • 如何针对 SoC 复位模式配置看门狗
    • 调试 AM64x 上的看门狗问题

     【常见问题解答】AM64X/AM62X:当 WDT 计时器在 AM64X 和 AM62X 到期时如何复位 SOC?

     【常见问题解答】AM6442:适用于所有 Sitara AM6X MPU 器件的看门狗调试和配置指南

    此致、

    Anil.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嘿 Swargam ,谢谢你的答复,这解释了我的猜测。
    感谢提供更多信息、但我们到目前为止找到了自己的解决方案、它是有效的、从多个来源(不仅是看门狗)进入同一个复位回调。 但同样、使用 ESM 进行硬件复位可能会有所帮助。

    此致

    Felix

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Felix、

    很抱歉耽误回复。

    我建议使用 WDT + ESM、而不是仅依赖于 WDT 中断回调。

    原因是 WDT 会生成正常中断、如果内核已经卡在异常状态、则 WDT 中断可能无法正确处理。 这会导致看门狗使用不当。

    通过将 ESM 与 WDT 一起使用、您可以确保即使内核发生异常或无法处理 WDT 中断、ESM 仍可以检测到看门狗到期并采取适当的恢复操作。

    此致、

    Anil