低功耗

SDK 提供两种睡眠模式:

  • coresleep 模式
    void xhal_core_sleep(void);
    
    1. 待机底电流约 60uA
    2. 睡眠期间 SRAM1、SRAM2、SRAM3 均不掉电
    3. 睡眠结束后用户代码继续运行
  • poweroff 模式
    void xhal_core_poweroff(void);
    
    1. 待机底电流约 2uA
    2. 睡眠期间 SRAM1、SRAM3 掉电,仅 SRAM2 保持
    3. 睡眠结束后用户代码从头开始运行

两种睡眠模式运行流程如下图所示:

睡眠模式运行流程

为了可以在 init 阶段区分是否从 poweroff 模式唤醒,用户可以根据以下接口查询判断:

xhal_rst_reason_t xhal_rst_reason(void);
xhal_wakeup_type_t xhal_wakeup_type(void);

例如:

#define is_first_poweron(rst)   (rst & (XHAL_RST_RSN_POR12_BK | XHAL_RST_RSN_PIN_RSTN | XHAL_RST_RSN_SYSRST))

int main(void)
{
    if (is_first_poweron(xhal_rst_reason())) {
        // do something
    }

    while (1) {
        xhal_core_poweroff();
    }
}