NUCLEO-F439ZI System Bootloader error with UART1/UART3 - Can't get a reply.
Hello,
I am using the NUCLEO-F439ZI and would like to do a firmware updare through the System Bootloader using either UART1 or UART3, jumping to the system bootloader through user code. However, no matter what I do, I can't get the System Bootloader to reply to the activation command 0x7F
Documents used :
-AN2606 rev64 - STM32 microcontroller system memory boot mode
-AN3155 - USART protocol used in the STM32 bootloader
-RM0090 - STM32F405/415, STM32F407/417, STM32F427/437 and STM32F429/439 advanced Arm®-based 32-bit MCUs
-UM1964 - STM32 Nucleo-144 boards (MB1137)
Modifications made on the NUCLEO-F439ZI:
- Removed the 0Ohm resistor on SB5 and SB6 to cut the connection going to the Nucleo ST-LINK USART3 and make sure no interference is on the USART3 Line.
Workbench setup :
- OS : LinuxMint (ubuntu based)
- Serial : FTDI 3V3TTL USB Cable @/dev/ttyUSB0
- A cheap logic analyzer with Saleae software to look at the traces
Putting the STM32F439ZI in system bootloader through user code :
The following function is used to jump to the system bootloader from the user code
static void jump_to_sysmem(void)
{
void (*sysmem_boot_jump)(void);
__disable_irq();
HAL_RCC_DeInit();
SysTick->CTRL = 0;
SysTick->LOAD = 0;
SysTick->VAL = 0;
HAL_DeInit();
__HAL_REMAPMEMORY_SYSTEMFLASH();
sysmem_boot_jump = (void (*)(void)) (*((uint32_t *) 0x1fff0004));
__set_MSP(*(uint32_t *)0x1FFF0000);
__enable_irq();
sysmem_boot_jump();
while(1);
}
Which is called from the main function.
Issue description:
I know that the code is running correctly because I can connect to the board with the USB in DFU mode, which is one way to get into the system bootloader.
However, when trying to connect through USART1/USART3, I send the activation byte 0x7F, either through CubeProgrammer or through Cutecom, and there is never a response from the chip.

I tried through USART1 PA9/PA10 (with 100k Pull-ups, as described in AN3155), USART3 PB10/PB11 and USART3 PC10/PC11, all with the same results.

Here is the cube programmer log :
11:27:22:739 : Serial Port ttyUSB0 is successfully opened.
11:27:22:739 : Port configuration: parity = even, baudrate = 9600, data-bit = 8, stop-bit = 1.0, flow-control = off
11:27:22:739 : No Init bits value is : 0
11:27:22:739 : Sending init command:
11:27:22:739 : #byte 0x7F sent successfully to target
11:27:24:742 : Wait ends after 1 loop, dataready = 0, delay = 2002
11:27:24:742 : Timeout error occured while waiting for acknowledgement.
11:27:24:742 : No response from target received
11:27:24:742 : Retrying UART init connection...
11:27:24:742 : #byte 0x7F sent successfully to target
11:27:24:842 : Wait ends after 1 loop, dataready = 0, delay = 100
11:27:24:842 : Timeout error occured while waiting for acknowledgement.
11:27:24:842 : No response from target received
11:27:24:842 : Error: Activating device: KO. Please, verify the boot mode configuration and check the serial port configuration. Reset your device then try again...
11:27:24:848 : UART PORT CLOSE
and the UART Port configuration on CubeProgrammer :

When connecting to the chip through cube programmer, I can see that the BFB2 bit (dual bank boot) is disabled.

I am at loss on how to proceed to make this work. I searched the STM32 forums and internet for days, without success to access the UART Bootloader.
Any help would be appreciated.
Thanks
