cancel
Showing results for 
Search instead for 
Did you mean: 

Bricked stm32F746-disco with write to Flash?

FJB2069
Associate III

After testing trying to write a byte to Flash I seemed to have bricked board.  I thought board just went out, so I bought another one, programmed it and now that board is broken too.  I commented code out, tried 3rd board and it works fine.

Here is the code I tried

 

  
uint32_t Flash_Address = 0x80FFF00;  

HAL_FLASH_Unlock();
  FLASH_Erase_Sector(11, FLASH_VOLTAGE_RANGE_2); // Use appropriate sector number and voltage range
  HAL_FLASH_Program(FLASH_TYPEPROGRAM_BYTE, Flash_Address, 0xAA);
  HAL_FLASH_Lock();

 

 

The error I get now is:

Target not halted after reset. Force halt

Failed to halt target

Target not halted

 

Error in initializing ST-LINK device.

Reason: Target not halted.

 

Error in final launch sequence:

 

Failed to execute MI command:

target remote localhost:61234

 

Error message from debugger back end:

localhost:61234: Connection timed out.

Failed to execute MI command:

target remote localhost:61234

 

Error message from debugger back end:

localhost:61234: Connection timed out.

localhost:61234: Connection timed out.

 

I tried using STLINK utility to erase. but they won't connect!

 

Did I use wrong voltage (FLASH_VOLTAGE_RANGE_2)? Not sure if the boards are truly damaged?

 

 

 

 

1 ACCEPTED SOLUTION

Accepted Solutions

You're not using a part with 24 sectors

The F746 has 8, describing 1MB

The F767 (24), and F722 (8 for 512KB) might have different array sizes.

As I recollect there are some F4 devices with 2MB, two banks of 1MB in a 16KB*4,64KB*1,128KB*7 pattern

Tips, Buy me a coffee, or three.. PayPal Venmo
Up vote any posts that you find helpful, it shows what's working..

View solution in original post

6 REPLIES 6

That doesn't make a lot of sense. Was there code in that location, or within 128KB? (0x080E0000)

It shouldn't brick the board.

Use STM32 Cube Programmer, or ST-LINK Utilities, try Connect Under Reset, try finding BOOT0 pin/pad and pulling to VDD (HIGH) and connecting that way. When connected, Mass Erase

 

BOOT0 to 3V3, short pads for R42

 

 

Tips, Buy me a coffee, or three.. PayPal Venmo
Up vote any posts that you find helpful, it shows what's working..
FJB2069
Associate III

I was able to recover boards.  Unplug USB, Jumper R42, which is BOOT0 pull up to VCC.  Connect USB, Use st-link to erase.  Unplug USB and remove jumper.  Now you can program as normal.

 

 

Yes, that is what I did.  

 

And I wrote to an address to section 7 address 0x0807FF00 without issue.

 

Here is the issue with writing sector 11:  There are only 8 sectors defined in stm32f746xx.h  

/******************************************************************************/
/*                                                                            */
/*                                    FLASH                                   */
/*                                                                            */
/******************************************************************************/
/*
* @brief FLASH Total Sectors Number
*/
#define FLASH_SECTOR_TOTAL  8

So how do you access other sectors 9-11?

 

You're probably thinking of the STM32F4, which had a different mix of different sized sectors.

"On STM32F756xx and STM32F74xx devices, a main memory block divided into 4
sectors of 32 Kbytes, 1 sector of 128 Kbytes and 3 sectors of 256 Kbytes"

Other options on banked devices would be side-to-side (double wide flash lines), or end-to-end

Tips, Buy me a coffee, or three.. PayPal Venmo
Up vote any posts that you find helpful, it shows what's working..

Am I supposed to change FLASH_SECTOR_TOTAL to 24?

in stm32f7xx_hal_flash.h

/******************************************************************************/
/*                                                                            */
/*                                    FLASH                                   */
/*                                                                            */
/******************************************************************************/
/*
* @brief FLASH Total Sectors Number
*/
#define FLASH_SECTOR_TOTAL  8

in stm32f7xx_hal_flash_ex.h

#if (FLASH_SECTOR_TOTAL == 8)
#define IS_FLASH_SECTOR(SECTOR) (((SECTOR) == FLASH_SECTOR_0)   || ((SECTOR) == FLASH_SECTOR_1)   ||\
                                 ((SECTOR) == FLASH_SECTOR_2)   || ((SECTOR) == FLASH_SECTOR_3)   ||\
                                 ((SECTOR) == FLASH_SECTOR_4)   || ((SECTOR) == FLASH_SECTOR_5)   ||\
                                 ((SECTOR) == FLASH_SECTOR_6)   || ((SECTOR) == FLASH_SECTOR_7))

#define IS_OB_WRP_SECTOR(SECTOR)  ((((SECTOR) & 0xFF00FFFFU) == 0x00000000U) && ((SECTOR) != 0x00000000U))
#endif /* FLASH_SECTOR_TOTAL == 8 */

#if (FLASH_SECTOR_TOTAL == 24)
#define IS_FLASH_SECTOR(SECTOR) (((SECTOR) == FLASH_SECTOR_0)   || ((SECTOR) == FLASH_SECTOR_1)   ||\
                                 ((SECTOR) == FLASH_SECTOR_2)   || ((SECTOR) == FLASH_SECTOR_3)   ||\
                                 ((SECTOR) == FLASH_SECTOR_4)   || ((SECTOR) == FLASH_SECTOR_5)   ||\
                                 ((SECTOR) == FLASH_SECTOR_6)   || ((SECTOR) == FLASH_SECTOR_7)   ||\
                                 ((SECTOR) == FLASH_SECTOR_8)   || ((SECTOR) == FLASH_SECTOR_9)   ||\
                                 ((SECTOR) == FLASH_SECTOR_10)  || ((SECTOR) == FLASH_SECTOR_11)  ||\
                                 ((SECTOR) == FLASH_SECTOR_12)  || ((SECTOR) == FLASH_SECTOR_13)  ||\
                                 ((SECTOR) == FLASH_SECTOR_14)  || ((SECTOR) == FLASH_SECTOR_15)  ||\
                                 ((SECTOR) == FLASH_SECTOR_16)  || ((SECTOR) == FLASH_SECTOR_17)  ||\
                                 ((SECTOR) == FLASH_SECTOR_18)  || ((SECTOR) == FLASH_SECTOR_19)  ||\
                                 ((SECTOR) == FLASH_SECTOR_20)  || ((SECTOR) == FLASH_SECTOR_21)  ||\
                                 ((SECTOR) == FLASH_SECTOR_22)  || ((SECTOR) == FLASH_SECTOR_23))

 

 

 

 

You're not using a part with 24 sectors

The F746 has 8, describing 1MB

The F767 (24), and F722 (8 for 512KB) might have different array sizes.

As I recollect there are some F4 devices with 2MB, two banks of 1MB in a 16KB*4,64KB*1,128KB*7 pattern

Tips, Buy me a coffee, or three.. PayPal Venmo
Up vote any posts that you find helpful, it shows what's working..