Skip to main content
Visitor II
September 6, 2023
Question

STM32H563ZI LINKER

  • September 6, 2023
  • 3 replies
  • 5566 views

Hi,

I am working on freertos plus tcp library with STM32H563ZI, but how must I make memory otions in linker file?

like: 

RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 320K
FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 2048K
RAM1 (xrw) : ORIGIN = 0x20000000, LENGTH = 256K
RAM2 (xrw) : ORIGIN = 0x20040000, LENGTH = 64K
RAM3 (xrw) : ORIGIN = 0x20050000, LENGTH = 320K

it is wrong I know but how can I make this right ?

    This topic has been closed for replies.

    3 replies

    ST Employee
    September 6, 2023

    Hello @Recep , 

    You can check this link
    Hope It helps!

    Foued

    RecepAuthor
    Visitor II
    September 6, 2023

    thanks

    but I made it like this:

    /*
    ******************************************************************************
    **
    ** @file : LinkerScript.ld
    **
    ** @author : Auto-generated by STM32CubeIDE
    **
    ** Abstract : Linker script for NUCLEO-H563ZI Board embedding STM32H563ZITx Device from stm32h5 series
    ** 2048Kbytes FLASH
    ** 640Kbytes RAM
    **
    ** Set heap size, stack size and stack location according
    ** to application requirements.
    **
    ** Set memory bank area and size if external memory is used
    **
    ** Target : STMicroelectronics STM32
    **
    ** Distribution: The file is distributed as is, without any warranty
    ** of any kind.
    **
    ******************************************************************************
    ** @attention
    **
    ** Copyright (c) 2023 STMicroelectronics.
    ** All rights reserved.
    **
    ** This software is licensed under terms that can be found in the LICENSE file
    ** in the root directory of this software component.
    ** If no LICENSE file comes with this software, it is provided AS-IS.
    **
    ******************************************************************************
    */
    
    /* Entry Point */
    ENTRY(Reset_Handler)
    
    /* Highest address of the user mode stack */
    _estack = ORIGIN(SRAM3) + LENGTH(SRAM3); /* end of "RAM" Ram type memory */
    
    _Min_Heap_Size = 0x4000; /* required amount of heap */
    _Min_Stack_Size = 0x4000; /* required amount of stack */
    
    /* Memories definition */
    MEMORY
    {
    FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 2048K
    SRAM1 (xrw) : ORIGIN = 0x20000000, LENGTH = 256K
    SRAM2 (xrw) : ORIGIN = 0x20040000, LENGTH = 64K
    SRAM3 (xrw) : ORIGIN = 0x20050000, LENGTH = 320K
    }
    
    /* Sections */
    SECTIONS
    {
    /* The startup code into "FLASH" Rom type memory */
    .isr_vector :
    {
    . = ALIGN(4);
    KEEP(*(.isr_vector)) /* Startup code */
    . = ALIGN(4);
    } >FLASH
    
    /* The program code and other data into "FLASH" Rom type memory */
    .text :
    {
    . = ALIGN(4);
    *(.text) /* .text sections (code) */
    *(.text*) /* .text* sections (code) */
    *(.glue_7) /* glue arm to thumb code */
    *(.glue_7t) /* glue thumb to arm code */
    *(.eh_frame)
    
    KEEP (*(.init))
    KEEP (*(.fini))
    
    . = ALIGN(4);
    _etext = .; /* define a global symbols at end of code */
    } >FLASH
    
    /* Constant data into "FLASH" Rom type memory */
    .rodata :
    {
    . = ALIGN(4);
    *(.rodata) /* .rodata sections (constants, strings, etc.) */
    *(.rodata*) /* .rodata* sections (constants, strings, etc.) */
    . = ALIGN(4);
    } >FLASH
    
    .ARM.extab : {
    . = ALIGN(4);
    *(.ARM.extab* .gnu.linkonce.armextab.*)
    . = ALIGN(4);
    } >FLASH
    
    .ARM : {
    . = ALIGN(4);
    __exidx_start = .;
    *(.ARM.exidx*)
    __exidx_end = .;
    . = ALIGN(4);
    } >FLASH
    
    .preinit_array :
    {
    . = ALIGN(4);
    PROVIDE_HIDDEN (__preinit_array_start = .);
    KEEP (*(.preinit_array*))
    PROVIDE_HIDDEN (__preinit_array_end = .);
    . = ALIGN(4);
    } >FLASH
    
    .init_array :
    {
    . = ALIGN(4);
    PROVIDE_HIDDEN (__init_array_start = .);
    KEEP (*(SORT(.init_array.*)))
    KEEP (*(.init_array*))
    PROVIDE_HIDDEN (__init_array_end = .);
    . = ALIGN(4);
    } >FLASH
    
    .fini_array :
    {
    . = ALIGN(4);
    PROVIDE_HIDDEN (__fini_array_start = .);
    KEEP (*(SORT(.fini_array.*)))
    KEEP (*(.fini_array*))
    PROVIDE_HIDDEN (__fini_array_end = .);
    . = ALIGN(4);
    } >FLASH
    
    .ethernet_data :
    {
    PROVIDE_HIDDEN (__ethernet_data_start = .);
    KEEP (*(SORT(.ethernet_data.*)))
    KEEP (*(.ethernet_data*))
    PROVIDE_HIDDEN (__ethernet_data_end = .);
    } >SRAM3
    
    /* Used by the startup to initialize data */
    _sidata = LOADADDR(.data);
    
    /* Initialized data sections into "RAM" Ram type memory */
    .data :
    {
    . = ALIGN(4);
    _sdata = .; /* create a global symbol at data start */
    *(.data) /* .data sections */
    *(.data*) /* .data* sections */
    *(.RamFunc) /* .RamFunc sections */
    *(.RamFunc*) /* .RamFunc* sections */
    
    . = ALIGN(4);
    _edata = .; /* define a global symbol at data end */
    
    } >SRAM1 AT> FLASH
    
    /* Uninitialized data section into "RAM" Ram type memory */
    . = ALIGN(4);
    .bss :
    {
    /* This is used by the startup in order to initialize the .bss section */
    _sbss = .; /* define a global symbol at bss start */
    __bss_start__ = _sbss;
    *(.bss)
    *(.bss*)
    *(COMMON)
    
    . = ALIGN(4);
    _ebss = .; /* define a global symbol at bss end */
    __bss_end__ = _ebss;
    } >SRAM1
    
    /* User_heap_stack section, used to check that there is enough "RAM" Ram type memory left */
    ._user_heap_stack :
    {
    . = ALIGN(8);
    PROVIDE ( end = . );
    PROVIDE ( _end = . );
    . = . + _Min_Heap_Size;
    . = . + _Min_Stack_Size;
    . = ALIGN(8);
    } >SRAM1
    
    /* Remove information from the compiler libraries */
    /DISCARD/ :
    {
    libc.a ( * )
    libm.a ( * )
    libgcc.a ( * )
    }
    
    .ARM.attributes 0 : { *(.ARM.attributes) }
    }

    and still didn't work

    gave me this error:

    Flashing firmware to the board
    scons: *** [build/STM32H563ZI/mc] JLinkFlashException : Could not write target memory.

     

    ST Employee
    September 6, 2023

    Hi @Recep , 

    You need to modify the SRAM address as showing :
    SRAM1 : 0x0A00 0000
    SRAM1 : 0x0A04 0000
    SRAM1 : 0x0A05 0000

    Foued_KH_0-1694007883798.png
    Foued

     

    Super User
    September 10, 2023

    The eth memory in FreeRTOS+ TCP for STM32H7 is defined here.

    Documentation: https://github.com/FreeRTOS/FreeRTOS-Plus-TCP/blob/b3289a7788710b6ad1ce5f5ff92dce29f3fd4529/source/portable/NetworkInterface/STM32Hxx/readme.md?plain=1#L38

     

    They don't seem to have a separate source for STM32H5 yet.

    Explorer
    February 8, 2024

    Hi Recep,

    I'm just starting a project with ethernet on the H563ZI and am considering using lwip or FreeRTOS+TCP.

    Would you have references for the porting that you did? I see only H7 is included in the official FreeRTOS+TCP project. 

    Thanks

    RecepAuthor
    Visitor II
    February 9, 2024

    hi,

    just used  https://github.com/FreeRTOS/FreeRTOS/releases/download/202212.01/FreeRTOSv202212.01.zip

    Freertos + TCP  libraries  in this

    but  you need to change the hal h7 includes  to  h5 includes   

     

    path is like -> FreeRTOS-Plus-TCP/source/portable/Networkinterface/STM32Hxx/Networkinterface.c

    all the codes in the Networkinterface.c  almost the same  but includes

    Explorer II
    April 3, 2024

    Hi @Recep, I tried to follow your suggestion of using the files in FreeRTOS-Plus-TCP\source\portable\NetworkInterface\STM32Hxx for STM32H5 by just renaming the relevant H7 files to H5 but I have this compiler error at stm32hxx_hal_eth.h that seems to refer a define that H5 does not have (In the H7 version it is exist in stm32h743xx.h):

    Egolt1_0-1712163169926.png

    How did you resolve this?

    Thanks!