Skip to main content
Associate
October 7, 2025
Question

Flash failures with STM32Progammer_CLI (STM32H7S78-DK, NUCLEO-H7S3L8)

  • October 7, 2025
  • 0 replies
  • 507 views

Last week we ran into issues flashing our custom boards (STM32H7S3L8H6) with the STM32Progammer_CLI. Originally we were using the version packaged with CubeCLT 1.18.0 (STM32CubeProgrammer v2.19.0).

 

I noticed that ~7% of flashes failed flash verification after a "successful" flash. The errors were always grouped within a small region of addresses, and this region stayed the same until a new .elf file was compiled. Using CubeProgrammer GUI i was able to validate that those memory regions were in-fact invalid.

 

For example, here is one of the test runs on our custom board:

=== Final Statistics ===
Total Flashes: 624
Successful: 580
Failed: 44
Success Rate: 92.95%

Failed Addresses (failure count):
 0x080065C8: 12
 0x080065C9: 7
 0x080065CE: 6
 0x080065CF: 5
 0x080065CD: 5
 0x080065CA: 4
 0x080065CC: 3
 0x080065CB: 2

 As you can see by the addresses, this was flashing the bootloader (in internal flash).

The command used to flash for all versions was

STM32_Programmer_CLI -vb 3 --connect port=swd --download "$bootloader_file" --verify

See full debug flash log below:

 -------------------------------------------------------------------
 STM32CubeProgrammer v2.19.0 
 -------------------------------------------------------------------

ST-LINK SN : 003F004B3133511037363734
ST-LINK FW : V3J15M7
Board : STLINK-V3MINIE
Voltage : 1.81V
Connection to AP 0 requested and failed, Connection established with AP 1

SWD freq : 8000 KHz
Connect mode: Normal
Reset mode : Software reset
Device ID : 0x485
Revision ID : Rev B
Reading data...
r ap 1 @0x5200281C 0x00000004 bytes Data 0x00300002
Database: Config 0 is active.
flash loader /opt/st/stm32cubeclt_1.18.0/STM32CubeProgrammer/bin/FlashLoader/0x485.stldr is loaded
Reading data...
r ap 1 @0x5200281C 0x00000004 bytes Data 0x00300002
Database: Config 0 is active.
Device name : STM32H7RSxx
Reading data...
r ap 1 @0x08FFF80C 0x00000004 bytes Data 0x000CFFFF
w ap 1 @0x52002028 0x00000004 bytes Data 0x02000000
w ap 1 @0x52002028 0x00000004 bytes Data 0x04000000
Flash size : 64 KBytes (default)
Device type : MCU
Device CPU : Cortex-M7
BL Version : 0xE4

Opening and parsing file: bootloader.elf


Memory Programming ...
 File : bootloader.elf
 Size : 57.96 KB 
 Address : 0x08000000 


Erasing Segment <0> Address <0x08000000> Size <59360>Bytes

Erasing memory corresponding to sector 0:
r ap 1 @0x40022040 0x00000004 bytes Data 0x00000000
Memory Erase via FlashLoader!
Memory erase...
halt ap 1 
w ap 1 reg 15 PC (0x20000000) 
w ap 1 reg 17 MSP (0x20000500) 
w ap 1 reg 16 xPSR (0x01000000) 
w ap 1 @0x20000B40 : 0x00000200 bytes, Data 0x00000000...
w ap 1 @0x20000000 : 0x00000004 bytes, Data 0x0000BE00...
w ap 1 @0x20000004 : 0x00000718 bytes, Data 0x8F4FF3BF...
Init flashloader...
halt ap 1 
w ap 1 reg 0 R0 0x00000001
w ap 1 reg 1 R1 0x00000000
w ap 1 reg 2 R2 0x00000000
w ap 1 reg 3 R3 0x00000000
w ap 1 reg 4 R4 0x00000000
w ap 1 reg 5 R5 0x00000000
w ap 1 reg 6 R6 0x00000000
w ap 1 reg 7 R7 0x00000000
w ap 1 reg 8 R8 0x00000000
w ap 1 reg 9 R9 0x00000000
w ap 1 reg 10 R10 0x00000000
w ap 1 reg 11 R11 0x00000000
w ap 1 reg 12 R12 0x00000000
w ap 1 reg 13 SP 0x00000000
w ap 1 reg 14 LR 0x20000001
w ap 1 reg 15 PC 0x2000000B
w ap 1 reg 16 xPSR 0x01000000
w ap 1 reg 17 MSP 0x20000B18
w ap 1 reg 18 PSP 0x00000000
run ap 1 
halt ap 1 
r ap 1 reg 0 R0 0x00000001
Loader mass erase...
w ap 1 reg 0 R0 0x00000000
w ap 1 reg 1 R1 0x00000000
w ap 1 reg 2 R2 0x00000000
w ap 1 reg 3 R3 0x00000000
w ap 1 reg 4 R4 0x00000000
w ap 1 reg 5 R5 0x00000000
w ap 1 reg 6 R6 0x00000000
w ap 1 reg 7 R7 0x00000000
w ap 1 reg 8 R8 0x00000000
w ap 1 reg 9 R9 0x00000000
w ap 1 reg 10 R10 0x00000000
w ap 1 reg 11 R11 0x00000000
w ap 1 reg 12 R12 0x00000000
w ap 1 reg 13 SP 0x00000000
w ap 1 reg 14 LR 0x20000001
w ap 1 reg 15 PC 0x200002BD
w ap 1 reg 16 xPSR 0x01000000
w ap 1 reg 17 MSP 0x20000B18
w ap 1 reg 18 PSP 0x00000000
run ap 1 
halt ap 1 
r ap 1 reg 0 R0 0x00000001
erase: 0115ms
Download in Progress:
 Size : 59360 Bytes
 Address : 0x08000000 


