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
This commit is contained in:
parent
da9f72ca0a
commit
14f4606dcb
|
@ -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_AR, bank->base + bank->sectors[i].offset);
|
||||||
target_write_u32(target, STM32_FLASH_CR, FLASH_PER | FLASH_STRT);
|
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)
|
if (status & FLASH_WRPRTERR)
|
||||||
return ERROR_FLASH_OPERATION_FAILED;
|
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);
|
||||||
target_write_u32(target, STM32_FLASH_CR, FLASH_MER | FLASH_STRT);
|
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);
|
target_write_u32(target, STM32_FLASH_CR, FLASH_LOCK);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue