stm32/boards: Convert F4xx and F7xx to new flash FS config.
Following on from 35e70c1698
.
Fixes issue #8390.
This commit is contained in:
parent
63f0e700f4
commit
a16dcc8136
@ -7,9 +7,10 @@ MEMORY
|
||||
{
|
||||
FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 384K /* entire flash */
|
||||
FLASH_ISR (rx) : ORIGIN = 0x08000000, LENGTH = 16K /* sector 0 */
|
||||
FLASH_FS (rx) : ORIGIN = 0x08004000, LENGTH = 112K /* sectors 1,2,3 are 16K, 4 is 64K */
|
||||
FLASH_FS (rx) : ORIGIN = 0x08004000, LENGTH = 64K /* sectors 1,2,3,4: 16k+16k+16k+16k(of 64k)=64k */
|
||||
FLASH_TEXT (rx) : ORIGIN = 0x08020000, LENGTH = 256K /* sectors 5,6 are 128K */
|
||||
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 96K
|
||||
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 80K
|
||||
FS_CACHE (xrw) : ORIGIN = 0x20014000, LENGTH = 16K
|
||||
}
|
||||
|
||||
/* produce a link error if there is not this amount of RAM for these sections */
|
||||
@ -26,3 +27,9 @@ _ram_start = ORIGIN(RAM);
|
||||
_ram_end = ORIGIN(RAM) + LENGTH(RAM);
|
||||
_heap_start = _ebss; /* heap starts just after statically allocated memory */
|
||||
_heap_end = _sstack;
|
||||
|
||||
/* Filesystem cache in RAM, and storage in flash */
|
||||
_micropy_hw_internal_flash_storage_ram_cache_start = ORIGIN(FS_CACHE);
|
||||
_micropy_hw_internal_flash_storage_ram_cache_end = ORIGIN(FS_CACHE) + LENGTH(FS_CACHE);
|
||||
_micropy_hw_internal_flash_storage_start = ORIGIN(FLASH_FS);
|
||||
_micropy_hw_internal_flash_storage_end = ORIGIN(FLASH_FS) + LENGTH(FLASH_FS);
|
||||
|
@ -7,9 +7,10 @@ MEMORY
|
||||
{
|
||||
FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 512K /* entire flash */
|
||||
FLASH_ISR (rx) : ORIGIN = 0x08000000, LENGTH = 16K /* sector 0 */
|
||||
FLASH_FS (rx) : ORIGIN = 0x08004000, LENGTH = 112K /* sectors 1,2,3 are 16K, 4 is 64K */
|
||||
FLASH_FS (rx) : ORIGIN = 0x08004000, LENGTH = 64K /* sectors 1,2,3,4: 16k+16k+16k+16k(of 64k)=64k */
|
||||
FLASH_TEXT (rx) : ORIGIN = 0x08020000, LENGTH = 384K /* sectors 5,6,7 are 128K */
|
||||
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 96K
|
||||
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 80K
|
||||
FS_CACHE (xrw) : ORIGIN = 0x20014000, LENGTH = 16K
|
||||
}
|
||||
|
||||
/* produce a link error if there is not this amount of RAM for these sections */
|
||||
@ -26,3 +27,9 @@ _ram_start = ORIGIN(RAM);
|
||||
_ram_end = ORIGIN(RAM) + LENGTH(RAM);
|
||||
_heap_start = _ebss; /* heap starts just after statically allocated memory */
|
||||
_heap_end = _sstack;
|
||||
|
||||
/* Filesystem cache in RAM, and storage in flash */
|
||||
_micropy_hw_internal_flash_storage_ram_cache_start = ORIGIN(FS_CACHE);
|
||||
_micropy_hw_internal_flash_storage_ram_cache_end = ORIGIN(FS_CACHE) + LENGTH(FS_CACHE);
|
||||
_micropy_hw_internal_flash_storage_start = ORIGIN(FLASH_FS);
|
||||
_micropy_hw_internal_flash_storage_end = ORIGIN(FLASH_FS) + LENGTH(FLASH_FS);
|
||||
|
@ -27,3 +27,9 @@ _ram_start = ORIGIN(RAM);
|
||||
_ram_end = ORIGIN(RAM) + LENGTH(RAM);
|
||||
_heap_start = _ebss; /* heap starts just after statically allocated memory */
|
||||
_heap_end = _sstack;
|
||||
|
||||
/* Filesystem cache in RAM, and storage in flash */
|
||||
_micropy_hw_internal_flash_storage_ram_cache_start = ORIGIN(CCMRAM);
|
||||
_micropy_hw_internal_flash_storage_ram_cache_end = ORIGIN(CCMRAM) + LENGTH(CCMRAM);
|
||||
_micropy_hw_internal_flash_storage_start = ORIGIN(FLASH_FS);
|
||||
_micropy_hw_internal_flash_storage_end = ORIGIN(FLASH_FS) + LENGTH(FLASH_FS);
|
||||
|
@ -7,9 +7,10 @@ MEMORY
|
||||
{
|
||||
FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 512K /* entire flash */
|
||||
FLASH_ISR (rx) : ORIGIN = 0x08000000, LENGTH = 16K /* sector 0 */
|
||||
FLASH_FS (rx) : ORIGIN = 0x08004000, LENGTH = 112K /* sectors 1,2,3 are 16K, 4 is 64K */
|
||||
FLASH_FS (rx) : ORIGIN = 0x08004000, LENGTH = 64K /* sectors 1,2,3,4: 16k+16k+16k+16k(of 64k)=64k */
|
||||
FLASH_TEXT (rx) : ORIGIN = 0x08020000, LENGTH = 384K /* sectors 5,6,7 are 128K */
|
||||
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 128K
|
||||
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 112K
|
||||
FS_CACHE (xrw) : ORIGIN = 0x2001c000, LENGTH = 16K
|
||||
}
|
||||
|
||||
/* produce a link error if there is not this amount of RAM for these sections */
|
||||
@ -26,3 +27,9 @@ _ram_start = ORIGIN(RAM);
|
||||
_ram_end = ORIGIN(RAM) + LENGTH(RAM);
|
||||
_heap_start = _ebss; /* heap starts just after statically allocated memory */
|
||||
_heap_end = _sstack;
|
||||
|
||||
/* Filesystem cache in RAM, and storage in flash */
|
||||
_micropy_hw_internal_flash_storage_ram_cache_start = ORIGIN(FS_CACHE);
|
||||
_micropy_hw_internal_flash_storage_ram_cache_end = ORIGIN(FS_CACHE) + LENGTH(FS_CACHE);
|
||||
_micropy_hw_internal_flash_storage_start = ORIGIN(FLASH_FS);
|
||||
_micropy_hw_internal_flash_storage_end = ORIGIN(FLASH_FS) + LENGTH(FLASH_FS);
|
||||
|
@ -7,9 +7,10 @@ MEMORY
|
||||
{
|
||||
FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 1024K /* entire flash */
|
||||
FLASH_ISR (rx) : ORIGIN = 0x08000000, LENGTH = 16K /* sector 0 */
|
||||
FLASH_FS (rx) : ORIGIN = 0x08004000, LENGTH = 112K /* sectors 1,2,3 are 16K, 4 is 64K */
|
||||
FLASH_FS (rx) : ORIGIN = 0x08004000, LENGTH = 64K /* sectors 1,2,3,4: 16k+16k+16k+16k(of 64k)=64k */
|
||||
FLASH_TEXT (rx) : ORIGIN = 0x08020000, LENGTH = 896K /* sectors 5,6,7,8,9,10,11 are 128K */
|
||||
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 256K
|
||||
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 240K
|
||||
FS_CACHE (xrw) : ORIGIN = 0x2003c000, LENGTH = 16K
|
||||
}
|
||||
|
||||
/* produce a link error if there is not this amount of RAM for these sections */
|
||||
@ -26,3 +27,9 @@ _ram_start = ORIGIN(RAM);
|
||||
_ram_end = ORIGIN(RAM) + LENGTH(RAM);
|
||||
_heap_start = _ebss; /* heap starts just after statically allocated memory */
|
||||
_heap_end = _sstack;
|
||||
|
||||
/* Filesystem cache in RAM, and storage in flash */
|
||||
_micropy_hw_internal_flash_storage_ram_cache_start = ORIGIN(FS_CACHE);
|
||||
_micropy_hw_internal_flash_storage_ram_cache_end = ORIGIN(FS_CACHE) + LENGTH(FS_CACHE);
|
||||
_micropy_hw_internal_flash_storage_start = ORIGIN(FLASH_FS);
|
||||
_micropy_hw_internal_flash_storage_end = ORIGIN(FLASH_FS) + LENGTH(FLASH_FS);
|
||||
|
@ -9,6 +9,7 @@ MEMORY
|
||||
FLASH_ISR (rx) : ORIGIN = 0x08000000, LENGTH = 16K /* sector 0, 16 KiB */
|
||||
FLASH_FS (rx) : ORIGIN = 0x08004000, LENGTH = 112K /* sectors 1-4: 3*16K+64K */
|
||||
FLASH_TEXT (rx) : ORIGIN = 0x08020000, LENGTH = 896K /* sectors 5-11 are 128K */
|
||||
CCMRAM (xrw) : ORIGIN = 0x10000000, LENGTH = 64K
|
||||
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 192K
|
||||
}
|
||||
|
||||
@ -26,3 +27,9 @@ _ram_start = ORIGIN(RAM);
|
||||
_ram_end = ORIGIN(RAM) + LENGTH(RAM);
|
||||
_heap_start = _ebss; /* heap starts just after statically allocated memory */
|
||||
_heap_end = _sstack;
|
||||
|
||||
/* Filesystem cache in RAM, and storage in flash */
|
||||
_micropy_hw_internal_flash_storage_ram_cache_start = ORIGIN(CCMRAM);
|
||||
_micropy_hw_internal_flash_storage_ram_cache_end = ORIGIN(CCMRAM) + LENGTH(CCMRAM);
|
||||
_micropy_hw_internal_flash_storage_start = ORIGIN(FLASH_FS);
|
||||
_micropy_hw_internal_flash_storage_end = ORIGIN(FLASH_FS) + LENGTH(FLASH_FS);
|
||||
|
@ -9,6 +9,7 @@ MEMORY
|
||||
FLASH_ISR (rx) : ORIGIN = 0x08000000, LENGTH = 16K /* sector 0, 16 KiB */
|
||||
FLASH_FS (rx) : ORIGIN = 0x08004000, LENGTH = 112K /* sectors 1-4: 3*16K+64K */
|
||||
FLASH_TEXT (rx) : ORIGIN = 0x08020000, LENGTH = 896K /* sectors 5-11 are 128K */
|
||||
CCMRAM (xrw) : ORIGIN = 0x10000000, LENGTH = 64K
|
||||
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 192K
|
||||
SDRAM(xrw) : ORIGIN = 0xC0000000, LENGTH = 8192K
|
||||
}
|
||||
@ -27,3 +28,9 @@ _ram_start = ORIGIN(RAM);
|
||||
_ram_end = ORIGIN(RAM) + LENGTH(RAM);
|
||||
_heap_start = _ebss; /* heap starts just after statically allocated memory */
|
||||
_heap_end = _sstack;
|
||||
|
||||
/* Filesystem cache in RAM, and storage in flash */
|
||||
_micropy_hw_internal_flash_storage_ram_cache_start = ORIGIN(CCMRAM);
|
||||
_micropy_hw_internal_flash_storage_ram_cache_end = ORIGIN(CCMRAM) + LENGTH(CCMRAM);
|
||||
_micropy_hw_internal_flash_storage_start = ORIGIN(FLASH_FS);
|
||||
_micropy_hw_internal_flash_storage_end = ORIGIN(FLASH_FS) + LENGTH(FLASH_FS);
|
||||
|
@ -27,3 +27,9 @@ _ram_start = ORIGIN(RAM);
|
||||
_ram_end = ORIGIN(RAM) + LENGTH(RAM);
|
||||
_heap_start = _ebss; /* heap starts just after statically allocated memory */
|
||||
_heap_end = _sstack;
|
||||
|
||||
/* Filesystem cache in RAM, and storage in flash */
|
||||
_micropy_hw_internal_flash_storage_ram_cache_start = ORIGIN(DTCM);
|
||||
_micropy_hw_internal_flash_storage_ram_cache_end = ORIGIN(DTCM) + LENGTH(DTCM);
|
||||
_micropy_hw_internal_flash_storage_start = ORIGIN(FLASH_FS);
|
||||
_micropy_hw_internal_flash_storage_end = ORIGIN(FLASH_FS) + LENGTH(FLASH_FS);
|
||||
|
@ -27,3 +27,9 @@ _ram_start = ORIGIN(RAM);
|
||||
_ram_end = ORIGIN(RAM) + LENGTH(RAM);
|
||||
_heap_start = _ebss; /* heap starts just after statically allocated memory */
|
||||
_heap_end = _sstack;
|
||||
|
||||
/* Filesystem cache in RAM, and storage in flash */
|
||||
_micropy_hw_internal_flash_storage_ram_cache_start = ORIGIN(DTCM);
|
||||
_micropy_hw_internal_flash_storage_ram_cache_end = ORIGIN(DTCM) + LENGTH(DTCM);
|
||||
_micropy_hw_internal_flash_storage_start = ORIGIN(FLASH_FS);
|
||||
_micropy_hw_internal_flash_storage_end = ORIGIN(FLASH_FS) + LENGTH(FLASH_FS);
|
||||
|
@ -28,3 +28,9 @@ _ram_start = ORIGIN(RAM);
|
||||
_ram_end = ORIGIN(RAM) + LENGTH(RAM);
|
||||
_heap_start = _ebss; /* heap starts just after statically allocated memory */
|
||||
_heap_end = _sstack;
|
||||
|
||||
/* Filesystem cache in RAM, and storage in flash */
|
||||
_micropy_hw_internal_flash_storage_ram_cache_start = ORIGIN(DTCM);
|
||||
_micropy_hw_internal_flash_storage_ram_cache_end = ORIGIN(DTCM) + LENGTH(DTCM);
|
||||
_micropy_hw_internal_flash_storage_start = ORIGIN(FLASH_FS);
|
||||
_micropy_hw_internal_flash_storage_end = ORIGIN(FLASH_FS) + LENGTH(FLASH_FS);
|
||||
|
@ -27,3 +27,9 @@ _ram_start = ORIGIN(RAM);
|
||||
_ram_end = ORIGIN(RAM) + LENGTH(RAM);
|
||||
_heap_start = _ebss; /* heap starts just after statically allocated memory */
|
||||
_heap_end = _sstack;
|
||||
|
||||
/* Filesystem cache in RAM, and storage in flash */
|
||||
_micropy_hw_internal_flash_storage_ram_cache_start = ORIGIN(DTCM);
|
||||
_micropy_hw_internal_flash_storage_ram_cache_end = ORIGIN(DTCM) + LENGTH(DTCM);
|
||||
_micropy_hw_internal_flash_storage_start = ORIGIN(FLASH_FS);
|
||||
_micropy_hw_internal_flash_storage_end = ORIGIN(FLASH_FS) + LENGTH(FLASH_FS);
|
||||
|
@ -36,58 +36,7 @@
|
||||
|
||||
#if MICROPY_HW_ENABLE_INTERNAL_FLASH_STORAGE
|
||||
|
||||
// Here we try to automatically configure the location and size of the flash
|
||||
// pages to use for the internal storage. We also configure the location of the
|
||||
// cache used for writing.
|
||||
|
||||
#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx)
|
||||
|
||||
#define CACHE_MEM_START_ADDR (0x10000000) // CCM data RAM, 64k
|
||||
#define FLASH_SECTOR_SIZE_MAX (0x10000) // 64k max, size of CCM
|
||||
#define FLASH_MEM_SEG1_START_ADDR (0x08004000) // sector 1
|
||||
#define FLASH_MEM_SEG1_NUM_BLOCKS (224) // sectors 1,2,3,4: 16k+16k+16k+64k=112k
|
||||
|
||||
// enable this to get an extra 64k of storage (uses the last sector of the flash)
|
||||
#if 0
|
||||
#define FLASH_MEM_SEG2_START_ADDR (0x080e0000) // sector 11
|
||||
#define FLASH_MEM_SEG2_NUM_BLOCKS (128) // sector 11: 128k
|
||||
#endif
|
||||
|
||||
#elif defined(STM32F401xE) || defined(STM32F411xE) || defined(STM32F412Zx) || defined(STM32F446xx)
|
||||
|
||||
STATIC byte flash_cache_mem[0x4000] __attribute__((aligned(4))); // 16k
|
||||
#define CACHE_MEM_START_ADDR (&flash_cache_mem[0])
|
||||
#define FLASH_SECTOR_SIZE_MAX (0x4000) // 16k max due to size of cache buffer
|
||||
#define FLASH_MEM_SEG1_START_ADDR (0x08004000) // sector 1
|
||||
#define FLASH_MEM_SEG1_NUM_BLOCKS (128) // sectors 1,2,3,4: 16k+16k+16k+16k(of 64k)=64k
|
||||
|
||||
#elif defined(STM32F427xx) || defined(STM32F429xx)
|
||||
|
||||
#define CACHE_MEM_START_ADDR (0x10000000) // CCM data RAM, 64k
|
||||
#define FLASH_SECTOR_SIZE_MAX (0x10000) // 64k max, size of CCM
|
||||
#define FLASH_MEM_SEG1_START_ADDR (0x08004000) // sector 1
|
||||
#define FLASH_MEM_SEG1_NUM_BLOCKS (224) // sectors 1,2,3,4: 16k+16k+16k+64k=112k
|
||||
|
||||
#elif defined(STM32F722xx) || defined(STM32F723xx) || defined(STM32F732xx) || defined(STM32F733xx)
|
||||
|
||||
#define CACHE_MEM_START_ADDR (0x20000000) // DTCM data RAM, 64k
|
||||
#define FLASH_SECTOR_SIZE_MAX (0x10000) // 64k max
|
||||
#define FLASH_MEM_SEG1_START_ADDR (0x08004000) // sector 1
|
||||
#define FLASH_MEM_SEG1_NUM_BLOCKS (224) // sectors 1,2,3,4: 16k+16k+16k+64k=112k
|
||||
|
||||
#elif defined(STM32F746xx) || defined(STM32F765xx) || defined(STM32F767xx) || defined(STM32F769xx)
|
||||
|
||||
// The STM32F746 doesn't really have CCRAM, so we use the 64K DTCM for this.
|
||||
|
||||
#define CACHE_MEM_START_ADDR (0x20000000) // DTCM data RAM, 64k
|
||||
#define FLASH_SECTOR_SIZE_MAX (0x08000) // 32k max
|
||||
#define FLASH_MEM_SEG1_START_ADDR (0x08008000) // sector 1
|
||||
#define FLASH_MEM_SEG1_NUM_BLOCKS (192) // sectors 1,2,3: 32k+32k+32=96k
|
||||
|
||||
#else
|
||||
|
||||
// Generic configuration where the linker script specifies flash storage and RAM cache locations.
|
||||
|
||||
// The linker script specifies flash storage and RAM cache locations.
|
||||
extern uint8_t _micropy_hw_internal_flash_storage_start;
|
||||
extern uint8_t _micropy_hw_internal_flash_storage_end;
|
||||
extern uint8_t _micropy_hw_internal_flash_storage2_start;
|
||||
@ -111,8 +60,6 @@ extern uint8_t _micropy_hw_internal_flash_storage_ram_cache_end[];
|
||||
((&_micropy_hw_internal_flash_storage2_end - &_micropy_hw_internal_flash_storage2_start) / 512)
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
#if !defined(FLASH_MEM_SEG2_START_ADDR)
|
||||
#define FLASH_MEM_SEG2_NUM_BLOCKS (0) // no second segment
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user