Buffer program...
halt ap 1 
w ap 1 reg 15 PC (0x20000000) 
w ap 1 reg 17 MSP (0x20000500) 
w ap 1 reg 16 xPSR (0x01000000) 
w ap 1 @0x20000B40 : 0x00000200 bytes, Data 0x00000000...
w ap 1 @0x20000000 : 0x00000004 bytes, Data 0x0000BE00...
w ap 1 @0x20000004 : 0x00000718 bytes, Data 0x8F4FF3BF...
Loader write range...
w ap 1 @0x20000B40 : 0x000073F0 bytes, Data 0x20010000...
W B1 in RAM @0x20000B40 size 0x000073F0 : 0142ms
Init flashloader...
halt ap 1 
w ap 1 reg 0 R0 0x00000001
w ap 1 reg 1 R1 0x00000000
w ap 1 reg 2 R2 0x00000000
w ap 1 reg 3 R3 0x00000000
w ap 1 reg 4 R4 0x00000000
w ap 1 reg 5 R5 0x00000000
w ap 1 reg 6 R6 0x00000000
w ap 1 reg 7 R7 0x00000000
w ap 1 reg 8 R8 0x00000000
w ap 1 reg 9 R9 0x00000000
w ap 1 reg 10 R10 0x00000000
w ap 1 reg 11 R11 0x00000000
w ap 1 reg 12 R12 0x00000000
w ap 1 reg 13 SP 0x00000000
w ap 1 reg 14 LR 0x20000001
w ap 1 reg 15 PC 0x2000000B
w ap 1 reg 16 xPSR 0x01000000
w ap 1 reg 17 MSP 0x20000B18
w ap 1 reg 18 PSP 0x00000000
run ap 1 
halt ap 1 
r ap 1 reg 0 R0 0x00000001
w ap 1 reg 0 R0 0x08000000
w ap 1 reg 1 R1 0x000073F0
w ap 1 reg 2 R2 0x20000B40
w ap 1 reg 3 R3 0x00000000
w ap 1 reg 4 R4 0x00000000
w ap 1 reg 5 R5 0x00000000
w ap 1 reg 6 R6 0x00000000
w ap 1 reg 7 R7 0x00000000
w ap 1 reg 8 R8 0x00000000
w ap 1 reg 9 R9 0x00000000
w ap 1 reg 10 R10 0x00000000
w ap 1 reg 11 R11 0x00000000
w ap 1 reg 12 R12 0x00000000
w ap 1 reg 13 SP 0x00000000
w ap 1 reg 14 LR 0x20000001
w ap 1 reg 15 PC 0x2000004F
w ap 1 reg 16 xPSR 0x01000000
w ap 1 reg 17 MSP 0x20000B18
w ap 1 reg 18 PSP 0x00000000
run ap 1 
w ap 1 @0x20007F30 : 0x000073F0 bytes, Data 0xF06FA0C8...
W B2 in RAM @0x20008440 size 0x000073F0: 0198ms
r ap 1 reg 0 R0 0x00000001
Wait W B1 in Flash @0x08000000 size 0x000073F0: 0002ms
w ap 1 reg 0 R0 0x080073F0
w ap 1 reg 1 R1 0x000073F0
w ap 1 reg 2 R2 0x20007F30
w ap 1 reg 3 R3 0x00000000
w ap 1 reg 4 R4 0x00000000
w ap 1 reg 5 R5 0x00000000
w ap 1 reg 6 R6 0x00000000
w ap 1 reg 7 R7 0x00000000
w ap 1 reg 8 R8 0x00000000
w ap 1 reg 9 R9 0x00000000
w ap 1 reg 10 R10 0x00000000
w ap 1 reg 11 R11 0x00000000
w ap 1 reg 12 R12 0x00000000
w ap 1 reg 13 SP 0x00000000
w ap 1 reg 14 LR 0x20000001
w ap 1 reg 15 PC 0x2000004F
w ap 1 reg 16 xPSR 0x01000000
w ap 1 reg 17 MSP 0x20000B18
w ap 1 reg 18 PSP 0x00000000
run ap 1 
r ap 1 reg 0 R0 0x00000001
Write elapsed time: 0401ms
Sector[0] downloaded successfully


