aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--common_features.mk2
-rw-r--r--platforms/chibios/boards/common/ld/STM32F401xE.ld85
-rw-r--r--tmk_core/common/chibios/eeprom_stm32_defs.h6
3 files changed, 89 insertions, 4 deletions
diff --git a/common_features.mk b/common_features.mk
index 3c956b7aa..3158706f8 100644
--- a/common_features.mk
+++ b/common_features.mk
@@ -174,7 +174,7 @@ else
174 SRC += $(PLATFORM_COMMON_DIR)/eeprom_stm32.c 174 SRC += $(PLATFORM_COMMON_DIR)/eeprom_stm32.c
175 SRC += $(PLATFORM_COMMON_DIR)/flash_stm32.c 175 SRC += $(PLATFORM_COMMON_DIR)/flash_stm32.c
176 OPT_DEFS += -DEEPROM_EMU_STM32F072xB 176 OPT_DEFS += -DEEPROM_EMU_STM32F072xB
177 else ifneq ($(filter $(MCU_SERIES)_$(MCU_LDSCRIPT),STM32F4xx_STM32F401xC STM32F4xx_STM32F411xE STM32F4xx_STM32F405xG),) 177 else ifneq ($(filter $(MCU_SERIES)_$(MCU_LDSCRIPT),STM32F4xx_STM32F401xC STM32F4xx_STM32F401xE STM32F4xx_STM32F411xE STM32F4xx_STM32F405xG),)
178 OPT_DEFS += -DEEPROM_DRIVER 178 OPT_DEFS += -DEEPROM_DRIVER
179 COMMON_VPATH += $(DRIVER_PATH)/eeprom 179 COMMON_VPATH += $(DRIVER_PATH)/eeprom
180 SRC += eeprom_driver.c 180 SRC += eeprom_driver.c
diff --git a/platforms/chibios/boards/common/ld/STM32F401xE.ld b/platforms/chibios/boards/common/ld/STM32F401xE.ld
new file mode 100644
index 000000000..69af7ed71
--- /dev/null
+++ b/platforms/chibios/boards/common/ld/STM32F401xE.ld
@@ -0,0 +1,85 @@
1/*
2 ChibiOS - Copyright (C) 2006..2018 Giovanni Di Sirio
3
4 Licensed under the Apache License, Version 2.0 (the "License");
5 you may not use this file except in compliance with the License.
6 You may obtain a copy of the License at
7
8 http://www.apache.org/licenses/LICENSE-2.0
9
10 Unless required by applicable law or agreed to in writing, software
11 distributed under the License is distributed on an "AS IS" BASIS,
12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 See the License for the specific language governing permissions and
14 limitations under the License.
15*/
16
17/*
18 * STM32F401xE memory setup.
19 */
20MEMORY
21{
22 flash0 (rx) : org = 0x08000000, len = 16k /* Sector 0 - Init code as ROM bootloader assumes application starts here */
23 flash1 (rx) : org = 0x08004000, len = 16k /* Sector 1 - Emulated eeprom */
24 flash2 (rx) : org = 0x08008000, len = 512k - 32k /* Sector 2..7 - Rest of firmware */
25 flash3 (rx) : org = 0x00000000, len = 0
26 flash4 (rx) : org = 0x00000000, len = 0
27 flash5 (rx) : org = 0x00000000, len = 0
28 flash6 (rx) : org = 0x00000000, len = 0
29 flash7 (rx) : org = 0x00000000, len = 0
30 ram0 (wx) : org = 0x20000000, len = 96k
31 ram1 (wx) : org = 0x00000000, len = 0
32 ram2 (wx) : org = 0x00000000, len = 0
33 ram3 (wx) : org = 0x00000000, len = 0
34 ram4 (wx) : org = 0x00000000, len = 0
35 ram5 (wx) : org = 0x00000000, len = 0
36 ram6 (wx) : org = 0x00000000, len = 0
37 ram7 (wx) : org = 0x00000000, len = 0
38}
39
40/* For each data/text section two region are defined, a virtual region
41 and a load region (_LMA suffix).*/
42
43/* Flash region to be used for exception vectors.*/
44REGION_ALIAS("VECTORS_FLASH", flash0);
45REGION_ALIAS("VECTORS_FLASH_LMA", flash0);
46
47/* Flash region to be used for constructors and destructors.*/
48REGION_ALIAS("XTORS_FLASH", flash2);
49REGION_ALIAS("XTORS_FLASH_LMA", flash2);
50
51/* Flash region to be used for code text.*/
52REGION_ALIAS("TEXT_FLASH", flash2);
53REGION_ALIAS("TEXT_FLASH_LMA", flash2);
54
55/* Flash region to be used for read only data.*/
56REGION_ALIAS("RODATA_FLASH", flash2);
57REGION_ALIAS("RODATA_FLASH_LMA", flash2);
58
59/* Flash region to be used for various.*/
60REGION_ALIAS("VARIOUS_FLASH", flash2);
61REGION_ALIAS("VARIOUS_FLASH_LMA", flash2);
62
63/* Flash region to be used for RAM(n) initialization data.*/
64REGION_ALIAS("RAM_INIT_FLASH_LMA", flash2);
65
66/* RAM region to be used for Main stack. This stack accommodates the processing
67 of all exceptions and interrupts.*/
68REGION_ALIAS("MAIN_STACK_RAM", ram0);
69
70/* RAM region to be used for the process stack. This is the stack used by
71 the main() function.*/
72REGION_ALIAS("PROCESS_STACK_RAM", ram0);
73
74/* RAM region to be used for data segment.*/
75REGION_ALIAS("DATA_RAM", ram0);
76REGION_ALIAS("DATA_RAM_LMA", flash2);
77
78/* RAM region to be used for BSS segment.*/
79REGION_ALIAS("BSS_RAM", ram0);
80
81/* RAM region to be used for the default heap.*/
82REGION_ALIAS("HEAP_RAM", ram0);
83
84/* Generic rules inclusion.*/
85INCLUDE rules.ld
diff --git a/tmk_core/common/chibios/eeprom_stm32_defs.h b/tmk_core/common/chibios/eeprom_stm32_defs.h
index cc64cda74..349979626 100644
--- a/tmk_core/common/chibios/eeprom_stm32_defs.h
+++ b/tmk_core/common/chibios/eeprom_stm32_defs.h
@@ -32,7 +32,7 @@
32# ifndef FEE_PAGE_COUNT 32# ifndef FEE_PAGE_COUNT
33# define FEE_PAGE_COUNT 4 // How many pages are used 33# define FEE_PAGE_COUNT 4 // How many pages are used
34# endif 34# endif
35# elif defined(STM32F401xC) || defined(STM32F405xG) || defined(STM32F411xE) 35# elif defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F405xG) || defined(STM32F411xE)
36# ifndef FEE_PAGE_SIZE 36# ifndef FEE_PAGE_SIZE
37# define FEE_PAGE_SIZE 0x4000 // Page size = 16KByte 37# define FEE_PAGE_SIZE 0x4000 // Page size = 16KByte
38# endif 38# endif
@@ -49,7 +49,7 @@
49# define FEE_MCU_FLASH_SIZE 128 // Size in Kb 49# define FEE_MCU_FLASH_SIZE 128 // Size in Kb
50# elif defined(STM32F303xC) || defined(STM32F401xC) 50# elif defined(STM32F303xC) || defined(STM32F401xC)
51# define FEE_MCU_FLASH_SIZE 256 // Size in Kb 51# define FEE_MCU_FLASH_SIZE 256 // Size in Kb
52# elif defined(STM32F103xE) || defined(STM32F411xE) 52# elif defined(STM32F103xE) || defined(STM32F401xE) || defined(STM32F411xE)
53# define FEE_MCU_FLASH_SIZE 512 // Size in Kb 53# define FEE_MCU_FLASH_SIZE 512 // Size in Kb
54# elif defined(STM32F405xG) 54# elif defined(STM32F405xG)
55# define FEE_MCU_FLASH_SIZE 1024 // Size in Kb 55# define FEE_MCU_FLASH_SIZE 1024 // Size in Kb
@@ -58,7 +58,7 @@
58 58
59/* Start of the emulated eeprom */ 59/* Start of the emulated eeprom */
60#if !defined(FEE_PAGE_BASE_ADDRESS) 60#if !defined(FEE_PAGE_BASE_ADDRESS)
61# if defined(STM32F401xC) || defined(STM32F405xG) || defined(STM32F411xE) 61# if defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F405xG) || defined(STM32F411xE)
62# ifndef FEE_PAGE_BASE_ADDRESS 62# ifndef FEE_PAGE_BASE_ADDRESS
63# define FEE_PAGE_BASE_ADDRESS 0x08004000 // bodge to force 2nd 16k page 63# define FEE_PAGE_BASE_ADDRESS 0x08004000 // bodge to force 2nd 16k page
64# endif 64# endif