diff --git a/components/spi_flash/Kconfig b/components/spi_flash/Kconfig index 678585248..cb41293a1 100644 --- a/components/spi_flash/Kconfig +++ b/components/spi_flash/Kconfig @@ -130,6 +130,16 @@ menu "SPI Flash driver" help Defines how many ticks will be before returning to continue a erasing. + config SPI_FLASH_WRITE_CHUNK_SIZE + int "Flash write chunk size" + default 8192 + range 256 8192 + help + Flash write is broken down in terms of multiple (smaller) write operations. + This configuration options helps to set individual write chunk size, smaller + value here ensures that cache (and non-IRAM resident interrupts) remains + disabled for shorter duration. + menu "Auto-detect flash chips" config SPI_FLASH_SUPPORT_ISSI_CHIP diff --git a/components/spi_flash/esp_flash_api.c b/components/spi_flash/esp_flash_api.c index 11c5c9b53..8ea142a7c 100644 --- a/components/spi_flash/esp_flash_api.c +++ b/components/spi_flash/esp_flash_api.c @@ -28,7 +28,12 @@ static const char TAG[] = "spi_flash"; +#ifdef CONFIG_SPI_FLASH_WRITE_CHUNK_SIZE +#define MAX_WRITE_CHUNK CONFIG_SPI_FLASH_WRITE_CHUNK_SIZE /* write in chunks */ +#else #define MAX_WRITE_CHUNK 8192 /* write in chunks */ +#endif // CONFIG_SPI_FLASH_WRITE_CHUNK_SIZE + #define MAX_READ_CHUNK 16384 diff --git a/components/spi_flash/flash_ops.c b/components/spi_flash/flash_ops.c index 09b14bed3..4cabc92c0 100644 --- a/components/spi_flash/flash_ops.c +++ b/components/spi_flash/flash_ops.c @@ -53,7 +53,12 @@ esp_rom_spiflash_result_t IRAM_ATTR spi_flash_write_encrypted_chip(size_t dest_a /* Limit number of bytes written/read in a single SPI operation, as these operations disable all higher priority tasks from running. */ +#ifdef CONFIG_SPI_FLASH_WRITE_CHUNK_SIZE +#define MAX_WRITE_CHUNK CONFIG_SPI_FLASH_WRITE_CHUNK_SIZE +#else #define MAX_WRITE_CHUNK 8192 +#endif // CONFIG_SPI_FLASH_WRITE_CHUNK_SIZE + #define MAX_READ_CHUNK 16384 static const char *TAG __attribute__((unused)) = "spi_flash";