File download complete
Time elapsed during download operation: 00:00:00.538



Verifying ...


Reading data...
r ap 1 @0x08000000 0x0000E7E0 bytes Data 0x20010000


Error: Data mismatch found at address 0x080073ED (byte = 0xFF instead of 0x18)


Error: Download verification failed

 

To eliminate the thought that this was an issue with our custom board, we attempted the same flash on both the STM32H7S78-DK and the NUCLEO-H7S3L8. Both of these dev kits displayed the same issue.

 

We tried updating to the new Cube CLT (v1.19.0) which gives us STM32CubeProgrammer version: 2.20.0

With this version, we saw an entirely different behavior. Flashes failed ~3% of the time, but they did not fail during validation, they actually failed to flash entirely. See debug output below:

 -------------------------------------------------------------------
 STM32CubeProgrammer v2.20.0 
 -------------------------------------------------------------------

ST-LINK SN : 003F004B3133511037363734
ST-LINK FW : V3J15M7
Board : STLINK-V3MINIE
Voltage : 1.80V
Connection to AP 0 requested and failed, Connection established with AP 1

SWD freq : 8000 KHz
Connect mode: Normal
Reset mode : Software reset
Device ID : 0x485
Revision ID : Rev B
Reading data...
r ap 1 @0x5200281C 0x00000004 bytes Data 0x00300002
Database: Config 0 is active.
flash loader /home/ubuntu/st/stm32cubeclt_1.19.0/STM32CubeProgrammer/bin/FlashLoader/0x485.stldr is loaded
Reading data...
r ap 1 @0x5200281C 0x00000004 bytes Data 0x00300002
Database: Config 0 is active.
Device name : STM32H7RSxx
Reading data...
r ap 1 @0x08FFF80C 0x00000004 bytes Data 0x000CFFFF
w ap 1 @0x52002028 0x00000004 bytes Data 0x02000000
w ap 1 @0x52002028 0x00000004 bytes Data 0x04000000
Flash size : 64 KBytes (default)
Device type : MCU
Device CPU : Cortex-M7
BL Version : 0xE4



Opening and parsing file: bootloader.elf


Memory Programming ...
 File : bootloader.elf
 Size : 57.96 KB 
 Address : 0x08000000


Erasing Segment <0> Address <0x08000000> Size <59360>Bytes
Erasing memory corresponding to segment 0:
r ap 1 @0x40022040 0x00000004 bytes Data 0x00000000
Memory Erase via FlashLoader!
Memory erase...
halt ap 1 
w ap 1 reg 15 PC (0x20000000) 
w ap 1 reg 17 MSP (0x20000500) 
w ap 1 reg 16 xPSR (0x01000000) 
w ap 1 @0x20000BA0 : 0x00000200 bytes, Data 0x00000000...
w ap 1 @0x20000000 : 0x00000004 bytes, Data 0x0000BE00...
w ap 1 @0x20000004 : 0x00000774 bytes, Data 0x8F4FF3BF...
Init flashloader...
halt ap 1 
w ap 1 reg 0 R0 0x00000001
w ap 1 reg 1 R1 0x00000000
w ap 1 reg 2 R2 0x00000000
w ap 1 reg 3 R3 0x00000000
w ap 1 reg 4 R4 0x00000000
w ap 1 reg 5 R5 0x00000000
w ap 1 reg 6 R6 0x00000000
w ap 1 reg 7 R7 0x00000000
w ap 1 reg 8 R8 0x00000000
w ap 1 reg 9 R9 0x00000000
w ap 1 reg 10 R10 0x00000000
w ap 1 reg 11 R11 0x00000000
w ap 1 reg 12 R12 0x00000000
w ap 1 reg 13 SP 0x00000000
w ap 1 reg 14 LR 0x20000001
w ap 1 reg 15 PC 0x2000000B
w ap 1 reg 16 xPSR 0x01000000
w ap 1 reg 17 MSP 0x20000B74
w ap 1 reg 18 PSP 0x00000000
run ap 1 
halt ap 1 
r ap 1 reg 0 R0 0x00000001
Loader mass erase...
w ap 1 reg 0 R0 0x00000000
w ap 1 reg 1 R1 0x00000000
w ap 1 reg 2 R2 0x00000000
w ap 1 reg 3 R3 0x00000000
w ap 1 reg 4 R4 0x00000000
w ap 1 reg 5 R5 0x00000000
w ap 1 reg 6 R6 0x00000000
w ap 1 reg 7 R7 0x00000000
w ap 1 reg 8 R8 0x00000000
w ap 1 reg 9 R9 0x00000000
w ap 1 reg 10 R10 0x00000000
w ap 1 reg 11 R11 0x00000000
w ap 1 reg 12 R12 0x00000000
w ap 1 reg 13 SP 0x00000000
w ap 1 reg 14 LR 0x20000001
w ap 1 reg 15 PC 0x200002D5
w ap 1 reg 16 xPSR 0x01000000
w ap 1 reg 17 MSP 0x20000B74
w ap 1 reg 18 PSP 0x00000000
run ap 1 
halt ap 1 
r ap 1 reg 0 R0 0x00000001
erase: 0058ms
Download in Progress:
 Size : 59360 Bytes
 Address : 0x08000000


