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.

[参考译文] CC2652R7:SysCtrlSystemReset 无法重置芯片、芯片会卡住/损坏

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1504531/cc2652r7-sysctrlsystemreset-not-able-to-reset-the-chip-and-chips-get-stuck-bricked

器件型号:CC2652R7

工具/软件:

大家好!

尝试对芯片/标签停止运行的奇数和间歇性情况进行故障排除-固件似乎无法运行。

我们确实实现/添加了看门狗、我知道它是有效的、这意味着如果我们不扩展代码中的看门狗值、它将被复位。 然而、有时我们仍会看到标签刚刷新、似乎没有任何内容可运行。 我很确定在发生这种情况时没有运行任何代码。 当我们通过拉低复位引脚来物理复位标签时、固件会正确启动、标签将再次工作。

根据广泛的调试结果、我们看到了 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)
   }
}

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

    您好、Ivan、

    我希望您做得好。 第7行将器件设置为复位、但需要一些时间才能生效、因此使用 while (1)循环、这是预期行为。

    我想问您是否在设备/设置中设置/使用看门狗来重置设备(如果卡住)?  

    https://e2e.ti.com/f/1/t/1426528/

    我们可以使用 Power_registerNotify 来判断是否退出关断/复位(power.h 文件)

    /*!
     * @简介 获取电源管理器的当前转换状态
     *
     * @返回电流@ref Power_Transition_State。
     *
     * @没有正在进行的转换时返回的 retval #Power_active。
     *
     * @retval #Power_Entry_sleep 在转换到期间返回
     * 睡眠,在睡眠发生之前。
     *
     * @retval #Power_Exiting_sleep 唤醒后返回、因为器件是这样的
     * 正在转换回#Power_active。
     *
     * @sa  @ref ti_drivers_Power Power_Examples_转换"
     */
    UINT_fast16_t Power_getTransitionState (void);
     * @retreval #Power_Sok on success。
     *
     * @retval #Power_EINVALIDPOINTER (如果为@p NotifyObj@p notifyFxn)
     * 为空。
     *
     * @sa Power_unregisterNotify ()
     * @sa  @ref ti_drivers_notify Power_Examples_"using power notify"
     */
    INT_fast16_t Power_registerNotify (Power_Notify NoteObj *pNotifyObj
                     UINT_fast16_t eventTypes
                     Power_Notify NotifyFxn
                     uintptr_t clientArg);

    谢谢、
    Alex F