mirror of
https://github.com/espressif/esp-idf
synced 2025-03-10 01:29:21 -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.
|
||||
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
|
||||
bool "Enables yield operation during flash erase"
|
||||
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();
|
||||
#endif
|
||||
spi_flash_guard_start();
|
||||
#ifndef CONFIG_SPI_FLASH_BYPASS_BLOCK_ERASE
|
||||
if (sector % sectors_per_block == 0 && end - sector >= sectors_per_block) {
|
||||
rc = esp_rom_spiflash_erase_block(sector / sectors_per_block);
|
||||
sector += sectors_per_block;
|
||||
COUNTER_ADD_BYTES(erase, sectors_per_block * SPI_FLASH_SEC_SIZE);
|
||||
} else {
|
||||
} else
|
||||
#endif
|
||||
{
|
||||
rc = esp_rom_spiflash_erase_sector(sector);
|
||||
++sector;
|
||||
COUNTER_ADD_BYTES(erase, SPI_FLASH_SEC_SIZE);
|
||||
|
Loading…
x
Reference in New Issue
Block a user