Hi everyone,
I'm encountering an issue with the STM32H747 dual-core MCU during the transition from bootloader to application. Here's a summary of the setup and observed behavior:
Setup:
- Bootloader (CM7 core): When the BCM4 option byte is enabled, the CM4 core starts as expected.
- Application (CM7 core): After the bootloader jumps to the CM7 application, the CM4 core stops responding.
What We have Tried :
- Manual CM4 Enable in Application
- Disabled CM4 in option bytes.
- Attempted to enable CM4 manually in the CM7 application:
SYSCFG->UR1 = (1 << 0); // Set BCM4 = 1
RCC->GCR |= (1 << 3); // Set BOOT_C2 = 1
- Result: System hangs. Recovery requires setting BOOT pin = 1, flash erase, and reprogramming. The issue seems to be with SYSCFG->UR1 = (1 << 0)
2. Option Byte Update via Flash APIManual CM4 Enable in Application
HALFLASHUnlock();
HALFLASHOBUnlock();
HALSYSCFGEnableCM4BOOT();
HALFLASHOBLaunch();
HALFLASHOBLock();
HALFLASH_Lock();
- Register values after execution:
- RCC_CR: 0xf07c025
- RCC_GCR: 0x8
- SYSCFG_UR1: 0x10001
- Result: No change in behavior.
3. Core Hold/Release
- Used HAL_PWREx_HoldCore() in bootloader and HAL_PWREx_ReleaseCore() in application.
- Result: CM4 still does not resume execution.
- Is it necessary to reinitialize or restart CM4 from the CM7 application, even if it was already running during the bootloader?
- Could the CM7 application be overwriting shared memory or stack used by CM4, causing it to crash?
- What is the recommended method to preserve CM4 execution across a jump from bootloader to application?
- Are there any known errata or limitations related to dual-core coordination during bootloader transitions on STM32H747?
Any guidance, working examples, or insights from those who’ve implemented dual-core bootloaders on STM32H747 would be greatly appreciated!
Regards,
Rahul