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.

[参考译文] CC3220:看门狗未触发

Guru**** 2555630 points
Other Parts Discussed in Thread: CC1310, CC3200, CC3220SF

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/759892/cc3220-watchdog-did-not-trigger

器件型号:CC3220

我的 cc3220板充当服务器(使用 TCP 套接字)和 cc1310 (使用 UART)之间的桥接器。

我使用看门狗自动重新引导 cc3220、然后它在30分钟内无法从服务器获取数据包。 所有(包括看门狗)在30块电路板上都可以正常工作5个月。

昨天,我的两个主板(来自具有多个不同组件的不同制造商)在 RebootMCU() 函数调用后完全挂起。 超过24小时后看门狗未重启 cc3220。 即使是 RESET 引脚也不会重启器件(仅重启)。  

为什么会发生这种情况?

void RebootMCU()
{
UART_PRINT ("尝试 sl_Stop \n"\});

_i16结果= sl_Stop (200);

如果(结果!= 0)
{
UART_PRINT ("sl_Stop result:%d\n\r",result);
sl_Stop (0);
}

UART_PRINT ("RebootMCU()\n\r");

PRCMHibernateCycleTrigger();
} 

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

    您的解释让我有点困惑。 您说您使用看门狗计时器重新启动 CC3220、但在 RebootMCU 函数中您会调用
    PRCMHibernateCycleTrigger 可将器件置于休眠模式并使用 RTC 唤醒。 换言之、如果器件处于休眠模式、看门狗计时器将关闭、您将依靠 RTC 来唤醒。 您是否已验证 RTC 在您遇到问题的2个器件上是否正常工作? 如果 RTC 正常、您还可以尝试验证在锁存值与 RTC 匹配时唤醒源是否实际被触发。

    Jesu
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好! 感谢您的快速回答!
    我不知道发生挂起的 RebootMCU()函数的确切字符串。 可能是未调用 PRCMHibernateCycleTrigger()。
    RTC 工作正常、我已检查。 总之、它没有说明通过复位引脚无法重新引导。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    您使用什么 SOP 模式? 如果使用 SOP 模式010、您应该检查 UART RX 线是否处于低电平状态。

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

    我没有意识到这条线程有反应、抱歉。 您是否仍有相同的问题? 否则、我将关闭线程。 如果您有新问题、请创建新主题。

    Jesu
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    我仍在等待答案。
    我在 CC3220LP 上遇到了同样的问题
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    您能否尝试单步执行重新引导功能、以查看在进入休眠模式之前是否卡住并报告您的发现?

    我的一个小问题是您检查 sl_Stop 的错误。 如果 sl_Stop 返回错误(结果< 0)、则不应忽略该错误并再次调用 sl_Stop。 我建议您检查您的错误是什么、并从容地处理它们、以确保它们在复位后不会持续存在。 此外、检查 sl_Stop 是否返回错误的更安全的方法是检查(结果< 0)而不是(结果!= 0)。

    请注意、WDT 有一条注意事项、即使在看门狗复位时、NWP 也不会完全复位。 更多信息、请参阅 TRM 第10.4节。

    www.ti.com/.../swru465.pdf

    Jesu

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

    显然、第10.4节不适用于 CC3220器件、因此请忽略它。 我的错误。

    Jesu
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好! 感谢您的回答!
    这个问题似乎很少见、我无法使用调试器来解决。
    在我的上一个项目中,我尝试在循环中调用 sl_Stop(),直到它返回>=0,但有时(很少)它永远不会返回>= 0并且器件挂起。 根据 SimpleLink 文档、如果我调用 sl_Stop (0)-器件不会挂起、它只是丢失一些数据包。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    尝试从 SDK 安装中的 driverlib 文件夹中添加项目中的 prcm.c 文件、以便单步执行 PRCMHibernateCyclone 函数。 您不必将其从 SDK 中移动、只需将同一文件复制到您的项目目录中即可。

    如果第一次失败、则不应再次调用 sl_Stop。 您应该检查错误是什么并修复它。

    Jesu
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    正如我说过的、这个问题看起来非常罕见、我无法使用调试器来解决它。
    然后、器件已经处于挂起状态、我无法连接调试器。

    在我的情况下、重置的目的是处理意外错误。 如果我可以解决这个问题-我不需要复位。
    所以:
    是否可以给我一个命令、这将使 cc3220复位、完全有成功的机会?
    2.为什么 cc3220即使通过复位引脚也可以挂起且不重新启动?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Rustem、

    100%的复位保证是设置 nRESET 引脚、这是非常奇怪的、它不能为您服务。 当尝试通过 nRESET 复位时、您测量的脉冲的电压和持续时间是多少?

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

    一个快速评论。 对于 CC3200 - e2e.ti.com/.../2679938、此问题看起来与此类似

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

    您好!

    我尝试了不同的持续时间:0.5秒、1秒、2秒 电压约为0V。 但电路板(我的定制板和 LP)未重新启动。  

    无论如何、我需要通过程序命令重新启动电路板、而不是使用外部组件。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我有一个相关的问题:如何将返回的结果 sl_stop()存储在永久性存储器中? 下次启动后、我可以将此结果传输到服务器、并将获得更多信息来调试此问题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    您最后一个问题的答案是这样。 如果 NWP 被 sl_Stop() API 停止,则不能使用文件系统 API 将数据保存到外部闪存(sFlash)内存中。 您有以下选项:
    -对于 CC3220SF 器件、您可以将数据存储到内部 XIP 闪存中。 但 XIP 闪存不用于此目的、因此 SDK 中的示例在此用例中不可用。 您可以使用 XIP 的一些结束地址来实现此目的。 有关如何实现写入到 XIP 闪存的信息,请访问 TRM ( www.ti.com/.../swru465 第21章)和 SDK 中的 driverlib (\source\ti\devices\cc32xx\driverlib\flash.c/h)。
    -将返回代码存储到另一个器件(连接到 CC3220的另一个存储器、处理器等)

    可能还有其他方法可以存储保持 MCU 重启的值、但我认为这与您的用例无关:
    -在 RAM 中创建单独的段、并在其中存储值。 RAM 中的数据将在应用处理器复位后仍然有效、但不会在 PRCM API 重启整个 CC3220 SoC 的电源后继续有效。
    -将值保存到休眠控制器的保留寄存器(2×32位)中。 但这与您的用例无关、因为您需要使用 RTC 重新启动 SoC。 保留寄存器的内容不能在电源周期内运行。

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

    您好!

    我发现了复位故障的原因:

    设备在  PRCMHibernateCycleTrigger()中挂起 ,行后:

      //请求休眠。

     PRCMHIBRegWrite (((HIB3P3_BASE+HIB3P3_O_MEM_HIB_REQ)、0x1);

    这时 UART 数据包就会出现,直到  PRCMHibernateCycleTrigger() 执行。  

    然后、我停止处理 UART 数据包的线程、调用 UART_CLOSE ()时、禁用所有 PIN 中断时、并且只有在调用  PRCMHibernateCycleTrigger ()之后 、器件才会挂起、并且我成功地进行了复位。

    但这不是解决方案。 如果  PRCMHibernateCyclleTrigger() 由于 UART 而挂起,它可能会因为 其他未知原因而挂起。 重新启动 cc3220的方法是什么、完全成功的机会是什么?

    我尝试了 powerShutdown(),但它也像  PRCMHibernateCycletrigger()一样挂起。

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

    在进入休眠模式之前、您应该关闭所有正在运行的外设实例。 我们的电源管理内核可防止 MCU 进入休眠模式、例如、如果有 UART 数据包进入休眠模式。 您可以在 UART_open 实现中看到正在设置的功率依赖性、您可以在源文件中找到该实现。

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

    您好!
    在这种情况下、为什么 MCU 在接收到 UART 数据包后不进入休眠模式?

    2.我认为,这是必须记录的。 我只看到 PRCMHibernateCycleTrigger ()的一个要求-"call sl_stop()"

    3.安全重启 cc3220的完整步骤列表是什么? 调用 sl_stop()、关闭 外设、还有什么呢?

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

    您好!

    请验证调用 PRCMHibernateCycleTrigger 函数时、CCS 控制台窗口中是否出现 JTAG 断开提示。 如果可能,请在响应中共享控制台日志的屏幕截图。

    请告诉我。

    Jesu

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    是的、我收到了来自调试器的断开连接消息
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    以确保我们位于同一页面。 如果您的调试器断开连接、这意味着您进入休眠模式-它不会挂起。

    Jesu
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    设备完全停止工作、指示灯不闪烁、设备没有任何生命体征。 它可能处于休眠模式、但无法重新启动。
    请告诉我:
    3.安全重启 cc3220的完整步骤列表是什么? 调用 sl_stop()、关闭外设、还有什么呢?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    您的重新引导功能正确。 如果电源管理器与外设进行交互、关闭外设会更安全、就像我先前向您展示的那样-但最终无关紧要。

    如果在您进入重新引导功能时调试器断开连接、这意味着您进入休眠模式。 如果设备未重新启动、您应调查唤醒源。

    Jesu
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    如何调查唤醒源? 我知道、在我的情况下、我只需要一个唤醒源-时钟。 它的工作是正确的
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    由于您只是使用 RTC 来唤醒、除了确保电路正确和测量时钟信号外、没有太多需要研究的、但在探测振荡器时需要小心。 如果您没有测量振荡器的适当设备和知识、我不推荐您使用。  

    尝试使用这些 driverlib 调用、而不是 PRCMHibernateCycleTrigger、它将电源管理器设置为每5秒从休眠状态唤醒。 我只是测试了它、它始终如一地工作。

    // RTC clk 作为 HIB 唤醒源
    PRCMHibernateWakeupSourceEnable (PRCM_HIB_SLOW_CLK_CTR);
    
    //将 HIB 间隔设置为5秒
    PRCMHibernateIntervalSet (32768 * 5);
    
    //进入 HIB 模式
    PRCMnateEnter (); 

    如果它对您有效、请比较寄存器对您所使用的重新启动函数的写入以查找差异、或进入 PRCMHibernateCycleTrigger 实现并将唤醒时间延长到5秒、以查看它是否也起作用。 让我知道发生了什么。

    Jesu

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    为此、我需要将导线焊接到 LaunchPad。 我在程序中的许多操作中使用 RTC、所有操作都可以正常工作。 我还尝试在2个 LP 和3个器件上运行程序、结果相同。 我不认为我们有机会看到所有振荡器都损坏了。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    由于您的程序中使用 RTC 执行其他操作、并且它按预期工作、因此无需验证电路。

    Jesu