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.

[参考译文] LP-CC2652RB:看门狗似乎没有工作

Guru**** 657930 points
Other Parts Discussed in Thread: SYSCONFIG, Z-STACK
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/1250277/lp-cc2652rb-watchdog-seems-to-not-be-working

器件型号:LP-CC2652RB
Thread 中讨论的其他器件:SysConfigZ-stack

我正在尝试为 Zigbee 项目启用看门狗功能(用作温度传感器)、并注意到好像从来没有任何系统重新启动。 我已从 syscfg 文件中启用看门狗、并按照文档中所述配置看门狗(也是我在 Resource Explorer 中的看门狗示例中完成的相同方法)。 它的配置方式如下:

    Board_initGeneral();

    Watchdog_init();
    Watchdog_Params_init(&wdgParams);
    wdgParams.callbackFxn = wdgCallback;
    wdgParams.resetMode = Watchdog_RESET_OFF; // tried Watchdog_RESET_ON as well, nothing different happens
    wdgParams.debugStallMode = Watchdog_DEBUG_STALL_ON;

    wdgHandle = Watchdog_open(CONFIG_WATCHDOG_0, &wdgParams);

    if (!wdgHandle)
    {
        while (1)
            ;
    }

    uint32_t tickValue = Watchdog_convertMsToTicks(wdgHandle, 10000);
    Watchdog_setReload(wdgHandle, tickValue);

与 Watchdog_reset_off 一起使用的看门狗回调:

Void wdgCallback(UArg handle){
    while(1)
    {

    }
}

现在、我从不重置看门狗、因此我希望我的应用每10秒崩溃一次、然后重新启动。 但这种情况从未发生。

当使用 Watchdog_reset_off 调试器函数时、可以看到调试器一直卡在回调中、因此在配置的时间之后看门狗可被正确触发。 它从不离开、也不向协调器发送任何数据。

当 调试器使用 Watchdog_reset_on 时、可以看到随着调试器崩溃和无法与电路板交谈会发生一些事情。 但是、在查看 Home Assistant 时、我可以看到电路板按照配置的报告设置将数据包发送到堆栈。

对于 ZigBee 应用、是否需要进行一些特殊设置以使看门狗正常工作? 我的看门狗配置看起来与示例中提供的配置相同;我不明白为什么它不起作用。

