Create a new linker script with more space for the firmware.

This commit is contained in:
jgillick 2020-11-22 18:25:37 -08:00
parent fe6e50b770
commit 661c20dd18
4 changed files with 41 additions and 6 deletions

View File

@ -0,0 +1,29 @@
/*
GNU linker script for STM32F411 with nvm and an external flash chip, and reserves
more space for the CircuitPython firmware and less for the filesystem
(since the filesystem will be on the external flash chip).
*/
/* Specify the memory areas */
MEMORY
{
FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 512K /* entire flash */
FLASH_ISR (rx) : ORIGIN = 0x08000000, LENGTH = 16K /* sector 0 */
FLASH_FS (rx) : ORIGIN = 0x08004000, LENGTH = 32K /* sectors 1,2 are 16K */
FLASH_NVM (rwx) : ORIGIN = 0x0800C000, LENGTH = 16K /* sector 3 is 16K */
FLASH_FIRMWARE (rx) : ORIGIN = 0x08010000, LENGTH = 448K /* sector 4 is 64K, sectors 5,6,7 are 128K */
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 128K
}
/* produce a link error if there is not this amount of RAM for these sections */
_minimum_stack_size = 24K;
_minimum_heap_size = 16K;
/* Define the top end of the stack. The stack is full descending so begins just
above last byte of RAM. Note that EABI requires the stack to be 8-byte
aligned for a call. */
_estack = ORIGIN(RAM) + LENGTH(RAM);
/* RAM extents for the garbage collector */
_ram_start = ORIGIN(RAM);
_ram_end = ORIGIN(RAM) + LENGTH(RAM);

View File

@ -28,14 +28,16 @@
// Non-volatile memory config
#define CIRCUITPY_INTERNAL_NVM_SIZE (0x4000)
#define CIRCUITPY_INTERNAL_NVM_START_ADDR (0x08010000)
#define CIRCUITPY_INTERNAL_NVM_SECTOR FLASH_SECTOR_4
#define CIRCUITPY_INTERNAL_NVM_START_ADDR (0x0800C000)
#define CIRCUITPY_INTERNAL_NVM_SECTOR FLASH_SECTOR_3
#define NVM_BYTEARRAY_BUFFER_SIZE 512
// Flash config
#define FLASH_SIZE (0x80000)
#define FLASH_PAGE_SIZE (0x4000)
#define BOARD_FLASH_SIZE (FLASH_SIZE - CIRCUITPY_INTERNAL_NVM_SIZE- 0x2000 - 0xC000)
#define FLASH_SIZE (0x80000)
#define FLASH_PAGE_SIZE (0x4000)
#define BOARD_FLASH_SIZE (FLASH_SIZE - CIRCUITPY_INTERNAL_NVM_SIZE- 0x2000 - 0xC000)
#define INTERNAL_FLASH_FILESYSTEM_SIZE 0x8000
#define INTERNAL_FLASH_FILESYSTEM_START_ADDR 0x08004000
// On-board flash
#define SPI_FLASH_MOSI_PIN (&pin_PB15)

View File

@ -17,4 +17,4 @@ MCU_VARIANT = STM32F411xE
MCU_PACKAGE = UFQFPN48
LD_COMMON = boards/common_nvm.ld
LD_FILE = boards/STM32F411_nvm.ld
LD_FILE = boards/STM32F411_nvm_flash.ld

View File

@ -41,9 +41,13 @@
#ifdef STM32F411xE
#define STM32_FLASH_SIZE 0x80000 //512KiB
#ifndef INTERNAL_FLASH_FILESYSTEM_SIZE
#define INTERNAL_FLASH_FILESYSTEM_SIZE 0xC000 //48KiB
#endif
#ifndef INTERNAL_FLASH_FILESYSTEM_START_ADDR
#define INTERNAL_FLASH_FILESYSTEM_START_ADDR 0x08004000
#endif
#endif
#ifdef STM32F412Zx
#define STM32_FLASH_SIZE 0x100000 //1MB