spi: Mask esp_flash_erase chip with esp_flash_erase_sector

add: Fix to prevent WDT trigger
add: comments to better explain SPI API

Closes https://github.com/espressif/esp-idf/issues/9945
Closes https://github.com/espressif/esp-idf/issues/9212
Closes https://github.com/espressif/esp-idf/issues/8135
This commit is contained in:
Adam Múdry 2022-10-13 14:48:47 +02:00 committed by BOT
parent 1b747867bd
commit cfc8332833
2 changed files with 9 additions and 23 deletions

View File

@ -512,31 +512,15 @@ esp_err_t IRAM_ATTR esp_flash_get_size(esp_flash_t *chip, uint32_t *out_size)
esp_err_t IRAM_ATTR esp_flash_erase_chip(esp_flash_t *chip)
{
esp_err_t err = rom_spiflash_api_funcs->chip_check(&chip);
VERIFY_CHIP_OP(erase_chip);
CHECK_WRITE_ADDRESS(chip, 0, chip->size);
//check before the operation, in case this is called too close to the last operation
if (chip->chip_drv->yield) {
err = chip->chip_drv->yield(chip, 0);
if (err != ESP_OK) {
return err;
}
}
err = rom_spiflash_api_funcs->start(chip);
esp_err_t err = ESP_OK;
uint32_t size = 0;
err = esp_flash_get_size(chip, &size);
if (err != ESP_OK) {
ESP_LOGE(TAG, "esp_flash_get_size failed, flash error code: %d", err);
return err;
}
err = chip->chip_drv->erase_chip(chip);
if (chip->host->driver->flush_cache) {
esp_err_t flush_cache_err = chip->host->driver->flush_cache(chip->host, 0, chip->size);
if (err == ESP_OK) {
err = flush_cache_err;
}
}
return rom_spiflash_api_funcs->end(chip, err);
err = esp_flash_erase_region(chip, 0, size);
return err;
}
esp_err_t IRAM_ATTR esp_flash_erase_region(esp_flash_t *chip, uint32_t start, uint32_t len)

View File

@ -245,6 +245,8 @@ static bool use_bus_lock(int host_id)
#endif
}
// This function is only called by users usually via `spi_bus_add_flash_device` to initialise os functions.
// System will initialise them via `esp_flash_app_enable_os_functions`
esp_err_t esp_flash_init_os_functions(esp_flash_t *chip, int host_id, spi_bus_lock_dev_handle_t dev_handle)
{
if (use_bus_lock(host_id) && !dev_handle) {
@ -317,7 +319,7 @@ esp_err_t esp_flash_app_enable_os_functions(esp_flash_t* chip)
{
main_flash_arg = (app_func_arg_t) {
.dev_lock = g_spi_lock_main_flash_dev,
.no_protect = false,
.no_protect = false, // Required for the main flash chip
};
chip->os_func = &esp_flash_spi1_default_os_functions;
chip->os_func_data = &main_flash_arg;