2018-05-01 01:20 PM
I recently started using the STM32CubeProgrammer for flashing MCUs via their DFU bootloader in the system memory. (After resolving the windows driver conflict with DfuSe, the lesson is: use Zadig instead of the batch file.) When using the DFU bootloader in the system memory to flash an ELF file, I get the following error log:
21:53:04 : Memory Programming ...
21:53:04 : Openeing and parsing file: E:\Workspace\DfuBoot\F4xxxGxx\DfuBoot.elf21:53:04 : File : E:\Workspace\DfuBoot\F4xxxGxx\DfuBoot.elf21:53:04 : Size : 8040 Bytes21:53:04 : Address : 0x08000000 21:53:04 : Erasing memory corresponding to segment 0:21:53:04 : Erasing internal memory sector 021:53:04 : erasing sector 0000 @: 0x08000000 done21:53:04 : Erasing memory corresponding to segment 1:21:53:04 : Error: Operation exceeds memory limits21:53:04 : Error: Failed to erase memory21:53:04 : Address: : 0x021:53:09 : Error: Start operation failedThe target MCU is an STM32F407VGT6 (Discovery board). My suspicion is that there is a bug when handling images with smaller size then a single flash sector. Why else would it try to erase sector 1, where nothing is allocated to in the image?
The USB packet log shows that the programmer
1. sets address to 0x08000000
2. erases sector at address 0x08000000
3. sets address to 0x00000000
After step 3 the bootloader enters DFU_DNLOAD_BUSY then DFU_ERROR state with error=TARGET, most likely highlighting the incorrect address.
At this point the programmer's GUI displays the error, however it keeps polling the bootloader DFU status endlessly, which I would also consider an incorrect behavior. It should send a DFU CLRSTATUS request instead, and wait for new user command.
#dfu-bootloader #stm32cube-programmer