工具/软件:
大家好!
尝试对芯片/标签停止运行的奇数和间歇性情况进行故障排除-固件似乎无法运行。
我们确实实现/添加了看门狗、我知道它是有效的、这意味着如果我们不扩展代码中的看门狗值、它将被复位。 然而、有时我们仍会看到标签刚刷新、似乎没有任何内容可运行。 我很确定在发生这种情况时没有运行任何代码。 当我们通过拉低复位引脚来物理复位标签时、固件会正确启动、标签将再次工作。
根据广泛的调试结果、我们看到了 SDK 7.10.01.24和 CC2652R7芯片的情况、在尝试使用 SysCtrlSystemReset 重置芯片时、标签会被刷写。 我们运行了一个测试、我们 每12小时 调用一次 SysCtrlSystemReset、它运行4-5天、然后在第10次尝试重置(第10次 SysCtrlSystemReset 调用)时、标签被刷新了。
是否有任何需要检查或测量的地方来识别芯片处于该模式时的状态? 我们可以做些什么来防止这种情况发生? 是否有其他人经历过类似的行为? 是否有一种更好/不同/建议的方法从 SysCtrlSystemReset 以外的固件复位芯片?
PS:同时、我们正在运行另一项测试、在调用 SysCtrlSystemReset 之前、我们添加了代码、以关闭外部传感器并重置 cc2652R7 GPIO 、这样、 调用 SysCtrlSystemReset 时、cc2652R7所控制的任何传感器、LED、蜂鸣器和其他模块都将关闭。 此外、cc2652R7正在从另一个 MCU 接收 UART 数据、我们添加了代码来停止 UART 数据并在调用 SysCtrlSystemReset 之前关闭另一个 MCU。 我很怀疑、这可能是某种电源相关问题、我们添加的代码将有助于防止 这种情况发生。
以下是 来自 sys_ctrl.h 的 SysCtrlSystemReset 代码:
它确实有 while (1){}永久循环、这种循环看起来很可怕、我们似乎陷入了...
__STATIC_INLINE void SysCtrlSystemReset( void ) { // Disable CPU interrupts CPUcpsid(); // Write reset register HWREGBITW( AON_PMCTL_BASE + AON_PMCTL_O_RESETCTL, AON_PMCTL_RESETCTL_SYSRESET_BITN ) = 1; // Finally, wait until the above write propagates while ( 1 ) { // Do nothing, just wait for the reset (and never return from here) } }