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.

[参考译文] CC3235SF:不会清除复位原因

Guru**** 2609665 points
Other Parts Discussed in Thread: UNIFLASH, CC3235SF

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/1577555/cc3235sf-reset-cause-is-not-cleared

器件型号:CC3235SF
Thread 中讨论的其他器件:UNIFLASH

我将 MCU 置于关断状态、唤醒后、我注意到复位原因设置为“看门狗“。

在我的代码中、我会检查两个复位原因、即 MCU 是经历了下电上电复位还是看门狗复位。

不过、我始终会看到看门狗复位标志会置位、即使 MCU 已完成下电上电复位也是如此。

这是我的代码;

void powershutdown (uint32_t shutdownTime)

(void) Power_registerNotify (&hibSignal、PowerCC32XX_Entering_shutdown、
             &preHibConfig、(uintptr_t) NULL);
  (void) Power_shutdown (0、shutdownTime);
}
在 main 中、我已经检查了复位原因、
内部 main (void)

  uint32_t resetCause = MAP_PRCMSysResetCauseGet ();
BOARD_INIT ();
initwatchdog();
pwm_init ();
spi_init ();
(void) InitTerm();

      uart_print(“\n\n==引导调试信息===\n“);
      UART_print(“复位原因寄存器:0x%08X\n“、resetCause);
      UART_print(“Individual Flags:\n“);
      uart_print(“ PRCM_POWER_ON: %s\n“、(resetCause 和 PRCM_POWER_ON)? “设置“:“清除“);
      uart_print(“ PRCM_LPDS_EXIT: %s\n“、(resetCause 和 PRCM_LPDS_EXIT)? “设置“:“清除“);
      uart_print(“ PRCM_HIB_EXIT: %s\n“、(resetCause 和 PRCM_HIB_EXIT)? “设置“:“清除“);
      UART_PRINT(“ PRCM_WDT_RESET: %s\n“、(resetCause 和 PRCM_WDT_RESET)? “设置“:“清除“);
      uart_print(“ PRCM_MCU_reset: %s\n“、(resetCause 和 PRCM_MCU_reset)? “设置“:“清除“);
      uart_print(“ PRCM_SOC_RESET: %s\n“、(resetCause 和 PRCM_SOC_RESET)? “设置“:“清除“);
  IF ((resetCause 和 PRCM_HIB_EXIT)||(resetCause 和 PRCM_MCU_RESET))

   UART_print(“非看门狗复位\n“);
}
Else if (resetCause 和 PRCM_WDT_RESET)

  UART_print(“看门狗复位\n“);
}
  Else if (resetCause 和 PRCM_POWER_ON)

(void) POWER_REGISTERNotify (&hibSignal、PowerCC32XX_Entering_shutdown、
preHibConfig、(uintptr_t) NULL);  
(void) POWER_SHUTDOWN (0、MAX_INT);
}
在调试时、我始终会得到相同的复位原因。
===引导调试信息===
复位原因寄存器:0x00000007
单个标志:
PRCM_POWER_ON:清除
PRCM_LPDS_EXIT:设置
PRCM_HIB_EXIT:设置
PRCM_WDT_RESET:设置
PRCM_MCU_RESET:设置
PRCM_SOC_RESET:设置
HiB 寄存器 0:0x20004000

