Przeglądaj źródła

Merge branch 'feature/configure_flash_write_chunk_size' into 'master'

spi_flash: add configuration option to select flash write chunk size

See merge request espressif/esp-idf!9067
Michael (XIAO Xufeng) 5 lat temu
rodzic
commit
479269a52b

+ 10 - 0
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

+ 5 - 0
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
 
 

+ 5 - 0
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";