We are migrating from a STM32F42xx processor to a STM32F77xx. As we have a hardware design already done and we want to increase the processor resources, we decided to upgrade our processor to another one with 100% pins compatible. However, the way that our F4 embedded bootloader behaves differently than our new F7.
Our hardware design has a switch connected to BOOT0 which enables the embedded bootloader and we can update the firmware through serial. It works for our F4 processor. Through serial we can update, change the configuration from single bank to dual bank by the option bytes and we can debug with JLINK both banks. Now it is the point, we want to do the same thing with the F7 processor.
Reading AN2606 document I can see that the internal boot is different (Bootloader V9.x), and it doesn't respect the BOOT0 before everything. Besides that, using the internal bootloader I couldn't change the nDBANK and nDBOOT to change between dual bank and single bank as I could do with Option Bytes on F4.
Looking at the chart flow of bootloader V9.x, I understand that since it is a single bank and the protection level 2 is disabled, it always falls in the embedded bootloader. If we enable the protection level 2 it will never run the bootloader again until we disable this protection again, is it right?
My real questions are:
1. We want is enable the bootloader using our switch (BOOT0) with dual bank and single bank for F7 as we have on F4. Is this possible using bootloader V9.x?
2. We want to change the bank configuration (nDBANK = nDBOOT = 0) using the embedded UART bootloader, is this possible?
3. Why when I try to read the nDBANK and nDBOOT (Flash registers) using the embedded bootloader it gives to me NACK?
4. Can we update the firmware through serial a single bank at any time?
5. Is there any difference a jump from bootloader to the main program for single bank and dual bank? When I use nDBANK = nDBOOT = 0, I cannot jump to the main application.
6. When Dual boot is enabled, if I set BOOT_ADD0 (BOOT0 = 0) to 0xFFFF (Invalid memory) will the embedded bootloader be called?