mirror of
https://github.com/espressif/esp-idf.git
synced 2024-09-20 00:36:01 -04:00
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:
parent
1b747867bd
commit
cfc8332833
@ -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)
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user