Component config -> Hardware Settings -> RTC Clock Config -> RTC clock source
RTC_CLK_SRC_INT_RC: Internal 150 kHz RC oscillator
RTC_CLK_SRC_INT_8MD256: Internal 8.5MHz oscillator, divided by 256 (~33kHz)
However, after changing the RTC clock source to RTC_CLK_SRC_INT_8MD256, I encountered an issue: after a soft reset (via the esp_restart function), the system fails to wake up from deep sleep. When I revert back to using RTC_CLK_SRC_INT_RC, the system wakes up normally.
I would like to use RTC_CLK_SRC_INT_8MD256 and have the system wake up correctly. Any help would be greatly appreciated.
Attached is my slip entry code below.
- void sleep_enter_deepsleep(uint32_t sleep_time, sleep_wakeup_source_e wakeup_source)
- {
- isolate_rtc_gpio();
- struct timeval now;
- gettimeofday(&now, NULL);
- if (sleep_time > 0) {
- _target_wakeup_time.tv_sec = now.tv_sec + sleep_time;
- } else if (_target_wakeup_time.tv_sec < now.tv_sec) {
- _target_wakeup_time.tv_sec = now.tv_sec + env_config_get__wakeup_intreval();
- }
- int new_sleep_time = _target_wakeup_time.tv_sec - now.tv_sec - EARLY_WAKEUP_SEC;
- // minimum sleep time is 10 sec
- new_sleep_time = (new_sleep_time < 10) ? 10 : new_sleep_time;
- if (wakeup_source == SLEEP_WAKEUP_TIMER || wakeup_source == SLEEP_WAKEUP_BOTH) {
- // setup sleep time
- esp_sleep_enable_timer_wakeup(new_sleep_time * 1000000LL); // esp_err_t -> ESP_ERR_INVALID_ARG
- ESP_LOGI(TAG, "Entering DeepSleep, Timer: %ds", new_sleep_time);
- }
- if (wakeup_source == SLEEP_WAKEUP_BUTTON || wakeup_source == SLEEP_WAKEUP_BOTH) {
- // set wakeup source
- rtc_gpio_pullup_en(GPIO_SW_INIT_B);
- gpio_set_direction(GPIO_SW_INIT_B, GPIO_MODE_INPUT);
- int gpio34_level = gpio_get_level(GPIO_SW_INIT_B);
- ESP_LOGI(TAG, "GPIO 34 level before sleep: %d", gpio34_level);
- if (gpio34_level == 0)
- ESP_LOGW(TAG, "GPIO 34 was LOW, err");
- // set wakeup source -> SW_INT_B (GPIO 34)
- esp_sleep_enable_ext0_wakeup(GPIO_SW_INIT_B, 0); // trigger on falling edge
- }
- gettimeofday(&_sleep_enter_time, NULL);
- s_count++;
- esp_deep_sleep_start();
- }