Buffer program...
halt ap 1 
w ap 1 reg 15 PC (0x20000000) 
w ap 1 reg 17 MSP (0x20000500) 
w ap 1 reg 16 xPSR (0x01000000) 
w ap 1 @0x20000BA0 : 0x00000200 bytes, Data 0x00000000...
w ap 1 @0x20000000 : 0x00000004 bytes, Data 0x0000BE00...
w ap 1 @0x20000004 : 0x00000774 bytes, Data 0x8F4FF3BF...
Loader write range...
w ap 1 @0x20000BA0 : 0x000073F0 bytes, Data 0x20010000...
W B1 in RAM @0x20000BA0 size 0x000073F0 : 0083ms
Init flashloader...
halt ap 1 
w ap 1 reg 0 R0 0x00000001
w ap 1 reg 1 R1 0x00000000
w ap 1 reg 2 R2 0x00000000
w ap 1 reg 3 R3 0x00000000
w ap 1 reg 4 R4 0x00000000
w ap 1 reg 5 R5 0x00000000
w ap 1 reg 6 R6 0x00000000
w ap 1 reg 7 R7 0x00000000
w ap 1 reg 8 R8 0x00000000
w ap 1 reg 9 R9 0x00000000
w ap 1 reg 10 R10 0x00000000
w ap 1 reg 11 R11 0x00000000
w ap 1 reg 12 R12 0x00000000
w ap 1 reg 13 SP 0x00000000
w ap 1 reg 14 LR 0x20000001
w ap 1 reg 15 PC 0x2000000B
w ap 1 reg 16 xPSR 0x01000000
w ap 1 reg 17 MSP 0x20000B74
w ap 1 reg 18 PSP 0x00000000
run ap 1 
halt ap 1 
r ap 1 reg 0 R0 0x00000001
w ap 1 reg 0 R0 0x08000000
w ap 1 reg 1 R1 0x000073F0
w ap 1 reg 2 R2 0x20000BA0
w ap 1 reg 3 R3 0x00000000
w ap 1 reg 4 R4 0x00000000
w ap 1 reg 5 R5 0x00000000
w ap 1 reg 6 R6 0x00000000
w ap 1 reg 7 R7 0x00000000
w ap 1 reg 8 R8 0x00000000
w ap 1 reg 9 R9 0x00000000
w ap 1 reg 10 R10 0x00000000
w ap 1 reg 11 R11 0x00000000
w ap 1 reg 12 R12 0x00000000
w ap 1 reg 13 SP 0x00000000
w ap 1 reg 14 LR 0x20000001
w ap 1 reg 15 PC 0x2000004F
w ap 1 reg 16 xPSR 0x01000000
w ap 1 reg 17 MSP 0x20000B74
w ap 1 reg 18 PSP 0x00000000
run ap 1 
w ap 1 @0x20007F90 : 0x000073F0 bytes, Data 0xF06FA0C8...
W B2 in RAM @0x200084A0 size 0x000073F0: 0110ms
r ap 1 reg 0 R0 0x00000000
halt ap 1 
w ap 1 reg 15 PC (0x20000000) 
w ap 1 reg 17 MSP (0x20000500) 
w ap 1 reg 16 xPSR (0x01000000) 
Loader write range...
w ap 1 @0x20000BA0 : 0x000073F0 bytes, Data 0x20010000...
W B1 in RAM @0x20000BA0 size 0x000073F0 : 0093ms
halt ap 1 
r ap 1 reg 0 R0 0x00000000


Error: failed to download Sector[0]
Error: failed to download the File

 

At this point we reverted back to a very old version (stm32cubeclt_1.11.1) STM32CubeProgrammer version: 2.12.0.

 

With this version, boards flashed with a 100% success rate.

 

I'm not entirely sure if this is a regression, or a known issue, but figured I would post it here to get some clarity!

 

Thanks,


Austin