diff --git a/boards/nucleo-f207zg/Makefile.features b/boards/nucleo-f207zg/Makefile.features index a2a071e0b5..2fc72d7fbb 100644 --- a/boards/nucleo-f207zg/Makefile.features +++ b/boards/nucleo-f207zg/Makefile.features @@ -7,6 +7,9 @@ FEATURES_PROVIDED += periph_spi FEATURES_PROVIDED += periph_timer FEATURES_PROVIDED += periph_uart +# Put other features for this board (in alphabetical order) +FEATURES_PROVIDED += riotboot + # load the common Makefile.features for Nucleo-144 boards include $(RIOTBOARD)/common/nucleo144/Makefile.features diff --git a/cpu/stm32f2/Makefile.include b/cpu/stm32f2/Makefile.include index 38ab4d6357..e5d37fb4ea 100644 --- a/cpu/stm32f2/Makefile.include +++ b/cpu/stm32f2/Makefile.include @@ -1,5 +1,23 @@ export CPU_ARCH = cortex-m3 export CPU_FAM = stm32f2 +# STM32F2 uses sectors instead of pages, where the minimum sector length is 16KB +# (the first sector), therefore RIOTBOOT_LEN must be 16KB to cover a whole sector. +RIOTBOOT_LEN ?= 0x4000 + +# CPU_IRQ_NUMOF for STM32F2 boards is < 81+16 so (97*4 bytes = 388 bytes ~= 0x200) +# RIOTBOOT_HDR_LEN can be set to 0x200. +# Details on alignment requirements for M3 in `cpu/cortexm_common/Makefile.include`. +RIOTBOOT_HDR_LEN ?= 0x200 + +# Sectors don't have the same length. Per bank there can be up to 12 sectors. The +# first 4 sectors are 16kB long, the 5th is 64kB and the remaining 7 are 128kB. +# Since flash can only be erased by sector, slots can't overlap over sectors. +# The most efficient layout comes from removing RIOTBOOT_LEN twice, once at the +# start of the flash for the bootloader, and a second time at the end of the +# flash, to get evenly sized and distributed slots. +SLOT0_LEN ?= $(shell printf "0x%x" $$((($(ROM_LEN:%K=%*1024)-2*$(RIOTBOOT_LEN)) / $(NUM_SLOTS)))) +SLOT1_LEN ?= $(SLOT0_LEN) + include $(RIOTCPU)/stm32_common/Makefile.include include $(RIOTMAKE)/arch/cortexm.inc.mk