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.

[参考译文] CC3200:看门狗复位挂起板

Guru**** 2813875 points

Other Parts Discussed in Thread: CC3200

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/959891/cc3200-watchdog-reset-hangs-up-board

器件型号:CC3200

这是一个问题,似乎以前已经提出过,但从未得到答复。

我继承了一个使用 CC3200 CPU 的项目、该 CPU 已在现场部署了一段时间。 我们一直收到报告、其中一些装置处于"挂起"状态、需要重启电源才能使其重新启动并运行。 我仔细查看了代码、特别是看门狗区域、发现当看门狗超时时、看门狗 ISR 会调用休眠重启。 虽然这在大多数情况下似乎可以正常工作、但我不了解看门狗应该如何工作、因为它要求软件的某些元件正常运行以复位电路板。 我修改了代码、让看门狗继续复位电路板、发现电路板挂起、需要重启电源来重新启动代码、而不是执行干净的复位。 虽然不清楚这是否是现场发生的事情、但它是相关的、我想达到的目标。

我已经执行了一些进一步的研究、发现如果我在系统启动期间通过位于紧密环路来强制在代码中的不同点进行看门狗复位、那么它可以正常工作并将电路板复位、直到调用 sl_Start (NULL、NULL、NULL)函数。 此后、如果看门狗触发、则板会挂起、不会复位。

我想提出以下补充意见。

该软件具有用于在启动时检测上电原因的代码、如果上电原因是看门狗引起的、则执行休眠复位。

代码会拦截硬故障中断、并在触发后执行休眠重启。

代码中未使用 RTOS。

我们确实需要找到一个解决方案、因为现场有数千个单元。

此致

Martin

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

    尊敬的 Martin:

    您使用的是什么 SDK 和服务包?

    如果您在另一篇帖子中看到此问题、您能否共享该帖子?

    此致、

    Sarah

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

    Sarah、

    由于这些装置在一段时间前就已部署、因此它们不使用最新的、但我可以确定我们正在使用:

    SDK:1.2.0

    服务包:1.0.1.11-2.10.0.0

    我用谷歌搜索了很多帖子询问看门狗、这里有一个这样的示例(还有其他的示例)

    e2e.ti.com/.../734704

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

    尊敬的 Martin:

    您是否使用 技术参考手册 (第10.4章)中描述的看门狗恢复序列?

    此致、

    Sarah

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

    Sarah、

    是的、如果启动原因是看门狗复位、我们将强制在启动时进行短暂休眠。 我们已经通过 在 sl_start()函数之前添加一些可触发看门狗的测试代码来检查是否发生了这个序列。

    但是、请注意、当实际的看门狗故障发生时、电路板不会复位、因此该代码段无法运行。

    此致

    Martin

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

    尊敬的 Martin:

    您能否在进入休眠状态并恢复时共享您的代码片段?

    由于该问题发生在 sl_Start 中、我还认为它值得使用最新的主机驱动程序和服务包版本进行测试。 我相信、自 SDK 1.2发布以来、没有任何不兼容的主机驱动程序 API 更改、因此您应该能够从项目更新包含和链接的文件路径以运行此测试。

    此致、

    Sarah

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

    Sarah、

    我已经尝试过最新的 Service Pack 1.0.1.15-2.1.3.0.2、没有什么不同。

    升级 SDK 很棘手、因为我正在处理的工程不会链接到 SDK、而是已将所有使用的 SDK 文件导入到主工程中。 我必须进行广泛的差异和合并才能实现这一目标(如果我们确信这会产生影响、我将会这样做)、但不希望在时机不好时采取行动、因为这可能会有所帮助。

    用于触发休眠的代码片段如下所示、但正如我所说、当看门狗尝试触发复位时、该单元并不像运行该代码那样远。 因为它似乎挂起了系统。

    //检查复位原因

    ulResetCas= PRCMSysResetCauseGet ();
    报告("重置原因:%04X\r\n"、ulResetCos年);

    //
    //如果看门狗触发了复位请求休眠
    //清理引导系统(问:我们应该这样做吗?)
    //
    //从示例文档:
    //
    //"当退出看门狗复位时、系统会立即在短时间内请求休眠并恢复休眠状态
    //仅在从休眠状态返回后才起作用。 这可确保从任何复杂的卡在即的情况中恢复
    //涉及网络子系统。”
    //
    if (ulResetCause == PRCM_WDT_RESET)

    消息("***看门狗复位***\n");

    //注意:此时未启动简单链接,因此不需要 sl_Stop()
    vEnterHibernate ();

    while (1)


    此致

    Martin

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

    尊敬的 Martin:

    我在多年前使用 CC3200时就记得一些评论。

    • 检测到 WDT 复位上电状态后的休眠周期原因是对 NWP 的所有部分执行干净重启(PHY + MAC)
    • 如果在 WDT 之后没有调用您的休眠"IF"、则意味着您的 WDT ISR 内部存在错误(可能您调用 WDT ISR PRCM 复位 API 内部等)
    • 如果您的代码在使用 SDK 1.2启动 sl_Start()后卡住,则这是已知和预期的行为。 如果我没有错、SDK 1.3中的 sl_Start()代码被重写以防止这种行为。 也许您可以将 SDK 1.3中的更改导入代码中。 请参阅 此答案。 如果您查看"OS_DEBUG"构建配置、您将找到一些预定义的定义。 此定义将使您能够在负责 NWP 重新启动的驱动程序1.2中找到确切位置。

    1月