summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2018-03-27 21:24:15 +1100
committerDamien George <damien.p.george@gmail.com>2018-03-27 21:24:15 +1100
commited75b2655fd8e5f9c058a97852eb30f354c10206 (patch)
treef9e7d02f4179348b9ac2b4e56bd18c4646efab50
parent95b2cb008e22a26b398b3c153243269b2ffc3b6f (diff)
stm32/Makefile: Allow a board to config either 1 or 2 firmware sections.
This patch forces a board to explicitly define TEXT1_ADDR in order to split the firmware into two separate pieces. Otherwise the default is now to produce only a single continuous firmware image with all ISR, text and data together.
-rw-r--r--ports/stm32/Makefile25
-rw-r--r--ports/stm32/boards/B_L475E_IOT01A/mpconfigboard.mk1
-rw-r--r--ports/stm32/boards/CERB40/mpconfigboard.mk2
-rw-r--r--ports/stm32/boards/ESPRUINO_PICO/mpconfigboard.mk2
-rw-r--r--ports/stm32/boards/HYDRABUS/mpconfigboard.mk2
-rw-r--r--ports/stm32/boards/LIMIFROG/mpconfigboard.mk1
-rw-r--r--ports/stm32/boards/NETDUINO_PLUS_2/mpconfigboard.mk2
-rw-r--r--ports/stm32/boards/NUCLEO_F401RE/mpconfigboard.mk2
-rw-r--r--ports/stm32/boards/NUCLEO_F411RE/mpconfigboard.mk2
-rw-r--r--ports/stm32/boards/NUCLEO_F429ZI/mpconfigboard.mk2
-rw-r--r--ports/stm32/boards/NUCLEO_F446RE/mpconfigboard.mk2
-rw-r--r--ports/stm32/boards/NUCLEO_F746ZG/mpconfigboard.mk2
-rw-r--r--ports/stm32/boards/NUCLEO_F767ZI/mpconfigboard.mk2
-rw-r--r--ports/stm32/boards/NUCLEO_L476RG/mpconfigboard.mk1
-rw-r--r--ports/stm32/boards/OLIMEX_E407/mpconfigboard.mk2
-rw-r--r--ports/stm32/boards/PYBLITEV10/mpconfigboard.mk2
-rw-r--r--ports/stm32/boards/PYBV10/mpconfigboard.mk2
-rw-r--r--ports/stm32/boards/PYBV11/mpconfigboard.mk2
-rw-r--r--ports/stm32/boards/PYBV3/mpconfigboard.mk2
-rw-r--r--ports/stm32/boards/PYBV4/mpconfigboard.mk2
-rw-r--r--ports/stm32/boards/STM32F411DISC/mpconfigboard.mk2
-rw-r--r--ports/stm32/boards/STM32F429DISC/mpconfigboard.mk2
-rw-r--r--ports/stm32/boards/STM32F439/mpconfigboard.mk2
-rw-r--r--ports/stm32/boards/STM32F4DISC/mpconfigboard.mk2
-rw-r--r--ports/stm32/boards/STM32F769DISC/mpconfigboard.mk2
-rw-r--r--ports/stm32/boards/STM32F7DISC/mpconfigboard.mk2
-rw-r--r--ports/stm32/boards/STM32L476DISC/mpconfigboard.mk1
27 files changed, 72 insertions, 1 deletions
diff --git a/ports/stm32/Makefile b/ports/stm32/Makefile
index 858e8fa95..d1c5de6d3 100644
--- a/ports/stm32/Makefile
+++ b/ports/stm32/Makefile
@@ -387,8 +387,29 @@ else
$(Q)$(DFU_UTIL) -a 0 -d $(DEVICE) -D $<
endif
+# A board should specify TEXT0_ADDR if to use a different location than the
+# default for the firmware memory location. A board can also optionally define
+# TEXT1_ADDR to split the firmware into two sections; see below for details.
TEXT0_ADDR ?= 0x08000000
-TEXT1_ADDR ?= 0x08020000
+
+ifeq ($(TEXT1_ADDR),)
+# No TEXT1_ADDR given so put all firmware at TEXT0_ADDR location
+
+deploy-stlink: $(BUILD)/firmware.dfu
+ $(ECHO) "Writing $(BUILD)/firmware.bin to the board via ST-LINK"
+ $(Q)$(STFLASH) write $(BUILD)/firmware.bin $(TEXT0_ADDR)
+
+deploy-openocd: $(BUILD)/firmware.dfu
+ $(ECHO) "Writing $(BUILD)/firmware.bin to the board via ST-LINK using OpenOCD"
+ $(Q)$(OPENOCD) -f $(OPENOCD_CONFIG) -c "stm_flash $(BUILD)/firmware.bin $(TEXT0_ADDR)"
+
+$(BUILD)/firmware.dfu: $(BUILD)/firmware.elf
+ $(ECHO) "Create $@"
+ $(Q)$(OBJCOPY) -O binary -j .isr_vector -j .text -j .data $^ $(BUILD)/firmware.bin
+ $(Q)$(PYTHON) $(DFU) -b $(TEXT0_ADDR):$(BUILD)/firmware.bin $@
+
+else
+# TEXT0_ADDR and TEXT1_ADDR are specified so split firmware between these locations
deploy-stlink: $(BUILD)/firmware.dfu
$(ECHO) "Writing $(BUILD)/firmware0.bin to the board via ST-LINK"
@@ -406,6 +427,8 @@ $(BUILD)/firmware.dfu: $(BUILD)/firmware.elf
$(Q)$(OBJCOPY) -O binary -j .text -j .data $^ $(BUILD)/firmware1.bin
$(Q)$(PYTHON) $(DFU) -b $(TEXT0_ADDR):$(BUILD)/firmware0.bin -b $(TEXT1_ADDR):$(BUILD)/firmware1.bin $@
+endif
+
$(BUILD)/firmware.hex: $(BUILD)/firmware.elf
$(ECHO) "GEN $@"
$(Q)$(OBJCOPY) -O ihex $< $@
diff --git a/ports/stm32/boards/B_L475E_IOT01A/mpconfigboard.mk b/ports/stm32/boards/B_L475E_IOT01A/mpconfigboard.mk
index 7e7bfcce9..55e443e91 100644
--- a/ports/stm32/boards/B_L475E_IOT01A/mpconfigboard.mk
+++ b/ports/stm32/boards/B_L475E_IOT01A/mpconfigboard.mk
@@ -4,5 +4,6 @@ CMSIS_MCU = STM32L475xx
# the only diffrence to the stm32l476 - so reuse some files.
AF_FILE = boards/stm32l476_af.csv
LD_FILES = boards/stm32l476xg.ld boards/common_ifs.ld
+TEXT0_ADDR = 0x08000000
TEXT1_ADDR = 0x08004000
OPENOCD_CONFIG = boards/openocd_stm32l4.cfg
diff --git a/ports/stm32/boards/CERB40/mpconfigboard.mk b/ports/stm32/boards/CERB40/mpconfigboard.mk
index 27198edb0..40972b385 100644
--- a/ports/stm32/boards/CERB40/mpconfigboard.mk
+++ b/ports/stm32/boards/CERB40/mpconfigboard.mk
@@ -2,3 +2,5 @@ MCU_SERIES = f4
CMSIS_MCU = STM32F405xx
AF_FILE = boards/stm32f405_af.csv
LD_FILES = boards/stm32f405.ld boards/common_ifs.ld
+TEXT0_ADDR = 0x08000000
+TEXT1_ADDR = 0x08020000
diff --git a/ports/stm32/boards/ESPRUINO_PICO/mpconfigboard.mk b/ports/stm32/boards/ESPRUINO_PICO/mpconfigboard.mk
index e95672d3a..16cacc089 100644
--- a/ports/stm32/boards/ESPRUINO_PICO/mpconfigboard.mk
+++ b/ports/stm32/boards/ESPRUINO_PICO/mpconfigboard.mk
@@ -2,6 +2,8 @@ MCU_SERIES = f4
CMSIS_MCU = STM32F401xE
AF_FILE = boards/stm32f401_af.csv
LD_FILES = boards/stm32f401xd.ld boards/common_ifs.ld
+TEXT0_ADDR = 0x08000000
+TEXT1_ADDR = 0x08020000
# Don't include default frozen modules because MCU is tight on flash space
FROZEN_MPY_DIR ?=
diff --git a/ports/stm32/boards/HYDRABUS/mpconfigboard.mk b/ports/stm32/boards/HYDRABUS/mpconfigboard.mk
index 27198edb0..40972b385 100644
--- a/ports/stm32/boards/HYDRABUS/mpconfigboard.mk
+++ b/ports/stm32/boards/HYDRABUS/mpconfigboard.mk
@@ -2,3 +2,5 @@ MCU_SERIES = f4
CMSIS_MCU = STM32F405xx
AF_FILE = boards/stm32f405_af.csv
LD_FILES = boards/stm32f405.ld boards/common_ifs.ld
+TEXT0_ADDR = 0x08000000
+TEXT1_ADDR = 0x08020000
diff --git a/ports/stm32/boards/LIMIFROG/mpconfigboard.mk b/ports/stm32/boards/LIMIFROG/mpconfigboard.mk
index 02e8a06b2..2adc98f0b 100644
--- a/ports/stm32/boards/LIMIFROG/mpconfigboard.mk
+++ b/ports/stm32/boards/LIMIFROG/mpconfigboard.mk
@@ -2,4 +2,5 @@ MCU_SERIES = l4
CMSIS_MCU = STM32L476xx
AF_FILE = boards/stm32l476_af.csv
LD_FILES = boards/stm32l476xe.ld boards/common_ifs.ld
+TEXT0_ADDR = 0x08000000
TEXT1_ADDR = 0x08004000
diff --git a/ports/stm32/boards/NETDUINO_PLUS_2/mpconfigboard.mk b/ports/stm32/boards/NETDUINO_PLUS_2/mpconfigboard.mk
index 27198edb0..40972b385 100644
--- a/ports/stm32/boards/NETDUINO_PLUS_2/mpconfigboard.mk
+++ b/ports/stm32/boards/NETDUINO_PLUS_2/mpconfigboard.mk
@@ -2,3 +2,5 @@ MCU_SERIES = f4
CMSIS_MCU = STM32F405xx
AF_FILE = boards/stm32f405_af.csv
LD_FILES = boards/stm32f405.ld boards/common_ifs.ld
+TEXT0_ADDR = 0x08000000
+TEXT1_ADDR = 0x08020000
diff --git a/ports/stm32/boards/NUCLEO_F401RE/mpconfigboard.mk b/ports/stm32/boards/NUCLEO_F401RE/mpconfigboard.mk
index 00b915b84..4c3022f54 100644
--- a/ports/stm32/boards/NUCLEO_F401RE/mpconfigboard.mk
+++ b/ports/stm32/boards/NUCLEO_F401RE/mpconfigboard.mk
@@ -2,3 +2,5 @@ MCU_SERIES = f4
CMSIS_MCU = STM32F401xE
AF_FILE = boards/stm32f401_af.csv
LD_FILES = boards/stm32f401xe.ld boards/common_ifs.ld
+TEXT0_ADDR = 0x08000000
+TEXT1_ADDR = 0x08020000
diff --git a/ports/stm32/boards/NUCLEO_F411RE/mpconfigboard.mk b/ports/stm32/boards/NUCLEO_F411RE/mpconfigboard.mk
index 4e57879c7..df9506522 100644
--- a/ports/stm32/boards/NUCLEO_F411RE/mpconfigboard.mk
+++ b/ports/stm32/boards/NUCLEO_F411RE/mpconfigboard.mk
@@ -2,3 +2,5 @@ MCU_SERIES = f4
CMSIS_MCU = STM32F411xE
AF_FILE = boards/stm32f411_af.csv
LD_FILES = boards/stm32f411.ld boards/common_ifs.ld
+TEXT0_ADDR = 0x08000000
+TEXT1_ADDR = 0x08020000
diff --git a/ports/stm32/boards/NUCLEO_F429ZI/mpconfigboard.mk b/ports/stm32/boards/NUCLEO_F429ZI/mpconfigboard.mk
index 9d200ce70..d19a35c31 100644
--- a/ports/stm32/boards/NUCLEO_F429ZI/mpconfigboard.mk
+++ b/ports/stm32/boards/NUCLEO_F429ZI/mpconfigboard.mk
@@ -2,3 +2,5 @@ MCU_SERIES = f4
CMSIS_MCU = STM32F429xx
AF_FILE = boards/stm32f429_af.csv
LD_FILES = boards/stm32f429.ld boards/common_ifs.ld
+TEXT0_ADDR = 0x08000000
+TEXT1_ADDR = 0x08020000
diff --git a/ports/stm32/boards/NUCLEO_F446RE/mpconfigboard.mk b/ports/stm32/boards/NUCLEO_F446RE/mpconfigboard.mk
index 43057458f..64a80e992 100644
--- a/ports/stm32/boards/NUCLEO_F446RE/mpconfigboard.mk
+++ b/ports/stm32/boards/NUCLEO_F446RE/mpconfigboard.mk
@@ -2,3 +2,5 @@ MCU_SERIES = f4
CMSIS_MCU = STM32F446xx
AF_FILE = boards/stm32f429_af.csv
LD_FILES = boards/stm32f411.ld boards/common_ifs.ld
+TEXT0_ADDR = 0x08000000
+TEXT1_ADDR = 0x08020000
diff --git a/ports/stm32/boards/NUCLEO_F746ZG/mpconfigboard.mk b/ports/stm32/boards/NUCLEO_F746ZG/mpconfigboard.mk
index cf03fbc67..160218fd3 100644
--- a/ports/stm32/boards/NUCLEO_F746ZG/mpconfigboard.mk
+++ b/ports/stm32/boards/NUCLEO_F746ZG/mpconfigboard.mk
@@ -2,3 +2,5 @@ MCU_SERIES = f7
CMSIS_MCU = STM32F746xx
AF_FILE = boards/stm32f746_af.csv
LD_FILES = boards/stm32f746.ld boards/common_ifs.ld
+TEXT0_ADDR = 0x08000000
+TEXT1_ADDR = 0x08020000
diff --git a/ports/stm32/boards/NUCLEO_F767ZI/mpconfigboard.mk b/ports/stm32/boards/NUCLEO_F767ZI/mpconfigboard.mk
index afb2ac805..b79ee7da2 100644
--- a/ports/stm32/boards/NUCLEO_F767ZI/mpconfigboard.mk
+++ b/ports/stm32/boards/NUCLEO_F767ZI/mpconfigboard.mk
@@ -3,3 +3,5 @@ CMSIS_MCU = STM32F767xx
MICROPY_FLOAT_IMPL = double
AF_FILE = boards/stm32f767_af.csv
LD_FILES = boards/stm32f767.ld boards/common_ifs.ld
+TEXT0_ADDR = 0x08000000
+TEXT1_ADDR = 0x08020000
diff --git a/ports/stm32/boards/NUCLEO_L476RG/mpconfigboard.mk b/ports/stm32/boards/NUCLEO_L476RG/mpconfigboard.mk
index 3244fb628..38ae5af21 100644
--- a/ports/stm32/boards/NUCLEO_L476RG/mpconfigboard.mk
+++ b/ports/stm32/boards/NUCLEO_L476RG/mpconfigboard.mk
@@ -2,4 +2,5 @@ MCU_SERIES = l4
CMSIS_MCU = STM32L476xx
AF_FILE = boards/stm32l476_af.csv
LD_FILES = boards/stm32l476xg.ld boards/common_ifs.ld
+TEXT0_ADDR = 0x08000000
TEXT1_ADDR = 0x08004000
diff --git a/ports/stm32/boards/OLIMEX_E407/mpconfigboard.mk b/ports/stm32/boards/OLIMEX_E407/mpconfigboard.mk
index e874cf5cc..b154dcfba 100644
--- a/ports/stm32/boards/OLIMEX_E407/mpconfigboard.mk
+++ b/ports/stm32/boards/OLIMEX_E407/mpconfigboard.mk
@@ -2,3 +2,5 @@ MCU_SERIES = f4
CMSIS_MCU = STM32F407xx
AF_FILE = boards/stm32f405_af.csv
LD_FILES = boards/stm32f405.ld boards/common_ifs.ld
+TEXT0_ADDR = 0x08000000
+TEXT1_ADDR = 0x08020000
diff --git a/ports/stm32/boards/PYBLITEV10/mpconfigboard.mk b/ports/stm32/boards/PYBLITEV10/mpconfigboard.mk
index 4e57879c7..df9506522 100644
--- a/ports/stm32/boards/PYBLITEV10/mpconfigboard.mk
+++ b/ports/stm32/boards/PYBLITEV10/mpconfigboard.mk
@@ -2,3 +2,5 @@ MCU_SERIES = f4
CMSIS_MCU = STM32F411xE
AF_FILE = boards/stm32f411_af.csv
LD_FILES = boards/stm32f411.ld boards/common_ifs.ld
+TEXT0_ADDR = 0x08000000
+TEXT1_ADDR = 0x08020000
diff --git a/ports/stm32/boards/PYBV10/mpconfigboard.mk b/ports/stm32/boards/PYBV10/mpconfigboard.mk
index 27198edb0..40972b385 100644
--- a/ports/stm32/boards/PYBV10/mpconfigboard.mk
+++ b/ports/stm32/boards/PYBV10/mpconfigboard.mk
@@ -2,3 +2,5 @@ MCU_SERIES = f4
CMSIS_MCU = STM32F405xx
AF_FILE = boards/stm32f405_af.csv
LD_FILES = boards/stm32f405.ld boards/common_ifs.ld
+TEXT0_ADDR = 0x08000000
+TEXT1_ADDR = 0x08020000
diff --git a/ports/stm32/boards/PYBV11/mpconfigboard.mk b/ports/stm32/boards/PYBV11/mpconfigboard.mk
index 27198edb0..40972b385 100644
--- a/ports/stm32/boards/PYBV11/mpconfigboard.mk
+++ b/ports/stm32/boards/PYBV11/mpconfigboard.mk
@@ -2,3 +2,5 @@ MCU_SERIES = f4
CMSIS_MCU = STM32F405xx
AF_FILE = boards/stm32f405_af.csv
LD_FILES = boards/stm32f405.ld boards/common_ifs.ld
+TEXT0_ADDR = 0x08000000
+TEXT1_ADDR = 0x08020000
diff --git a/ports/stm32/boards/PYBV3/mpconfigboard.mk b/ports/stm32/boards/PYBV3/mpconfigboard.mk
index 27198edb0..40972b385 100644
--- a/ports/stm32/boards/PYBV3/mpconfigboard.mk
+++ b/ports/stm32/boards/PYBV3/mpconfigboard.mk
@@ -2,3 +2,5 @@ MCU_SERIES = f4
CMSIS_MCU = STM32F405xx
AF_FILE = boards/stm32f405_af.csv
LD_FILES = boards/stm32f405.ld boards/common_ifs.ld
+TEXT0_ADDR = 0x08000000
+TEXT1_ADDR = 0x08020000
diff --git a/ports/stm32/boards/PYBV4/mpconfigboard.mk b/ports/stm32/boards/PYBV4/mpconfigboard.mk
index 27198edb0..40972b385 100644
--- a/ports/stm32/boards/PYBV4/mpconfigboard.mk
+++ b/ports/stm32/boards/PYBV4/mpconfigboard.mk
@@ -2,3 +2,5 @@ MCU_SERIES = f4
CMSIS_MCU = STM32F405xx
AF_FILE = boards/stm32f405_af.csv
LD_FILES = boards/stm32f405.ld boards/common_ifs.ld
+TEXT0_ADDR = 0x08000000
+TEXT1_ADDR = 0x08020000
diff --git a/ports/stm32/boards/STM32F411DISC/mpconfigboard.mk b/ports/stm32/boards/STM32F411DISC/mpconfigboard.mk
index 4e57879c7..df9506522 100644
--- a/ports/stm32/boards/STM32F411DISC/mpconfigboard.mk
+++ b/ports/stm32/boards/STM32F411DISC/mpconfigboard.mk
@@ -2,3 +2,5 @@ MCU_SERIES = f4
CMSIS_MCU = STM32F411xE
AF_FILE = boards/stm32f411_af.csv
LD_FILES = boards/stm32f411.ld boards/common_ifs.ld
+TEXT0_ADDR = 0x08000000
+TEXT1_ADDR = 0x08020000
diff --git a/ports/stm32/boards/STM32F429DISC/mpconfigboard.mk b/ports/stm32/boards/STM32F429DISC/mpconfigboard.mk
index 9d200ce70..d19a35c31 100644
--- a/ports/stm32/boards/STM32F429DISC/mpconfigboard.mk
+++ b/ports/stm32/boards/STM32F429DISC/mpconfigboard.mk
@@ -2,3 +2,5 @@ MCU_SERIES = f4
CMSIS_MCU = STM32F429xx
AF_FILE = boards/stm32f429_af.csv
LD_FILES = boards/stm32f429.ld boards/common_ifs.ld
+TEXT0_ADDR = 0x08000000
+TEXT1_ADDR = 0x08020000
diff --git a/ports/stm32/boards/STM32F439/mpconfigboard.mk b/ports/stm32/boards/STM32F439/mpconfigboard.mk
index 051bd21e6..ca97acbf6 100644
--- a/ports/stm32/boards/STM32F439/mpconfigboard.mk
+++ b/ports/stm32/boards/STM32F439/mpconfigboard.mk
@@ -2,3 +2,5 @@ MCU_SERIES = f4
CMSIS_MCU = STM32F439xx
AF_FILE = boards/stm32f439_af.csv
LD_FILES = boards/stm32f439.ld boards/common_ifs.ld
+TEXT0_ADDR = 0x08000000
+TEXT1_ADDR = 0x08020000
diff --git a/ports/stm32/boards/STM32F4DISC/mpconfigboard.mk b/ports/stm32/boards/STM32F4DISC/mpconfigboard.mk
index e874cf5cc..b154dcfba 100644
--- a/ports/stm32/boards/STM32F4DISC/mpconfigboard.mk
+++ b/ports/stm32/boards/STM32F4DISC/mpconfigboard.mk
@@ -2,3 +2,5 @@ MCU_SERIES = f4
CMSIS_MCU = STM32F407xx
AF_FILE = boards/stm32f405_af.csv
LD_FILES = boards/stm32f405.ld boards/common_ifs.ld
+TEXT0_ADDR = 0x08000000
+TEXT1_ADDR = 0x08020000
diff --git a/ports/stm32/boards/STM32F769DISC/mpconfigboard.mk b/ports/stm32/boards/STM32F769DISC/mpconfigboard.mk
index 7271fdd9b..873368ce5 100644
--- a/ports/stm32/boards/STM32F769DISC/mpconfigboard.mk
+++ b/ports/stm32/boards/STM32F769DISC/mpconfigboard.mk
@@ -3,3 +3,5 @@ CMSIS_MCU = STM32F769xx
MICROPY_FLOAT_IMPL = double
AF_FILE = boards/stm32f767_af.csv
LD_FILES = boards/stm32f769.ld boards/common_ifs.ld
+TEXT0_ADDR = 0x08000000
+TEXT1_ADDR = 0x08020000
diff --git a/ports/stm32/boards/STM32F7DISC/mpconfigboard.mk b/ports/stm32/boards/STM32F7DISC/mpconfigboard.mk
index cf03fbc67..160218fd3 100644
--- a/ports/stm32/boards/STM32F7DISC/mpconfigboard.mk
+++ b/ports/stm32/boards/STM32F7DISC/mpconfigboard.mk
@@ -2,3 +2,5 @@ MCU_SERIES = f7
CMSIS_MCU = STM32F746xx
AF_FILE = boards/stm32f746_af.csv
LD_FILES = boards/stm32f746.ld boards/common_ifs.ld
+TEXT0_ADDR = 0x08000000
+TEXT1_ADDR = 0x08020000
diff --git a/ports/stm32/boards/STM32L476DISC/mpconfigboard.mk b/ports/stm32/boards/STM32L476DISC/mpconfigboard.mk
index 27935dad8..2cad9e2e5 100644
--- a/ports/stm32/boards/STM32L476DISC/mpconfigboard.mk
+++ b/ports/stm32/boards/STM32L476DISC/mpconfigboard.mk
@@ -2,5 +2,6 @@ MCU_SERIES = l4
CMSIS_MCU = STM32L476xx
AF_FILE = boards/stm32l476_af.csv
LD_FILES = boards/stm32l476xg.ld boards/common_ifs.ld
+TEXT0_ADDR = 0x08000000
TEXT1_ADDR = 0x08004000
OPENOCD_CONFIG = boards/openocd_stm32l4.cfg