2026-02-03 6:59 AM - edited 2026-02-03 7:59 AM
Hey,
I am using STM32H750IBT6 with MT25QL512ABB8ESF-0SIT QSPI flash IC for external memory and IS42S32400J-6TLI as SDRAM, on a custom PCB with an LCD screen. Using TouchGFX.
QSPI pinout is as follows:
I've edited the FLASH_Id script - added as a .c file as an attachment.
I would prefer to not use a bootloader, but if that is the only way or quickest way to get this working then please let me know. I have looked at using external loaders but as the pin out of my QSPI is slight different, external loaders will not be compatible.
My code compiles but it does not flash:
Under 'ASSETS_FLASH', ExtFlashSection does appear as expected after loading images onto TouchGFX.
If you have any suggestions why I can not flash the external QSPI flash IC, please let me know.
Additionally, within STM32CubeProgrammer I can connect to the MCU. I can successfully mass erase the flash too.
Thank you for any assistance in advance!
Solved! Go to Solution.
2026-02-17 4:24 AM
I ended up solving this using the STM32H743 with bigger flash and correctly setting up the SDRAM as the framebuffer.
2026-02-03 12:11 PM - edited 2026-02-03 12:13 PM
Your flash is not 512MB big, it is 512 M bits = 64 MBytes. This is likely the reason why the ext. flash loader failed.
The SDRAM is 128 M bits = 16 M bytes, not 128M.
The execution always starts in the internal flash at 0x08000000, so you can think of the startup code as of bootloader, and it is necessary to activate the external memories before the app can run.
TouchGFX has many examples, please have a look.
2026-02-03 12:45 PM - edited 2026-02-17 11:31 PM
I suggest to start from here:
This gives you an impression of how it works and whether you want XIP or Load&Run. Having done and struggled with custom HW ExtMemLoader I recall that example codes, CubeMX generated project and documents had small inconsistencies which left me wonder which way is correct. After finding those and sorting out it got working quite well. Bad thing is that you cannot debug ExtMemLoader in a traditional way. I used temporary return error codes to get confirmation that code reached some point or to see some value.
One more thing to consider - Flash chips have standard JEDEC commands and if pins/peripherals match and memory size is greater or equal, then you may be lucky and can re-use some existing loader.
But bootloader is still needed to memory map your external Flash or copy to (SD)RAM and run.
---
Edit: The link does not apply to the STM32H750 series.
2026-02-04 12:27 AM - edited 2026-02-04 12:32 AM
Thank you for the response. That makes sense after looking at a TouchGFX demo I got working with a STM32H750B-DK board. Which uses two of the external flash ICs I have used.
To clarify, the bootloader is needed to map the external flash. Would I need to assign the internal flash in the flash linker?
After correcting the flash and SDRAM sizes, it still won't program. Even after changing the MCU permissions for memory protection. So to me that clarifies that an external bootloader is needed?
2026-02-04 12:33 AM
Thank you for sending the link. I have not come across it when i was tackling this.
Will let you know how I go.
2026-02-04 3:12 AM - edited 2026-02-04 3:14 AM
I do not get 'Boot Project', 'Appli Project', and 'ExtMemLoader Project' under project structure when selecting STM32H750IBT6 as my MCU.
This is what I see with a blank project and also with importing the IOC into STM32CubeMX, after selecting STM32H750IBT6.
'Boot Project', 'Appli Project', and 'ExtMemLoader Project' do appear when selecting STM32H7S7L8H6H.
Please advise me further, thank you.
Should I be following this article instead? https://community.st.com/t5/stm32-mcus/how-to-jump-to-system-bootloader-from-application-code-on-stm32/tac-p/568644/highlight/true#M475
2026-02-04 3:20 AM - edited 2026-02-04 3:21 AM
It looks like you need SDMMC or XSPI available to access the middleware needed (from looking at STM32H7S7L8H6H). I do not believe this method, described in https://wiki.st.com/stm32mcu/wiki/Getting_started_with_External_memory_Manager_and_External_memory_loader#STM32CubeMX_FlashLess_Application_Configuration, is compatible with STM32H750IBT6?
2026-02-04 6:23 AM - edited 2026-02-04 6:25 AM
Following this video
https://www.youtube.com/watch?v=ELMK35I86QE
He uses an external loader, which as I used an alternate pin function, means none of the external loads will work for me.
Any examples to create an STM32 Bootloader and what to modify within the flash linker file?
2026-02-06 11:42 AM - edited 2026-02-06 11:57 AM
Hi @AEng7 , STM32H750 belongs to the "old" family of STM32H7. Its closest relative is STM32H753 (and STM32H743) which has a simple QSPI only. It has very small internal flash similar to newer H7R/S, but it wasn't called "boot flash" then and examples and tools for H7R/S do not support it. Ext. loaders and "drivers" for STM32H753/743 should help.
2026-02-17 4:24 AM
I ended up solving this using the STM32H743 with bigger flash and correctly setting up the SDRAM as the framebuffer.