试图使用看门狗是针对以下问题的解决方案:在从协调器中移除器件后、似乎会崩溃、需要硬件重启才能再次进行修复。 我认为如果我要使用看门狗、该器件会在一段时间后自行重新启动、并准备好进行维修。 是否有更巧妙的解决方案来解决此问题?

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

    您好、V:

    您是否 独立测试了看门狗 TI 驱动程序示例以便观察调试行为?  您要评估哪个 SDK 版本以及您的看门狗 SysConfig 设置是什么?  我建议在 zcl_sampletemperaturesensor.c 内实施代码、使用 params.callbackFxn =(Watchdog_Callback) wdgCallback;、查看看 门狗 TI 驱动程序 APITRM 的第17章(Watchdog/WDT)。  WDT 通过 MCU PRCM 模块提供的基础设施时钟运行 、而 MCU_AON 在待机模式下运行、因此操作应按预期运行。  相关 E2E 主题:

    https://e2e.ti.com/f/1/t/1127492 
    https://e2e.ti.com/f/1/t/1011195 

    如果可以断言(Main_assertHandler)或在调试器中找到崩溃状态、则可以调用 SysCtrlSystemReset 而不是依赖看门狗。

    此致、
    瑞安

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

    Ryan、您好、感谢您为我们提供的资源! 我已经按照你的建议完成了,并移动了所有看门狗初始化在  zcl_sampletemperaturesensor.c 中,看门狗似乎现在工作正常,但我仍然没有得到正确的复位。 我仍然没有清除看门狗、因为我希望在添加此值之前确保 MCU 发生正确的重新供电。  

    我在另一个线程上看到过在进入看门狗的超时回调时转储 WDT 寄存器的建议、我是这么做的。 下面附加的寄存器:

    WDT_LOAD: 00000000111001001110000111000000
    
    WDT_VALUE: 00000000000100111011001101101001
    
    WDT_CTL: 00000000000000000000000000000101 // interrupts enabled, NMI triggered
    
    WDT_ICR: 00000000000000000000000000000000
    
    WDT_RIS: 00000000000000000000000000000001 // timeout event has occured
    
    WDT_MIS: 00000000000000000000000000000001 // unmasked timeout has occured
    
    WDT_TEST: 00000000000000000000000100000000 // enable stall
    
    WDT_INT_CAUS: 00000000000000000000000000000001 // b0 same as RIS:0
    
    WDT_LOCK: 00000000000000000000000000000001 // locked

    TRM 第17章证实、只要我能理解、看门狗工作正常。

    但是、当回调触发时、我注意到调试器断开连接、因为电路板似乎复位、但它不是完全复位或真正复位。 给电路板上电后、它应自行宣布并开始加入预先存在的网络。 但是、一旦 看门狗引起复位、该评估板不会再次自我通知、并且在我手动重新为其重新供电之前无法加入网络。  

    请您进一步说明一下吗? 我能为您提供更多详细信息吗? 我使用 SDK 6.20.00.29 (由于一些兼容性问题、目前无法使用最新的版本)并使用 zed 样片温度传感器作为起点。  

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

    这里也是 WDT 寄存器的总结。  您可以使用 SysCtrlResetSourceGet (RSTSRC_WARMRESET 表示看门狗复位)监视复位源、并 在复位发生后添加器件状态(devState_ZStack_DevState)和 zcl_sampletemperaturesensor/ZD_app 初始化的日志。  您还可以 使用 LaunchPad 通过 v6.20和 v7.10 SDK 中添加的 WDT 来评估默认示例的行为,从而消除其他软件/硬件依赖性。

    此致、
    瑞安

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

    您好、Ryan。 我无法尝试您的建议、因为我不确定应该怎么做、但我更深入地进行了研究、并使用了看门狗示例将其与我的项目进行比较。 有一些相似之 处,但我仍有一些不确定之处。  

    两个工程的常见行为:  通过 CCS 刷写电路板并让调试器运行时 、以及当看门狗触发电路板复位时、调试器会断开连接、并且它似乎会以一种奇怪的状态挂起、而不会重新启动电路板(看门狗示例应使 LED 闪烁、但实际上不会闪烁)。  

    对于看门狗示例、如果我仅通过调试器为电路板供电、则电路板会正常工作、而且电路板会正确重新启动并使 LED 闪烁。 对于我的 ZigBee 示例、如果我将调试器仅用作电源、电路板就不会再挂起、而是以正常频率发送温度数据、但我永远不会看到器件在每次重启后都会发出我预期的通知消息。 我发现这真的很奇怪;设备会进行传输、就好像没有发生重新启动、但如果确实发生了重新启动、则不会发出设备通知。  

    回到您之前的建议、我不知道您说" 在复位发生后添加器件状态的日志"是什么意思。 如何查找、创建或查看日志? 此外、一旦触发看门狗、我就会断开调试器与电路板的连接、只能通过重新刷写电路板来重新启动它。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    两个项目的常见行为: 通过 CCS 刷写电路板并让调试器运行时 ,以及当看门狗触发电路板复位时,调试器断开连接,且它似乎处于一种奇怪的状态,而不会重新启动电路板[/引述]

    这是称为 启动中暂停(HIB) 的已知问题、不会在调试器会话之外发生。

    如何查找、创建或查看日志

    最好具有 UART 接口。  我建议您 出于自己的目的修改 Z-Stack CUI、但如果您已禁用它、则可以遵循 调试打印 SLA

    一旦看门狗触发,我就失去了与电路板的调试器连接,只能通过重新刷新电路板来重新启动它

    您应该能够切换 RST 线路或对电路板下电上电 、以重新启动器件和 Z-Stack 应用。  我提供了一个修改的 zcl_sampletemperaturesensor.c 示例、它将每5秒清除一次看门狗、并在按下 BTN-2后10秒内重置板、因为它会在 while (1)循环中捕获应用程序。  它按我的预期运行、可能会为您的测试提供某些服务。

    e2e.ti.com/.../4762.zcl_5F00_sampletemperaturesensor.c

    此致、
    瑞安

    [/quote]