aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTobias Ringström <tobias@ringis.se>2010-04-30 14:04:14 +0200
committerØyvind Harboe <oyvind.harboe@zylin.com>2010-05-03 11:55:08 +0200
commit14f4606dcb0533ab64562406edd157008108e0db (patch)
tree20e9140745daa41a978c4f48009aafe599f86545
parentda9f72ca0a3305cf6f961834dc441496a36c85de (diff)
STM32 flash erase timeout fix
The current timeout for STM32 flash block erase and flash mass erase is 10 (ms), which is too tight, and fails around 50% of the time for me. The data sheet for STM32F107VC specifies a maximum erase time of 40 ms (for both operations). I'd also consider it a bug that the code does not detect a timeout, but just assumes that the operation has completed. The attached patch does not address this bug. The attached patch increases the timeouts from 10 to 100 ms. Please apply. /Tobias
-rw-r--r--src/flash/nor/stm32x.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/src/flash/nor/stm32x.c b/src/flash/nor/stm32x.c
index 818c474c..0fdd148e 100644
--- a/src/flash/nor/stm32x.c
+++ b/src/flash/nor/stm32x.c
@@ -331,7 +331,7 @@ static int stm32x_erase(struct flash_bank *bank, int first, int last)
target_write_u32(target, STM32_FLASH_AR, bank->base + bank->sectors[i].offset);
target_write_u32(target, STM32_FLASH_CR, FLASH_PER | FLASH_STRT);
- status = stm32x_wait_status_busy(bank, 10);
+ status = stm32x_wait_status_busy(bank, 100);
if (status & FLASH_WRPRTERR)
return ERROR_FLASH_OPERATION_FAILED;
@@ -1183,7 +1183,7 @@ static int stm32x_mass_erase(struct flash_bank *bank)
target_write_u32(target, STM32_FLASH_CR, FLASH_MER);
target_write_u32(target, STM32_FLASH_CR, FLASH_MER | FLASH_STRT);
- status = stm32x_wait_status_busy(bank, 10);
+ status = stm32x_wait_status_busy(bank, 100);
target_write_u32(target, STM32_FLASH_CR, FLASH_LOCK);