是否可以清除复位状态。 如果我也执行断电、则只会得到上述复位原因。

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

    您好、

    只是一个简短的评论。

    您的代码错误。 宏 PRCM_POWER_ON、 PRCM_LPDS_EXIT 不是位掩码、而是从 PRCMSysResetCauseGet () 返回值。

    比方说:

    #define PRCM_POWER_ON 0x00000000

    uart_print(“ PRCM_POWER_ON: %s\n“、(resetCause 和 0x00000000)? “set":“:“清除“);--> 不管 resetCause 的状态如何、此行始终为“清除“  

    您应使用:

    uart_print(“ PRCM_POWER_ON: %s\n“、(resetCause == 0x00000000)? “设置“:“清除“);

    1 月

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

    您好、

    正如 Jan 所说、这些宏是返回值。 请参阅 SDK-DIR/source/ti/devices/cc32xx/driverlib 中的 prcm.h、尤其是本节:

    //************************************************************************************************
    //将从 PRCMSysResetCauseGet () 返回的值。
    //************************************************************************************************
    #define PRCM_POWER_ON       0x00000000
    define PRCM_LPDS_EXIT       0x00000001
    #define PRCM_CORE_RESET      0x00000003
    #define PRCM_MCU_RESET       0x00000004
    #define PRCM_WDT_RESET       0x00000005
    #define PRCM_SOC_RESET       0x00000006
    define PRCM_HIB_EXIT       0x00000007
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Jan、
    我总是得到 resetCause 原因是:
    复位原因寄存器:0x00000007、即 PRCM_HIB_EXIT。 即使 MCU 已通过看门狗复位也是如此。

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

    uart_print(“\n\n==引导调试信息===\n“);
    UART_print(“复位原因寄存器:0x%08X\n“、resetCause);
    uart_print(“\n 单独标志:\n“);
    uart_print(“ PRCM_POWER_ON:%s\n“、(resetCause == PRCM_POWER_ON)? “设置“:“清除“);
    uart_print(“ PRCM_LPDS_EXIT:%s\n“、(resetCause == PRCM_LPDS_EXIT)? “设置“:“清除“);
    uart_print(“ PRCM_HIB_EXIT:%s\n“、(resetCause == PRCM_HIB_EXIT)? “设置“:“清除“);
    UART_PRINT(“ PRCM_WDT_RESET:%s\n“、(resetCause == PRCM_WDT_RESET)? “设置“:“清除“);
    uart_print(“ PRCM_MCU_reset:%s\n“、(resetCause == PRCM_MCU_reset)? “设置“:“清除“);
    uart_print(“ PRCM_SOC_RESET:%s\n“、(resetCause == PRCM_SOC_RESET)? “设置“:“清除“);

    如果控制器通过 watcdog 复位而复位、i get;

    ===引导调试信息===

    复位原因寄存器:0x00000007

    单个标志:

    PRCM_POWER_ON:清除

    PRCM_LPDS_EXIT:清除

    PRCM_HIB_EXIT:设置

    PRCM_WDT_RESET:清除

    PRCM_MCU_RESET:清除

    PRCM_SOC_RESET:清除

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

    您好、

    我从来没有见过这样的问题。 是否确定由 WDT 重新启动器件? 当您通过 RESET 引脚触发 RESET 时、您会看到什么状态? 您能否在 CC3235 LaunchPad 上进行测试?

    1 月

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

    您好、Jan、

    我特意通过不刷新看门狗来执行看门狗复位。 当时我 只得到 PRCM_HIB_EXIT。

    void initWatchdog (void)

    Watchdog_Params params;

    watchdog_init ();
    Watchdog_Params_初始化 (&params);
    params.resetMode = Watchdog_RESET_ON;
    params.debugStallMode = WATCHDOG_DEBUG_STALL_ON;

    watchDogHandle = watchdog_open (Board_watchdog_0、&params);

    if (watchDogHandle == NULL){
    while (1);//错误
    }

    reload = Watchdog_convertMsToTicks (watchDogHandle、15000);// 10s 超时
    watchdog_setReload (watchDogHandle、reload);
    }


    void * watchDogTask (void * args)

    for(;;)

    vTaskDelay (3000);
    IF (((taskFlags & ALLTASKSETBIT)== ALLTASKSETBIT)

    WATCHDOG_CLEAR (watchDogHandle);
    watchdog_setReload (watchDogHandle、reload);
    taskFlags = 0;
    }
    暴露

    UART_print(“看门狗未清除! flags:0x%02x\n“、taskFlags);
    }

    }
    返回 NULL;
    }

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

    您好、

    当您尝试其他复位源时看到什么?

    1 月

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

    您好、

    我通过调用以下函数来执行断电:

    void powershutdown (uint32_t shutdownTime)

    (void) Power_registerNotify (&hibSignal、PowerCC32XX_Entering_shutdown、
                 &preHibConfig、(uintptr_t) NULL);
      (void) Power_shutdown (0、shutdownTime);
    }
    我得到相同的复位原因:

    复位原因寄存器:0x00000007

    单个标志:

    PRCM_POWER_ON:清除

    PRCM_LPDS_EXIT:清除

    PRCM_HIB_EXIT:设置

    PRCM_WDT_RESET:清除

    PRCM_MCU_RESET:清除

    PRCM_SOC_RESET:清除

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

    您好、

    我认为这是正常现象、因为要完全复位 SoC、需要使用休眠 API。 尝试通过下电上电的引脚复位。

    可以 在 \source\ti\drivers\power\PowerCC32XX.c 内检查 Power_shutdown () 的实现

    1 月

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

    您好、Jan、
    我尝试了这个  Power_shutdown () 关机,
    void powershutdown (uint32_t shutdownTime)

      (void) Power_shutdown (0、shutdownTime);
    }
    因此、我也得到了相同的复位原因:

    复位原因寄存器:0x00000007

    单个标志:

    PRCM_POWER_ON:清除

    PRCM_LPDS_EXIT:清除

    PRCM_HIB_EXIT:设置

    PRCM_WDT_RESET:清除

    PRCM_MCU_RESET:清除

    PRCM_SOC_RESET:清除

    另一点是、我已检查了  
    uint32_t wakeCause = PRCMHibernateWakeupCauseGet ();
    在检查 HIbernateWakeup 案例原因时、
     当 MCU 完成下电上电复位时、我会获得 PRCM_HIB_WAKEUP_Cause_GPIO (0x00000004)、 当 MCU 完成看门狗复位时、我会获得 PRCM_HIB_WAKEUP_Caus_slow_clock (0x00000002)。

     

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

    您好、

    正如我所说的 ,如果你使用的 是 Power_shut() 返回代码 0x7 从 PRCMSysResetCauseGet () 是预期的。 这是正常现象。 当尝试使用 POR 或复位引脚 (nRESET) 等其他复位源时、您会看到什么?

    1 月

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

    您好、
    我使用 CC3235 LaunchPad 尝试了相同的 POWER_SHUTDOWN、并检查了 PRCMSysResetCauseGet ()。
     当 MCU 经过看门狗和 PRCM_POWER_ON 时、我得到了 resetCause 原因 PRCM_WDT_RESET、 当 MCU 完成断电复位时。

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

    您好、

    这意味着  CC3235 LaunchPad 上的相同代码工作时没有任何问题? 对吗? 说我们将问题范围缩小到您的硬件是正确的吗?

    1 月

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

    您好、
     如果我在硬件中使用 uniflash 和 CC3235sf Launchpad 中使用用于看门狗复位和下电上电复位的 uniflash 刷写代码、我总是会收到复位原因 Hibernate 退出 (PRCM_HIB_EXIT)。  我得到 resetCause 原因 PRCM_WDT_RESET 的原因: 当 MCU 经过看门狗和 PRCM_POWER_ON 的变化时、当 MCU 在使用 CCS 执行调试时经历了断电复位。 我将使用 XDS110 调试探针。

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

    您好、

    我很难理解你在说什么。  

    您说的是、当您闪存代码执行看门狗和下电上电复位功能时、您的复位原因是休眠退出? 您还会得到在调试模式期间看门狗计时器复位的复位原因?

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

    是的

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

    您好、Jan、

    为了得到确切的复位原因、我需要更改什么配置? 例如、如果 MCU 已完成看门狗复位、我需要将其识别为看门狗复位、也可以将其识别为下电上电复位。

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

    您好、

    我从来没有见过像你这样的问题。  我不确定你的情况如何。  很遗憾、我无法在我这边进行测试  请等待 TI 的回答。

    1 月

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

    您好、KS:

    您能给我发送一个项目的哑剧版本,这样我就能看到我是否能在我的最后重现您的问题,或者至少能看到您当前运行的任何代码,以触发非关机事件,这些事件可能会导致不正确的重置原因?

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

    您好、

    我在 CC3235SF 中使用 simplelink SDK 6.10 版本和 CCS 版本 12.0.0。 我在工程中使用 FreeRTOS。 我已配置看门狗来检查是否所有任务都在报告、如果发生任何错误、看门狗将使 MCU 复位。 我继续将数据存储在网络处理器文件系统 (NVS) 中、如果看门狗重置发生、我将从文件系统中读取数据、继续从左侧状态读取该过程。 为了确定重置原因、我 在 main 之后使用函数 PRCMSysResetCauseGet ()。 但是、 即使看门狗导致了复位、该函数也会将复位原因返回为 PRCM_HIB_EXIT。 我可以确保复位是由于看门狗引起的、因为我特意执行了看门狗。
    我想知道为了得到正确的复位原因而需要执行的配置。

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

    您好、

    稍等。 这与您的问题无关。 您多久将值保存到 NWP 文件系统 (sFlash) 中一次。 如果您经常这样做、这是一个非常糟糕的主意、因为您很快会损坏 SPI 闪存(它保证了仅 100k 个写入周期/扇区)。

    1 月

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

    好的、我不会做文件系统的工作、但会复制您实验的其余部分、让您知道我看到的内容。

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

    您好、KS。

    您能否在 SDK 中运行看门狗驱动程序示例? 我无法使用您的代码、因为它给了我一堆普通的编译错误、所以我运行了看门狗示例并使用了您的 resetCause 打印输出逻辑。 在使用示例的实验中、我将电路板复位一次、然后之后触发看门狗复位、下面是我的终端输出。

    希望这对您有所帮助。