Skip to content

Commit

Permalink
Merge #19078
Browse files Browse the repository at this point in the history
19078: cpu/esp32: define FLASHFILE_POS r=benpicco a=gschorcht

### Contribution description

Instead of using a fixed position of the image file in the flash, the variable `FLASHFILE_POS` is used which allows to override the default position of the image in the flash at 0x10000.

This PR is a prerequisite for the `periph_flashpage` implementation PR #19079.

### Testing procedure

Flashing a ESP32x SoC should work with `FLASHFILE_POS=0x20000`, for example:
```
USEMODULE=esp_log_startup FLASHFILE_POS=0x20000 BOARD=esp32-wroom-32 make -j8 -C tests/shell flash
```
The bootloader output should give `00020000` as offset for the `factory` partition
```
I (75) boot: Partition Table:
I (78) boot: ## Label            Usage          Type ST Offset   Length
I (84) boot:  0 nvs              WiFi data        01 02 00009000 00006000
I (91) boot:  1 phy_init         RF data          01 01 0000f000 00001000
I (97) boot:  2 factory          factory app      00 00 00020000 000199b0
I (104) boot: End of partition table
```
and
```
I (125) esp_image: segment 0: paddr=00020020 vaddr=3f400020 size=02140h (  8512) map
```
during the load of the image.

### Issues/PRs references

Prerequisite for PR #19079

Co-authored-by: Gunar Schorcht <[email protected]>
  • Loading branch information
bors[bot] and gschorcht authored Jan 2, 2023
2 parents 555495a + a0715b2 commit 6b4b754
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 7 deletions.
16 changes: 15 additions & 1 deletion cpu/esp32/Makefile.include
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ else ifneq (,$(filter esp32s2,$(CPU_FAM)))
else
$(error Unkwnown ESP32x SoC variant (family))
endif
FLASHFILE_POS ?= 0x10000

ESPTOOL ?= $(RIOTTOOLS)/esptools/esptool_v3.2.py

Expand Down Expand Up @@ -151,6 +152,19 @@ else ifeq (120m,$(FLASH_FREQ))
CFLAGS += -DCONFIG_ESPTOOLPY_FLASHFREQ_120M
endif

#extend CFLAGS by the corresponding FLASH_SIZE
ifeq (1,$(FLASH_SIZE))
CFLAGS += -DCONFIG_ESPTOOLPY_FLASHSIZE_1MB
else ifeq (2,$(FLASH_SIZE))
CFLAGS += -DCONFIG_ESPTOOLPY_FLASHSIZE_2MB
else ifeq (4,$(FLASH_SIZE))
CFLAGS += -DCONFIG_ESPTOOLPY_FLASHSIZE_4MB
else ifeq (8,$(FLASH_SIZE))
CFLAGS += -DCONFIG_ESPTOOLPY_FLASHSIZE_8MB
else ifeq (16,$(FLASH_SIZE))
CFLAGS += -DCONFIG_ESPTOOLPY_FLASHSIZE_16MB
endif

# shortcuts used by ESP-IDF
CFLAGS += -Dasm=__asm
CFLAGS += -Dtypeof=__typeof__
Expand Down Expand Up @@ -240,7 +254,7 @@ ifneq (,$(filter esp_jtag,$(USEMODULE)))
-c 'flash write_image erase "$(BOOTLOADER_BIN)" $(BOOTLOADER_POS) bin' \
-c 'echo "Installing partition table at $(PARTITION_POS)"' \
-c 'flash write_image erase "$(BINDIR)/partitions.bin" $(PARTITION_POS) bin'
IMAGE_OFFSET = 0x10000
IMAGE_OFFSET = $(FLASHFILE_POS)
# Flash checksumming not supported on xtensa
OPENOCD_SKIP_VERIFY = yes
# Without resets debug target fails with 'Target not examined yet'
Expand Down
1 change: 1 addition & 0 deletions cpu/esp8266/Makefile.include
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ FLASH_MODE = dout
FLASH_FREQ = 26m
FLASH_SIZE ?= 1
BOOTLOADER_POS = 0x0000
FLASHFILE_POS = 0x10000

include $(RIOTCPU)/esp_common/Makefile.include

Expand Down
3 changes: 1 addition & 2 deletions cpu/esp_common/Makefile.include
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,6 @@ $(ELFFILE).bin: $(ELFFILE)
--flash_size $(FLASH_SIZE)MB --flash_freq $(FLASH_FREQ) $(FLASH_OPTS) \
-o $@ $<


# Convert .elf and .csv to .bin files at build time, but make them available for
# tests at flash time. These can't be added to FLASHDEPS because they depend on
# on ELFFILE and would trigger a rebuild with "flash-only".
Expand All @@ -155,7 +154,7 @@ $(BINDIR)/partitions.csv: $(FLASHFILE)
$(Q)printf "\n" > $(BINDIR)/partitions.csv
$(Q)printf "nvs, data, nvs, 0x9000, 0x6000\n" >> $@
$(Q)printf "phy_init, data, phy, 0xf000, 0x1000\n" >> $@
$(Q)printf "factory, app, factory, 0x10000, " >> $@
$(Q)printf "factory, app, factory, $(FLASHFILE_POS), " >> $@
$(Q)ls -l $< | awk '{ print $$5 }' >> $@

$(BINDIR)/partitions.bin: $(PARTITION_TABLE_CSV)
Expand Down
8 changes: 4 additions & 4 deletions makefiles/tools/esptool.inc.mk
Original file line number Diff line number Diff line change
Expand Up @@ -32,19 +32,19 @@ else
FFLAGS += --flash_size detect
FFLAGS += $(BOOTLOADER_POS) $(BOOTLOADER_BIN)
FFLAGS += 0x8000 $(BINDIR)/partitions.bin
FFLAGS += 0x10000 $(FLASHFILE)
FFLAGS += $(FLASHFILE_POS) $(FLASHFILE)
endif

.PHONY: esp-qemu

esp-qemu:
esp-qemu: $(FLASHFILE)
ifeq (esp32,$(CPU))
$(Q)echo \
"--flash_mode $(FLASH_MODE) --flash_freq $(FLASH_FREQ) " \
"--flash_size $(FLASH_SIZE)MB" \
"$(BOOTLOADER_POS) $(BOOTLOADER_BIN)" \
"0x8000 $(BINDIR)/partitions.bin" \
"0x10000 $(FLASHFILE)" > $(BINDIR)/qemu_flash_args
"$(FLASHFILE_POS) $(FLASHFILE)" > $(BINDIR)/qemu_flash_args
$(Q)$(ESPTOOL) \
--chip $(CPU_FAM) merge_bin \
--fill-flash-size 4MB \
Expand All @@ -58,7 +58,7 @@ else
cat - $(BOOTLOADER_BIN) tmp.bin | \
head -c $$((0x8000)) | \
cat - $(BINDIR)/partitions.bin tmp.bin | \
head -c $$((0x10000)) | \
head -c $$(($(FLASHFILE_POS))) | \
cat - $(FLASHFILE) tmp.bin | \
head -c $(FLASH_SIZE)MB > $(BINDIR)/$(CPU)flash.bin && rm tmp.bin
endif
Expand Down

0 comments on commit 6b4b754

Please sign in to comment.