mirror of
https://github.com/espressif/esp-idf.git
synced 2026-10-02 03:00:34 +03:00
Merge branch 'change/esp_idf_dpd_optimize' into 'master'
Change/esp idf dpd optimize Closes PM-765 and PM-728 See merge request espressif/esp-idf!49761
This commit is contained in:
@@ -852,7 +852,7 @@ static esp_err_t FORCE_IRAM_ATTR esp_sleep_start_safe(uint32_t sleep_flags, uint
|
|||||||
if ((sleep_flags & RTC_SLEEP_FLASH_DPD) && (!ESP_CHIP_REV_ABOVE(efuse_hal_chip_revision(), 300))) {
|
if ((sleep_flags & RTC_SLEEP_FLASH_DPD) && (!ESP_CHIP_REV_ABOVE(efuse_hal_chip_revision(), 300))) {
|
||||||
/* Switch Flash from standby mode to deep powerdown mode */
|
/* Switch Flash from standby mode to deep powerdown mode */
|
||||||
/* During bootloader phase following wakeup from deepsleep, flash will exit dpd mode */
|
/* During bootloader phase following wakeup from deepsleep, flash will exit dpd mode */
|
||||||
spi_flash_enable_deep_power_down_mode(true);
|
spi_flash_enable_deep_power_down_mode(true, false);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -896,7 +896,7 @@ static esp_err_t FORCE_IRAM_ATTR esp_sleep_start_safe(uint32_t sleep_flags, uint
|
|||||||
#if CONFIG_ESP_SLEEP_SET_FLASH_DPD
|
#if CONFIG_ESP_SLEEP_SET_FLASH_DPD
|
||||||
if (sleep_flags & RTC_SLEEP_FLASH_DPD) {
|
if (sleep_flags & RTC_SLEEP_FLASH_DPD) {
|
||||||
/* Switch Flash from standby mode to deep powerdown mode */
|
/* Switch Flash from standby mode to deep powerdown mode */
|
||||||
spi_flash_enable_deep_power_down_mode(true);
|
spi_flash_enable_deep_power_down_mode(true, false);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#if CONFIG_PM_POWER_DOWN_PERIPHERAL_IN_LIGHT_SLEEP
|
#if CONFIG_PM_POWER_DOWN_PERIPHERAL_IN_LIGHT_SLEEP
|
||||||
@@ -984,7 +984,7 @@ static esp_err_t FORCE_IRAM_ATTR esp_sleep_start_safe(uint32_t sleep_flags, uint
|
|||||||
#if CONFIG_ESP_SLEEP_SET_FLASH_DPD
|
#if CONFIG_ESP_SLEEP_SET_FLASH_DPD
|
||||||
if (sleep_flags & RTC_SLEEP_FLASH_DPD) {
|
if (sleep_flags & RTC_SLEEP_FLASH_DPD) {
|
||||||
//Release Flash out from deep powerdown mode
|
//Release Flash out from deep powerdown mode
|
||||||
spi_flash_enable_deep_power_down_mode(false);
|
spi_flash_enable_deep_power_down_mode(false, true);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#if CONFIG_PM_SLP_SPIRAM_HALFSLEEP_ENABLED && (CONFIG_SPIRAM_XIP_FROM_PSRAM || !CONFIG_PM_SLP_IRAM_OPT)
|
#if CONFIG_PM_SLP_SPIRAM_HALFSLEEP_ENABLED && (CONFIG_SPIRAM_XIP_FROM_PSRAM || !CONFIG_PM_SLP_IRAM_OPT)
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* SPDX-FileCopyrightText: 2019-2025 Espressif Systems (Shanghai) CO LTD
|
* SPDX-FileCopyrightText: 2019-2026 Espressif Systems (Shanghai) CO LTD
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: Apache-2.0
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
@@ -178,13 +178,15 @@ uint32_t spi_flash_dpd_get_exit_duration(void);
|
|||||||
/**
|
/**
|
||||||
* @brief Enable or disable SPI flash deep power-down mode.
|
* @brief Enable or disable SPI flash deep power-down mode.
|
||||||
*
|
*
|
||||||
* @param bool status. True: flash enable deep power-down mode. False: flash disable deep power-down mode.
|
* @param enable True to enter deep power-down mode, false to exit.
|
||||||
|
* @param wait_delay If true, wait tDP (enter) or tRES1 (exit) after the command.
|
||||||
|
* If false, skip the delay; the caller must ensure timing is met elsewhere
|
||||||
*
|
*
|
||||||
* @note If using self-provided flash (not the chip’s factory-default flash), consult its datasheet to use this API safely.
|
* @note If using self-provided flash (not the chip’s factory-default flash), consult its datasheet to use this API safely.
|
||||||
*
|
*
|
||||||
* @return ESP_OK if success.
|
* @return ESP_OK if success.
|
||||||
*/
|
*/
|
||||||
esp_err_t spi_flash_enable_deep_power_down_mode(bool enable);
|
esp_err_t spi_flash_enable_deep_power_down_mode(bool enable, bool wait_delay);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if SOC_SPI_MEM_SUPPORT_WRAP
|
#if SOC_SPI_MEM_SUPPORT_WRAP
|
||||||
|
|||||||
@@ -96,3 +96,7 @@ entries:
|
|||||||
|
|
||||||
if SOC_GPSPI_SUPPORTED = y && IDF_TARGET_ESP32 = n:
|
if SOC_GPSPI_SUPPORTED = y && IDF_TARGET_ESP32 = n:
|
||||||
spi_flash_hal_gpspi (noflash)
|
spi_flash_hal_gpspi (noflash)
|
||||||
|
if SPI_FLASH_ROM_IMPL = n && APP_BUILD_TYPE_PURE_RAM_APP = n:
|
||||||
|
spi_flash_hal_iram: spi_flash_hal_enter_dpd_mode (noflash)
|
||||||
|
spi_flash_hal_iram: spi_flash_hal_exit_dpd_mode (noflash)
|
||||||
|
spi_flash_hal_iram: spi_flash_hal_poll_cmd_done (noflash)
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* SPDX-FileCopyrightText: 2025 Espressif Systems (Shanghai) CO LTD
|
* SPDX-FileCopyrightText: 2025-2026 Espressif Systems (Shanghai) CO LTD
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: Apache-2.0
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
@@ -62,31 +62,30 @@ uint32_t spi_flash_dpd_get_exit_duration(void)
|
|||||||
return SPI_FLASH_TRES1_SAFE_VAL_US;
|
return SPI_FLASH_TRES1_SAFE_VAL_US;
|
||||||
}
|
}
|
||||||
|
|
||||||
static esp_err_t spi_flash_enter_dpd(void)
|
static esp_err_t spi_flash_enter_dpd(bool wait_delay)
|
||||||
{
|
{
|
||||||
esp_err_t ret = spi_flash_hal_enter_dpd_mode(esp_flash_default_chip->host);
|
esp_err_t ret = spi_flash_hal_enter_dpd_mode(esp_flash_default_chip->host);
|
||||||
esp_rom_delay_us(spi_flash_dpd_get_enter_duration());
|
if (wait_delay) {
|
||||||
|
esp_rom_delay_us(spi_flash_dpd_get_enter_duration());
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
static esp_err_t spi_flash_exit_dpd(void)
|
|
||||||
{
|
|
||||||
esp_err_t ret = spi_flash_hal_exit_dpd_mode(esp_flash_default_chip->host);
|
|
||||||
esp_rom_delay_us(spi_flash_dpd_get_exit_duration());
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
esp_err_t spi_flash_enable_deep_power_down_mode(bool enable)
|
|
||||||
{
|
|
||||||
esp_err_t ret = ESP_OK;
|
|
||||||
|
|
||||||
if (enable) {
|
|
||||||
ret = spi_flash_enter_dpd();
|
|
||||||
} else {
|
|
||||||
ret = spi_flash_exit_dpd();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static esp_err_t spi_flash_exit_dpd(bool wait_delay)
|
||||||
|
{
|
||||||
|
esp_err_t ret = spi_flash_hal_exit_dpd_mode(esp_flash_default_chip->host);
|
||||||
|
if (wait_delay) {
|
||||||
|
esp_rom_delay_us(spi_flash_dpd_get_exit_duration());
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
esp_err_t spi_flash_enable_deep_power_down_mode(bool enable, bool wait_delay)
|
||||||
|
{
|
||||||
|
if (enable) {
|
||||||
|
return spi_flash_enter_dpd(wait_delay);
|
||||||
|
}
|
||||||
|
return spi_flash_exit_dpd(wait_delay);
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user