Skip to main content
Visitor II
January 15, 2025
Solved

STM32N6 boot application >64kB from external QSPI

  • January 15, 2025
  • 1 reply
  • 1019 views

Hi,

I'm adapting the NUCLEO-N657X0-Q template "Template_FSBL_LRUN" to boot a tested application from the QSPI

Unfourtunately, as soon as the binary becomes larger than 64kB and uses a second sector, the application will not boot anymore.
I can reproduce this by adding a large printf statement to push the binary over the 64kB boundary or by changing the optimization level to either favor binary size or speed and thereby affecting the binary size.

What am I missing?

Thanks in advance for every advice!

    This topic has been closed for replies.
    Best answer by northh_sven

    Ok, so I solved it.
    In the file "/FSBL/Inc/stm32_extmem_conf.h", there is a preprocessor directive "EXTMEM_LRUN_SOURCE_SIZE" that needs to be manually adjusted.

     

    This really feels like something that should be clearly stated in the template's readme. Especially when the header of the application already contains the size of it at a fixed offset. Hence it could easily be read by the FSBL.

    1 reply

    northh_svenAuthorAnswer
    Visitor II
    January 16, 2025

    Ok, so I solved it.
    In the file "/FSBL/Inc/stm32_extmem_conf.h", there is a preprocessor directive "EXTMEM_LRUN_SOURCE_SIZE" that needs to be manually adjusted.

     

    This really feels like something that should be clearly stated in the template's readme. Especially when the header of the application already contains the size of it at a fixed offset. Hence it could easily be read by the FSBL.

    ST Employee
    January 16, 2025

    Hello @northh_sven 

    In the context of executing the Template_FSBL_LRUN example, it is the BootROM that is responsible for copying the binary that is in the external XSPI Flash, into the AXISRAM2, then the BootROM jumps to start the code at address 0x34180400 (refer to the linker file "Template_FSBL_LRUN\STM32CubeIDE\Boot\STM32N657XX_AXISRAM2_fsbl.ld").

    Consequently, you have  an AXISRAM2 memory size of 511KB.
    Indeed, I confirm that the #define EXTMEM_LRUN_SOURCE_SIZE is limiting this size to 64KB, and the user should be able to be extended it for his application.

    I hope it clarify your question?

    Best regards,

    Romain,