Skip to content

stm32h5 run application in external flash memory XIP #88579

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 10 commits into
base: main
Choose a base branch
from

Conversation

FRASTM
Copy link
Collaborator

@FRASTM FRASTM commented Apr 14, 2025

the stm32h5 disco kit board can run an application in external flash

Requires the #88646 which removes the warning in the DTC

With this PR it enable the memorymapped mode on the external flash memory so that XIP is possible on the external NOR octoflash

Two samples are running in XIP on the external flash

samples/application_development/code_relocation_nocopy/
samples/boards/st/hello_world_xip/ built with mcu boot mcu-tools/mcuboot#2154

Fixes #87531

This PR completes the #88051 for the stm32h5 serie

@FRASTM
Copy link
Collaborator Author

FRASTM commented Apr 14, 2025

west build -b stm32h573i_dk samples/application_development/code_relocation_nocopy/
west flash : stm32cubeprogrammer runner is taking the external loader to download into the external NOR (0x90000000)

*** Booting Zephyr OS build v4.1.0-2350-g86df576c4134 ***
Address of main function 0x80005e1
Address of function_in_ext_flash 0x90000001
Address of var_ext_sram_data 0x200000a0 (10)
Address of function_in_sram 0x20000001
Address of var_sram_data 0x200000a4 (10)
Hello World! stm32h573i_dk

@FRASTM
Copy link
Collaborator Author

FRASTM commented Apr 14, 2025

with a special sample dedicated to st boards for XiP
west build -p -b stm32h573i_dk samples/boards/st/hello_world_xip/ --sysbuild -- -DSB_CONFIG_BOOTLOADER_MCUBOOT=y

requires mcu-tools/mcuboot#2154
download with stm32cubeprogrammer GUI

  • the build/mcuboot/zephyr/zephyr.bin at internal flash address 0x8000000
  • the build/hello_world_xip/zephyr/zephyr.signed.bin at external flash address 0x90000000
*** Booting MCUboot v2.1.0-rc1-276-g540654e87167 ***
*** Using Zephyr OS build v4.1.0-2352-gb567cdd8cbfb ***
I: Starting bootloader
I: Primary image: magic=unset, swap_type=0x1, copy_done=0x3, image_ok=0x3
I: Secondary image: magic=unset, swap_type=0x1, copy_done=0x3, image_ok=0x3
I: Boot source: none
I: Image index: 0, Swap type: none
I: Bootloader chainload address offset: 0x0
I: Image version: v0.0.0
I: Jumping to the first image slot
*** Booting Zephyr OS build v4.1.0-2352-gb567cdd8cbfb ***                       
Hello World! from external flash  stm32h573i_dk                                 
--> PC at 0x9000092a    

@FRASTM FRASTM force-pushed the stm32h5_xip branch 3 times, most recently from 0eed22a to 0a25f40 Compare April 14, 2025 12:32
@FRASTM
Copy link
Collaborator Author

FRASTM commented Apr 14, 2025

Define larger partition in the external NOR flash (consequently adjusting the SECTOR size for the mcu boot)

@FRASTM FRASTM force-pushed the stm32h5_xip branch 2 times, most recently from c3998c8 to d0126b3 Compare April 14, 2025 13:47
@FRASTM
Copy link
Collaborator Author

FRASTM commented Apr 14, 2025

CI failure "invalid length for memory region EXTFLASH" given by the samples/application_development/code_relocation_nocopy/linker_arm_nocopy.ld

map giving : EXTFLASH 0x0000000090000000 0xffffffffffffffff xr

Build operation displays wrong extflash too:

Memory region         Used Size  Region Size  %age Used
        EXTFLASH:          56 B 18446744073709551615 B      0.00%

compared to

Memory region         Used Size  Region Size  %age Used
        EXTFLASH:          56 B        64 MB      0.00%

when #define EXTFLASH_SIZE (0x4000000)

It looks like the DT_INST_REG_SIZE does not exist for the st,stm32-xspi-nor compat (DT_INST_REG_ADDR exists)

--> see issue #88404

@tpambor
Copy link
Contributor

tpambor commented Apr 15, 2025

See #88392 for a fix.

@FRASTM FRASTM force-pushed the stm32h5_xip branch 3 times, most recently from 9bb0775 to 9d2579a Compare April 16, 2025 11:55
@FRASTM FRASTM force-pushed the stm32h5_xip branch 3 times, most recently from 16878f8 to 048cb76 Compare April 23, 2025 13:56
@FRASTM FRASTM added the DNM This PR should not be merged (Do Not Merge) label Apr 24, 2025
@FRASTM
Copy link
Collaborator Author

