乐鑫技术交流
直播中

尚文清

7年用户 1592经验值
私信 关注
[问答]

esp32s3使能light sleep后esp_deep_sleep_start()被timer唤醒是为什么?

最近在开发一个项目时遇到以下问题,esp32s3fn8, 使用的idf版本为5.0 beta1:

1. 系统运行时,启用了light sleep:

           esp_pm_config_esp32s3_t pm_config = {

        .max_freq_mhz = 80, // e.g. 80, 160, 240

        .min_freq_mhz = 10, // e.g. 40

        .light_sleep_enable = true, // enable light sleep

    };

    ESP_ERROR_CHECK( esp_pm_configure(&pm_config) );



2. 系统关机采用了deep sleep,代码如下:

         esp_sleep_enable_ext0_wakeup(GPIO_NUM_8, 0);

        //Go to sleep now

       esp_deep_sleep_start();

问题现象是关机执行esp_deep_sleep_start()后,系统立即重启,通过esp_sleep_get_wakeup_cause() 获取的唤醒原因是 4- ESP_SLEEP_WAKEUP_tiMER.

调试:

1. 将步骤1中的代码去掉,系统关机能正常进入deep sleep.

2. 采用代码在 esp_sleep_enable_ext0_wakeup(GPIO_NUM_8, 0); 前,关闭light sleep, 问题仍然存在.

           esp_pm_config_esp32s3_t pm_config = {

        .max_freq_mhz = 80, // e.g. 80, 160, 240

        .min_freq_mhz = 10, // e.g. 40

        .light_sleep_enable = false, // disable light sleep

    };

    ESP_ERROR_CHECK( esp_pm_configure(&pm_config) );

3. 在menuconfig中,无论以下选项是否启用,问题均重现:

    Put lightsleep related codes in internal RAM

    Put RTOS IDLE related codes in internal RAM

请各位帮忙分析一下,不胜感谢!

更多回帖

发帖
×
20
完善资料,
赚取积分