mirror of
https://github.com/espressif/esp-idf.git
synced 2025-11-01 15:41:41 +01:00
Merge branch 'bugfix/flash_suspend_restriction' into 'master'
spi_flash: make suspend off by default and add more information for using suspend See merge request espressif/esp-idf!12812
This commit is contained in:
@@ -148,9 +148,8 @@ menu "SPI Flash driver"
|
||||
Defines how many ticks will be before returning to continue a erasing.
|
||||
|
||||
config SPI_FLASH_AUTO_SUSPEND
|
||||
bool "Auto suspend long erase/write operations"
|
||||
default n if !IDF_TARGET_ESP32C3
|
||||
default y if IDF_TARGET_ESP32C3
|
||||
bool "Auto suspend long erase/write operations (READ DOCS FIRST)"
|
||||
default n
|
||||
depends on IDF_TARGET_ESP32C3 && !SPI_FLASH_USE_LEGACY_IMPL && !SPI_FLASH_ROM_IMPL
|
||||
help
|
||||
This option is default n before ESP32-C3, because it needs bootloader support.
|
||||
@@ -158,6 +157,10 @@ menu "SPI Flash driver"
|
||||
CAUTION: If you want to OTA to an app with this feature turned on, please make
|
||||
sure the bootloader has the support for it. (later than IDF v4.3)
|
||||
|
||||
Auto-suspend feature only supported by XMC chip.
|
||||
If you are using an official module, please contact Espressif Business support.
|
||||
Also reading auto suspend part in `SPI Flash API` document before you enable this function.
|
||||
|
||||
config SPI_FLASH_WRITE_CHUNK_SIZE
|
||||
int "Flash write chunk size"
|
||||
default 8192
|
||||
|
||||
@@ -861,6 +861,7 @@ IRAM_ATTR esp_err_t esp_flash_set_io_mode(esp_flash_t* chip, bool qe)
|
||||
//init suspend mode cmd, uses internal.
|
||||
esp_err_t esp_flash_suspend_cmd_init(esp_flash_t* chip)
|
||||
{
|
||||
ESP_EARLY_LOGW(TAG, "Flash suspend feature is enabled");
|
||||
return chip->chip_drv->sus_setup(chip);
|
||||
}
|
||||
|
||||
|
||||
@@ -17,12 +17,6 @@
|
||||
#include "spi_flash_chip_gd.h"
|
||||
#include "spi_flash_defs.h"
|
||||
|
||||
/* Driver for BOYA flash chip */
|
||||
esp_err_t spi_flash_chip_gd_suspend_cmd_conf(esp_flash_t *chip);
|
||||
|
||||
// Use the same implementation as GD chips
|
||||
#define spi_flash_chip_boya_suspend_cmd_conf spi_flash_chip_gd_suspend_cmd_conf
|
||||
|
||||
esp_err_t spi_flash_chip_boya_probe(esp_flash_t *chip, uint32_t flash_id)
|
||||
{
|
||||
/* Check manufacturer and product IDs match our desired masks */
|
||||
@@ -76,6 +70,6 @@ const spi_flash_chip_t esp_flash_chip_boya = {
|
||||
|
||||
.read_reg = spi_flash_chip_generic_read_reg,
|
||||
.yield = spi_flash_chip_generic_yield,
|
||||
.sus_setup = spi_flash_chip_boya_suspend_cmd_conf,
|
||||
.sus_setup = spi_flash_chip_generic_suspend_cmd_conf,
|
||||
.read_unique_id = spi_flash_chip_generic_read_unique_id,
|
||||
};
|
||||
|
||||
@@ -75,18 +75,6 @@ esp_err_t spi_flash_chip_gd_get_io_mode(esp_flash_t *chip, esp_flash_io_mode_t*
|
||||
}
|
||||
#endif //CONFIG_SPI_FLASH_ROM_IMPL
|
||||
|
||||
esp_err_t spi_flash_chip_gd_suspend_cmd_conf(esp_flash_t *chip)
|
||||
{
|
||||
spi_flash_sus_cmd_conf sus_conf = {
|
||||
.sus_mask = 0x84,
|
||||
.cmd_rdsr = CMD_RDSR2,
|
||||
.sus_cmd = CMD_SUSPEND,
|
||||
.res_cmd = CMD_RESUME,
|
||||
};
|
||||
|
||||
return chip->host->driver->sus_setup(chip->host, &sus_conf);
|
||||
}
|
||||
|
||||
static const char chip_name[] = "gd";
|
||||
|
||||
// The issi chip can use the functions for generic chips except from set read mode and probe,
|
||||
@@ -123,6 +111,6 @@ const spi_flash_chip_t esp_flash_chip_gd = {
|
||||
|
||||
.read_reg = spi_flash_chip_generic_read_reg,
|
||||
.yield = spi_flash_chip_generic_yield,
|
||||
.sus_setup = spi_flash_chip_gd_suspend_cmd_conf,
|
||||
.sus_setup = spi_flash_chip_generic_suspend_cmd_conf,
|
||||
.read_unique_id = spi_flash_chip_generic_read_unique_id,
|
||||
};
|
||||
|
||||
@@ -667,6 +667,11 @@ esp_err_t spi_flash_common_set_io_mode(esp_flash_t *chip, esp_flash_wrsr_func_t
|
||||
|
||||
esp_err_t spi_flash_chip_generic_suspend_cmd_conf(esp_flash_t *chip)
|
||||
{
|
||||
// Only XMC support auto-suspend
|
||||
if (chip->chip_id >> 16 != 0x20) {
|
||||
ESP_EARLY_LOGE(TAG, "The flash you use doesn't support auto suspend, only \'XMC\' is supported");
|
||||
return ESP_ERR_NOT_SUPPORTED;
|
||||
}
|
||||
spi_flash_sus_cmd_conf sus_conf = {
|
||||
.sus_mask = 0x80,
|
||||
.cmd_rdsr = CMD_RDSR2,
|
||||
|
||||
@@ -58,18 +58,6 @@ esp_err_t spi_flash_chip_issi_get_io_mode(esp_flash_t *chip, esp_flash_io_mode_t
|
||||
return ret;
|
||||
}
|
||||
|
||||
esp_err_t spi_flash_chip_issi_suspend_cmd_conf(esp_flash_t *chip)
|
||||
{
|
||||
spi_flash_sus_cmd_conf sus_conf = {
|
||||
.sus_mask = 0x06,
|
||||
.cmd_rdsr = CMD_RDFR,
|
||||
.sus_cmd = CMD_SUSPEND,
|
||||
.res_cmd = CMD_RESUME,
|
||||
};
|
||||
|
||||
return chip->host->driver->sus_setup(chip->host, &sus_conf);
|
||||
}
|
||||
|
||||
static const char chip_name[] = "issi";
|
||||
|
||||
// The issi chip can use the functions for generic chips except from set read mode and probe,
|
||||
@@ -106,6 +94,6 @@ const spi_flash_chip_t esp_flash_chip_issi = {
|
||||
|
||||
.read_reg = spi_flash_chip_generic_read_reg,
|
||||
.yield = spi_flash_chip_generic_yield,
|
||||
.sus_setup = spi_flash_chip_issi_suspend_cmd_conf,
|
||||
.sus_setup = spi_flash_chip_generic_suspend_cmd_conf,
|
||||
.read_unique_id = spi_flash_chip_generic_read_unique_id,
|
||||
};
|
||||
|
||||
@@ -40,18 +40,6 @@ esp_err_t spi_flash_chip_issi_get_io_mode(esp_flash_t *chip, esp_flash_io_mode_t
|
||||
|
||||
static const char chip_name[] = "mxic";
|
||||
|
||||
esp_err_t spi_flash_chip_mxic_suspend_cmd_conf(esp_flash_t *chip)
|
||||
{
|
||||
spi_flash_sus_cmd_conf sus_conf = {
|
||||
.sus_mask = 0x06,
|
||||
.cmd_rdsr = CMD_RDSCUR,
|
||||
.sus_cmd = CMD_SUSPEND,
|
||||
.res_cmd = CMD_RESUME,
|
||||
};
|
||||
|
||||
return chip->host->driver->sus_setup(chip->host, &sus_conf);
|
||||
}
|
||||
|
||||
esp_err_t spi_flash_chip_mxic_read_unique_id(esp_flash_t *chip, uint64_t* flash_unique_id)
|
||||
{
|
||||
//MXIC not support read unique id.
|
||||
@@ -93,6 +81,6 @@ const spi_flash_chip_t esp_flash_chip_mxic = {
|
||||
|
||||
.read_reg = spi_flash_chip_mxic_read_reg,
|
||||
.yield = spi_flash_chip_generic_yield,
|
||||
.sus_setup = spi_flash_chip_mxic_suspend_cmd_conf,
|
||||
.sus_setup = spi_flash_chip_generic_suspend_cmd_conf,
|
||||
.read_unique_id = spi_flash_chip_mxic_read_unique_id,
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user