Clear FLASH_SR error flags after flash errors to avoid reset befor further flash operations.
git-svn-id: svn://svn.berlios.de/openocd/trunk@1571 b42882b7-edfa-0310-969c-e2dbd0fdcd60
This commit is contained in:
parent
851f9b2d6c
commit
7d61acebd8
|
@ -120,6 +120,7 @@ static u32 stm32x_get_flash_status(flash_bank_t *bank)
|
||||||
|
|
||||||
static u32 stm32x_wait_status_busy(flash_bank_t *bank, int timeout)
|
static u32 stm32x_wait_status_busy(flash_bank_t *bank, int timeout)
|
||||||
{
|
{
|
||||||
|
target_t *target = bank->target;
|
||||||
u32 status;
|
u32 status;
|
||||||
|
|
||||||
/* wait for busy to clear */
|
/* wait for busy to clear */
|
||||||
|
@ -128,7 +129,11 @@ static u32 stm32x_wait_status_busy(flash_bank_t *bank, int timeout)
|
||||||
LOG_DEBUG("status: 0x%x", status);
|
LOG_DEBUG("status: 0x%x", status);
|
||||||
alive_sleep(1);
|
alive_sleep(1);
|
||||||
}
|
}
|
||||||
|
/* Clear but report errors */
|
||||||
|
if (status & (FLASH_WRPRTERR|FLASH_PGERR))
|
||||||
|
{
|
||||||
|
target_write_u32(target, STM32_FLASH_SR, FLASH_WRPRTERR|FLASH_PGERR);
|
||||||
|
}
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -568,6 +573,8 @@ static int stm32x_write_block(struct flash_bank_s *bank, u8 *buffer, u32 offset,
|
||||||
if (buf_get_u32(reg_params[3].value, 0, 32) & FLASH_PGERR)
|
if (buf_get_u32(reg_params[3].value, 0, 32) & FLASH_PGERR)
|
||||||
{
|
{
|
||||||
LOG_ERROR("flash memory not erased before writing");
|
LOG_ERROR("flash memory not erased before writing");
|
||||||
|
/* Clear but report errors */
|
||||||
|
target_write_u32(target, STM32_FLASH_SR, FLASH_PGERR);
|
||||||
retval = ERROR_FLASH_OPERATION_FAILED;
|
retval = ERROR_FLASH_OPERATION_FAILED;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -575,6 +582,8 @@ static int stm32x_write_block(struct flash_bank_s *bank, u8 *buffer, u32 offset,
|
||||||
if (buf_get_u32(reg_params[3].value, 0, 32) & FLASH_WRPRTERR)
|
if (buf_get_u32(reg_params[3].value, 0, 32) & FLASH_WRPRTERR)
|
||||||
{
|
{
|
||||||
LOG_ERROR("flash memory write protected");
|
LOG_ERROR("flash memory write protected");
|
||||||
|
/* Clear but report errors */
|
||||||
|
target_write_u32(target, STM32_FLASH_SR, FLASH_WRPRTERR);
|
||||||
retval = ERROR_FLASH_OPERATION_FAILED;
|
retval = ERROR_FLASH_OPERATION_FAILED;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue