mirror of
https://github.com/espressif/esp-idf.git
synced 2026-10-02 11:10:54 +03:00
change(esp_hw_support): support optional delay for DPD entry and exit
This commit is contained in:
@@ -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
|
||||
*/
|
||||
@@ -178,13 +178,15 @@ uint32_t spi_flash_dpd_get_exit_duration(void);
|
||||
/**
|
||||
* @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.
|
||||
*
|
||||
* @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
|
||||
|
||||
#if SOC_SPI_MEM_SUPPORT_WRAP
|
||||
|
||||
@@ -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
|
||||
*/
|
||||
@@ -62,31 +62,30 @@ uint32_t spi_flash_dpd_get_exit_duration(void)
|
||||
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_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();
|
||||
if (wait_delay) {
|
||||
esp_rom_delay_us(spi_flash_dpd_get_enter_duration());
|
||||
}
|
||||
|
||||
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