|
From: <ml...@ma...> - 2009-04-29 23:08:41
|
Author: mlu
Date: 2009-04-29 23:08:39 +0200 (Wed, 29 Apr 2009)
New Revision: 1571
Modified:
trunk/src/flash/stm32x.c
Log:
Clear FLASH_SR error flags after flash errors to avoid reset befor further flash operations.
Modified: trunk/src/flash/stm32x.c
===================================================================
--- trunk/src/flash/stm32x.c 2009-04-29 18:26:11 UTC (rev 1570)
+++ trunk/src/flash/stm32x.c 2009-04-29 21:08:39 UTC (rev 1571)
@@ -120,6 +120,7 @@
static u32 stm32x_wait_status_busy(flash_bank_t *bank, int timeout)
{
+ target_t *target = bank->target;
u32 status;
/* wait for busy to clear */
@@ -128,7 +129,11 @@
LOG_DEBUG("status: 0x%x", status);
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;
}
@@ -568,6 +573,8 @@
if (buf_get_u32(reg_params[3].value, 0, 32) & FLASH_PGERR)
{
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;
break;
}
@@ -575,6 +582,8 @@
if (buf_get_u32(reg_params[3].value, 0, 32) & FLASH_WRPRTERR)
{
LOG_ERROR("flash memory write protected");
+ /* Clear but report errors */
+ target_write_u32(target, STM32_FLASH_SR, FLASH_WRPRTERR);
retval = ERROR_FLASH_OPERATION_FAILED;
break;
}
|