cancel
Showing results for 
Search instead for 
Did you mean: 

How do I jump from application code to bootloader without toggling the BOOT0 pin on STM32H745?

Michael98006
Associate III

I followed this article by @Khouloud GARSI​ and was unable to get the function to jump to the bootloader working. The application seems to freeze after I execute the function given in the article and the bootloader doesn't ACK my messages until I reset the MCU with BOOT0 line pulled high (so I know I can talk to the bootloader in principle - I just can't jump to it programmatically).

Also, I don't understand the claim in that article that the bootloader starts at address 0x1FF09800 when the documentation says it starts at 0x1FFF0000 (see AN2606). In any case, I tried jumping to 0x1FFF0000 and got a hardfault, so 0x1FFF0000 seems like the wrong address.

We're trying to automate the process of firmware updates where we have an external control board talking to the STM32H745 MCU and allowing us to do OTA firmware updates, but the BOOT0 line is not connected to the control board. We built a custom board that we don't want to change, so if we have to toggle the BOOT0 line programmatically, it's going to require some really annoying rework we'd rather not do.

Any help with this issue would be greatly appreciated!

14 REPLIES 14

It's in AN2606.

0693W00000Kb3XgQAJ.png

If you feel a post has answered your question, please click "Accept as Solution".

Thank you very much! Not sure how I missed it.

I can open another topic, but I can't seem to get into the bootloader on reset using pattern 8. BOOT0 is pulled low and with STM32CubeProgrammer I set BOOT_ADD0 to 0x0040.

0693W00000KbAYRQA3.png0693W00000KbAa8QAF.png0693W00000KbAVmQAN.png

A new topic would be appropriate.
If you feel a post has answered your question, please click "Accept as Solution".

@Khouloud GARSI​ 

Please could you explain, how can the base address of system memory be 0x1FFF0000 and entry point of the bootloader be 0x1FF09800, shouldn't the entry point of the bootloader be in the system memory range? Isn't base address of system memory supposed to be 0x1FF0 0000? Reference manual RM0468 for STM32H72/STM32H73 (Table 6 in section 2.3.2) also suggests that this is the base address (but there is for a change specified wrong end memory of the range - 0x1FEFFFFF, which is one byte lower than the supposed start address).

Hi @heveskar ,

You are absolutely right, the system memory address is wrong in the revision of AN2606 that is shown in the previous reply. In AN2606 revision 62 page 269, section 53.1, we can see the same table, with the corrected address:

 


System memory - 122 Kbytes, starting from address 0x1FF00000 contain the bootloader firmware. The bootloader start address is 0x1FF09800

For anyone landing here, I recommend the following article, where we can see a working bootloader jump code that works in almost all STM32 chips. The exceptions are the chips with "empty check mechanism".

 

Regards.