mirror of
https://github.com/espressif/esp-idf
synced 2025-03-10 09:39:10 -04:00
spi_flash(LEGACY_IMPL): Add a Kconfig option - Bypass a block erase and always do sector erase
Closes: IDF-1561
This commit is contained in:
parent
b56c7d9066
commit
5c98ff015e
@ -84,6 +84,14 @@ menu "SPI Flash driver"
|
|||||||
The implementation of SPI flash has been greatly changed in IDF v4.0.
|
The implementation of SPI flash has been greatly changed in IDF v4.0.
|
||||||
Enable this option to use the legacy implementation.
|
Enable this option to use the legacy implementation.
|
||||||
|
|
||||||
|
config SPI_FLASH_BYPASS_BLOCK_ERASE
|
||||||
|
bool "Bypass a block erase and always do sector erase"
|
||||||
|
default n
|
||||||
|
help
|
||||||
|
Some flash chips can have very high "max" erase times, especially for block erase (32KB or 64KB).
|
||||||
|
This option allows to bypass "block erase" and always do sector erase commands.
|
||||||
|
This will be much slower overall in most cases, but improves latency for other code to run.
|
||||||
|
|
||||||
config SPI_FLASH_YIELD_DURING_ERASE
|
config SPI_FLASH_YIELD_DURING_ERASE
|
||||||
bool "Enables yield operation during flash erase"
|
bool "Enables yield operation during flash erase"
|
||||||
default y
|
default y
|
||||||
|
@ -244,11 +244,14 @@ esp_err_t IRAM_ATTR spi_flash_erase_range(size_t start_addr, size_t size)
|
|||||||
int64_t start_time_us = esp_timer_get_time();
|
int64_t start_time_us = esp_timer_get_time();
|
||||||
#endif
|
#endif
|
||||||
spi_flash_guard_start();
|
spi_flash_guard_start();
|
||||||
|
#ifndef CONFIG_SPI_FLASH_BYPASS_BLOCK_ERASE
|
||||||
if (sector % sectors_per_block == 0 && end - sector >= sectors_per_block) {
|
if (sector % sectors_per_block == 0 && end - sector >= sectors_per_block) {
|
||||||
rc = esp_rom_spiflash_erase_block(sector / sectors_per_block);
|
rc = esp_rom_spiflash_erase_block(sector / sectors_per_block);
|
||||||
sector += sectors_per_block;
|
sector += sectors_per_block;
|
||||||
COUNTER_ADD_BYTES(erase, sectors_per_block * SPI_FLASH_SEC_SIZE);
|
COUNTER_ADD_BYTES(erase, sectors_per_block * SPI_FLASH_SEC_SIZE);
|
||||||
} else {
|
} else
|
||||||
|
#endif
|
||||||
|
{
|
||||||
rc = esp_rom_spiflash_erase_sector(sector);
|
rc = esp_rom_spiflash_erase_sector(sector);
|
||||||
++sector;
|
++sector;
|
||||||
COUNTER_ADD_BYTES(erase, SPI_FLASH_SEC_SIZE);
|
COUNTER_ADD_BYTES(erase, SPI_FLASH_SEC_SIZE);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user