FRASTM commented Apr 24, 2025

set the DNM mabel until the #88646 is merged

@FRASTM
Copy link
Collaborator Author

FRASTM commented Apr 29, 2025

Adding the commit to retrieve the CONFIG_FLASH_BASE_ADDRESS from the DTS by the soc/st/stm32/Kconfig.defconfig

@FRASTM
Copy link
Collaborator Author

FRASTM commented May 5, 2025

set the DNM mabel until the #88051 is merged

@FRASTM FRASTM added the platform: STM32 ST Micro STM32 label May 5, 2025
This commit is retrieving the config FLASH_BASE_ADDRESS
from the XSPI node of the stm32 device dtsi <reg> property of the
"st,stm32-xspi" node. For example the CONFIG_FLASH_BASE_ADDRESS
 is 0x90000000 and application is linked for that address.
Size is given by the size property of the "st,stm32-xspi-nor" node.

Signed-off-by: Francois Ramu <[email protected]>
FRASTM added 7 commits May 5, 2025 16:14
Add the clock domain configuration for the xspi nodes
Where the DTS defines main clock and peripheral clock sel
plus a XSPIM clock

Signed-off-by: Francois Ramu <[email protected]>
Add the support of the stm32h7rs serie to the
drivers/flash/flash_stm32_xspi driver.
The stm32h7rs has no delayblock

Signed-off-by: Francois Ramu <[email protected]>
Add the definitions of the PLL2 and PLL3 outputs for the stm32H7RS mcus
and the HCLK5  which is clock source for the XSPI instance.

Signed-off-by: Francois Ramu <[email protected]>
Defines the the xspi peripheral of the stm32h7rs serie
Requires the corresponding memory area of the MPU.

Signed-off-by: Francois Ramu <[email protected]>
Add the XSPI 2 which is an octoSPI connection to a octo NOR flash
MX25UW25645GXDI00 (256 Mbits, 1.8 V, 200 MHz, DTR, rww)
on the nucleo_h7s3l8 board.

Signed-off-by: Francois Ramu <[email protected]>
Add the XSPI 2 which is an octoSPI connection to a octo NOR flash
mx66uw1g45 on the stm32h7s78_dk disco kit

Signed-off-by: Francois Ramu <[email protected]>
Do not disable the pll clock if it source the xspi and if the external
flash is executing in Place. On mcuboot reset, the code is executed
on the external flash through the xspi. It must not disable its own
clock source.

Signed-off-by: Francois Ramu <[email protected]>
@FRASTM
Copy link
Collaborator Author

FRASTM commented May 7, 2025

Adding the configuration to run
west build -p -b stm32h573i_dk samples/sysbuild/with_mcuboot/ --sysbuild
on the target board.
Use the stm32CubeProgrammer to download

  1. build/mcuboot/zephyr/zephyr.bin in internal flash at 0x8000000
  2. build/with_mcuboot/zephyr/zephyr.signed.bin in external flash at 0x90000000

west flash is possible if the stm32cubeprogrammer runner selects the external loader with the following condition CONFIG_XIP AND CONFIG_BOOTLOADER_MCUBOOT

*** Booting MCUboot v2.1.0-rc1-277-g5ba3b7962ee8 ***
*** Using Zephyr OS build v4.1.0-3467-g1fee1c88b558 ***
*** Booting Zephyr OS build v4.1.0-3467-g1fee1c88b558 ***
Address of sample 0x90000000
Hello sysbuild with mcuboot! stm32h573i_dk

FRASTM added 2 commits May 7, 2025 17:37
Add the XSPI 2 which is an octoSPI connection to a octo NOR flash
mx25lm51245 on the stm32h573i_dk disco kit
Define the partition on the 64MBytes space of the external flash
Use the STM32Cube programmer to flash with the corresponding
external loader for XiP mode.
Removing usb_device will avoid test feature for that board.

Signed-off-by: Francois Ramu <[email protected]>
Run the sample to execute in place on the external flash of the
stm32h573 disco kit.
with_boot is build and linked for the external flash
Download the mcuboot zephyr.bin in internal memory
Download the with_mcuboot zephyr.signed.bin in external memory

Signed-off-by: Francois Ramu <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area: Flash DNM This PR should not be merged (Do Not Merge) platform: STM32 ST Micro STM32
Projects
None yet
Development

Successfully merging this pull request may close these issues.

stm32h573i_dk can't boot from external flash with mcuboot
3 participants