cancel
Showing results for 
Search instead for 
Did you mean: 

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

austinb
Visitor

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

 

0 REPLIES 0