]> granicus.if.org Git - esp-idf/commitdiff
bootloader, menuconfig: add flash size setting support
authorIvan Grokhotkov <ivan@espressif.com>
Tue, 18 Oct 2016 11:03:59 +0000 (19:03 +0800)
committerAngus Gratton <angus@espressif.com>
Fri, 21 Oct 2016 04:27:25 +0000 (15:27 +1100)
components/bootloader/src/main/bootloader_config.h
components/bootloader/src/main/bootloader_start.c
components/esp32/include/rom/spi_flash.h
components/esp32/ld/esp32.rom.ld
components/esptool_py/Kconfig.projbuild
components/esptool_py/Makefile.projbuild

index 709ff41b1655e1da8edf196ba976df8b3919c427..f99a1c94e5cf2a138888bcf96b4195a772725477 100644 (file)
@@ -51,7 +51,7 @@ enum {
     SPI_SPEED_20M,
     SPI_SPEED_80M = 0xF
 };
-/*suppport flash size in esp32 */
+/*supported flash sizes*/
 enum {
     SPI_SIZE_1MB = 0,
     SPI_SIZE_2MB,
index a61ea77d59a8f33160c93942d7e8edc621722691..e87f579f42d2c77e329955c8c9c38abccacf9686 100644 (file)
@@ -58,6 +58,7 @@ void IRAM_ATTR set_cache_and_start_app(uint32_t drom_addr,
     uint32_t irom_load_addr,
     uint32_t irom_size,
     uint32_t entry_addr);
+static void update_flash_config(struct flash_hdr* pfhdr);
 
 
 void IRAM_ATTR call_start_cpu0()
@@ -258,7 +259,7 @@ void bootloader_main()
     memset(&bs, 0, sizeof(bs));
 
     ESP_LOGI(TAG, "compile time " __TIME__ );
-    /* close watch dog here */
+    /* disable watch dog here */
     REG_CLR_BIT( RTC_CNTL_WDTCONFIG0_REG, RTC_CNTL_WDT_FLASHBOOT_MOD_EN );
     REG_CLR_BIT( TIMG_WDTCONFIG0_REG(0), TIMG_WDT_FLASHBOOT_MOD_EN );
     SPIUnlock();
@@ -269,6 +270,8 @@ void bootloader_main()
 
     print_flash_info(&fhdr);
 
+    update_flash_config(&fhdr);
+
     if (!load_partition_table(&bs, PARTITION_ADD)) {
         ESP_LOGE(TAG, "load partition table error!");
         return;
@@ -364,7 +367,7 @@ void unpack_load_app(const partition_pos_t* partition)
     uint32_t irom_size = 0;
 
     /* Reload the RTC memory sections whenever a non-deepsleep reset
-       is occuring */
+       is occurring */
     bool load_rtc_memory = rtc_get_reset_reason(0) != DEEPSLEEP_RESET;
 
     ESP_LOGD(TAG, "bin_header: %u %u %u %u %08x", image_header.magic,
@@ -482,6 +485,36 @@ void IRAM_ATTR set_cache_and_start_app(
     (*entry)();
 }
 
+static void update_flash_config(struct flash_hdr* pfhdr)
+{
+    uint32_t size;
+    switch(pfhdr->spi_size) {
+        case SPI_SIZE_1MB:
+            size = 1;
+            break;
+        case SPI_SIZE_2MB:
+            size = 2;
+            break;
+        case SPI_SIZE_4MB:
+            size = 4;
+            break;
+        case SPI_SIZE_8MB:
+            size = 8;
+            break;
+        case SPI_SIZE_16MB:
+            size = 16;
+            break;
+        default:
+            size = 2;
+    }
+    Cache_Read_Disable( 0 );
+    // Set flash chip size
+    SPIParamCfg(g_rom_flashchip.deviceId, size * 0x100000, 0x10000, 0x1000, 0x100, 0xffff);
+    // TODO: set mode
+    // TODO: set frequency
+    Cache_Flush(0);
+    Cache_Read_Enable( 0 );
+}
 
 void print_flash_info(struct flash_hdr* pfhdr)
 {
index d182b51ca007bf4e5487532aeb24cd144f407102..1f14c6617ae79c62d621d2d45c8651adadbf714d 100644 (file)
@@ -503,6 +503,12 @@ void SPI_Write_Encrypt_Disable(void);
   */
 SpiFlashOpResult SPI_Encrypt_Write(uint32_t flash_addr, uint32_t *data, uint32_t len);
 
+
+/** @brief Global SpiFlashChip structure used by ROM functions
+ *
+ */
+extern SpiFlashChip g_rom_flashchip;
+
 /**
   * @}
   */
index cc14d3258a4c61f7e235086bdf1cfbca87fcf2a1..0fa28397ee24f499dbe5e824a086c241adae72d1 100644 (file)
@@ -286,6 +286,7 @@ PROVIDE ( _global_impure_ptr = 0x3ffae0b0 );
 PROVIDE ( gmtime = 0x40059848 );
 PROVIDE ( gmtime_r = 0x40059868 );
 PROVIDE ( g_phyFuns_instance = 0x3ffae0c4 );
+PROVIDE ( g_rom_flashchip = 0x3ffae270 );
 PROVIDE ( gpio_init = 0x40009c20 );
 PROVIDE ( gpio_input_get = 0x40009b88 );
 PROVIDE ( gpio_input_get_high = 0x40009b9c );
index 3da802296aa17be56f1af8825acfaa9ae5178e06..8bab51225eb3506252f2bd69346d6fa1a9efb6be 100644 (file)
@@ -94,4 +94,31 @@ config ESPTOOLPY_FLASHFREQ
        default "26m" if ESPTOOLPY_FLASHFREQ_26M
        default "20m" if ESPTOOLPY_FLASHFREQ_20M
 
+
+choice ESPTOOLPY_FLASHSIZE
+       prompt "Flash size"
+       default ESPTOOLPY_FLASHSIZE_2MB
+       help
+               SPI flash size, in megabytes
+
+config ESPTOOLPY_FLASHSIZE_1MB
+       bool "1 MB"
+config ESPTOOLPY_FLASHSIZE_2MB
+       bool "2 MB"
+config ESPTOOLPY_FLASHSIZE_4MB
+       bool "4 MB"
+config ESPTOOLPY_FLASHSIZE_8MB
+       bool "8 MB"
+config ESPTOOLPY_FLASHSIZE_16MB
+       bool "16 MB"
+endchoice
+
+config ESPTOOLPY_FLASHSIZE
+       string
+       default "1MB" if ESPTOOLPY_FLASHSIZE_1MB
+       default "2MB" if ESPTOOLPY_FLASHSIZE_2MB
+       default "4MB" if ESPTOOLPY_FLASHSIZE_4MB
+       default "8MB" if ESPTOOLPY_FLASHSIZE_8MB
+       default "16MB" if ESPTOOLPY_FLASHSIZE_16MB
+
 endmenu
index 4d0dd1b3e5ecf28eacf2d4157a03925b5290fe26..69c01e1e7fa72da5a714ebd268b30500f42ac667 100644 (file)
@@ -4,6 +4,7 @@ ESPPORT ?= $(CONFIG_ESPTOOLPY_PORT)
 ESPBAUD ?= $(CONFIG_ESPTOOLPY_BAUD)
 ESPFLASHMODE ?= $(CONFIG_ESPTOOLPY_FLASHMODE)
 ESPFLASHFREQ ?= $(CONFIG_ESPTOOLPY_FLASHFREQ)
+ESPFLASHSIZE ?= $(CONFIG_ESPTOOLPY_FLASHSIZE)
 
 PYTHON ?= $(call dequote,$(CONFIG_PYTHON))
 
@@ -15,13 +16,15 @@ ESPTOOLPY_SRC := $(COMPONENT_PATH)/esptool/esptool.py
 ESPTOOLPY := $(PYTHON) $(ESPTOOLPY_SRC) --chip esp32
 ESPTOOLPY_SERIAL := $(ESPTOOLPY) --port $(ESPPORT) --baud $(ESPBAUD)
 
+ESPTOOL_FLASH_OPTIONS := --flash_mode $(ESPFLASHMODE) --flash_freq $(ESPFLASHFREQ) --flash_size $(ESPFLASHSIZE)
+
 # the no-stub argument is temporary until esptool.py fully supports compressed uploads
-ESPTOOLPY_WRITE_FLASH=$(ESPTOOLPY_SERIAL) write_flash $(if $(CONFIG_ESPTOOLPY_COMPRESSED),-z) --flash_mode $(ESPFLASHMODE) --flash_freq $(ESPFLASHFREQ)
+ESPTOOLPY_WRITE_FLASH=$(ESPTOOLPY_SERIAL) write_flash $(if $(CONFIG_ESPTOOLPY_COMPRESSED),-z) $(ESPTOOL_FLASH_OPTIONS)
 
 ESPTOOL_ALL_FLASH_ARGS += $(CONFIG_APP_OFFSET) $(APP_BIN)
 
 $(APP_BIN): $(APP_ELF) $(ESPTOOLPY_SRC)
-       $(Q) $(ESPTOOLPY) elf2image --flash_mode $(ESPFLASHMODE) --flash_freq $(ESPFLASHFREQ) -o $@ $<
+       $(Q) $(ESPTOOLPY) elf2image $(ESPTOOL_FLASH_OPTIONS) -o $@ $<
 
 flash: all_binaries $(ESPTOOLPY_SRC)
        @echo "Flashing binaries to serial port $(ESPPORT) (app at offset $(CONFIG_APP_OFFSET))..."