From e58614002cff32c674becabefbb79a093e71bf7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?King=20K=C3=A9vin?= Date: Tue, 24 Nov 2020 15:48:25 +0100 Subject: [PATCH] *.ld: set flash and RAM size for STM32F401xC --- application.ld | 24 ++++++------------------ bootloader.ld | 24 +++++++----------------- 2 files changed, 13 insertions(+), 35 deletions(-) diff --git a/application.ld b/application.ld index ff93513..7098812 100644 --- a/application.ld +++ b/application.ld @@ -1,28 +1,16 @@ -/* linker script for application running on STM32F103x8 micro-controller - * the STM32F103x8 has 64 KB of flash starting at 0x0800 0000, and 20 KB of RAM starting at 0x2000 0000 - * the STM32F103xB has 128 KB of flash starting at 0x0800 0000, and 20 KB of RAM starting at 0x2000 0000 - * STM32F103x8 most often have if fact 128 KB, instead of the specified and advertised 64 KB, like the STM32F103xB - * you can define the desired flash size here. - * the USB DFU bootloader will take the first 8 KB of flash, followed by the application +/* linker script for application running on STM32F401xC micro-controller + * the STM32F401xC has 256 KB of flash starting at 0x0800 0000, and 64 KB of RAM starting at 0x2000 0000 + * the USB DFU bootloader will use the first sector, which is 16 KB large. + * this is followed by the application. * the first 4 bytes of the RAM is reserved for the DFU magic word (DFU! to start DFU bootloader) */ /* define memory regions. */ MEMORY { - rom (rx) : ORIGIN = 0x08000000 + 8K, LENGTH = 64K - 8K - ram (rwx) : ORIGIN = 0x20000000 + 4, LENGTH = 20K - 4 + rom (rx) : ORIGIN = 0x08000000 + 16K, LENGTH = 256K - 16K + ram (rwx) : ORIGIN = 0x20000000 + 4, LENGTH = 64K - 4 } -PROVIDE(__application_beginning = ORIGIN(rom)); -/* if you want the firmware to use the flash size advertised by the micro-controller itself, use the following: -PROVIDE(__application_end = 0); -PROVIDE(__flash_end = 0); - if you want to enforce a flash size, because there is more flash than advertized by the micro-controller, use to following: -PROVIDE(__application_end = ORIGIN(rom) + LENGTH(rom)); -PROVIDE(__flash_end = ORIGIN(rom) + LENGTH(rom)); -*/ -PROVIDE(__application_end = 0); -PROVIDE(__flash_end = 0); /* RAM location reserved so application can talk to bootloader and tell to start DFU */ PROVIDE(__dfu_magic = ORIGIN(ram) - 4); diff --git a/bootloader.ld b/bootloader.ld index b662f14..dd92811 100644 --- a/bootloader.ld +++ b/bootloader.ld @@ -1,28 +1,18 @@ -/* linker script for application running on STM32F103x8 micro-controller - * the STM32F103x8 has 64 KB of flash starting at 0x0800 0000, and 20 KB of RAM starting at 0x2000 0000 - * the STM32F103xB has 128 KB of flash starting at 0x0800 0000, and 20 KB of RAM starting at 0x2000 0000 - * STM32F103x8 most often have if fact 128 KB, instead of the specified and advertised 64 KB, like the STM32F103xB - * you can define the desired flash size here. - * the USB DFU bootloader will take the first 8 KB of flash, followed by the application +/* linker script for application running on STM32F401xC micro-controller + * the STM32F401xC has 256 KB of flash starting at 0x0800 0000, and 64 KB of RAM starting at 0x2000 0000 + * the USB DFU bootloader will use the first sector, which is 16 KB large. + * this is followed by the application. * the first 4 bytes of the RAM is reserved for the DFU magic word (DFU! to start DFU bootloader) */ /* define memory regions. */ MEMORY { - rom (rx) : ORIGIN = 0x08000000, LENGTH = 8K - ram (rwx) : ORIGIN = 0x20000000 + 4, LENGTH = 20K - 4 + rom (rx) : ORIGIN = 0x08000000, LENGTH = 16K + ram (rwx) : ORIGIN = 0x20000000 + 4, LENGTH = 64K - 4 } +/* where the main application starts */ PROVIDE(__application_beginning = ORIGIN(rom) + LENGTH(rom)); -/* if you want the firmware to use the flash size advertised by the micro-controller itself, use the following: -PROVIDE(__application_end = 0); -PROVIDE(__flash_end = 0); - if you want to enforce a flash size, because there is more flash than advertized by the micro-controller, use to following: -PROVIDE(__application_end = ORIGIN(rom) + LENGTH(rom)); -PROVIDE(__flash_end = ORIGIN(rom) + LENGTH(rom)); -*/ -PROVIDE(__application_end = 0); -PROVIDE(__flash_end = 0); /* RAM location reserved so application can talk to bootloader and tell to start DFU */ PROVIDE(__dfu_magic = ORIGIN(ram) - 4);