Skip to content
This repository was archived by the owner on Oct 5, 2021. It is now read-only.

Commit cdfcc5e

Browse files
committed
stm32: limit number of pages in a single erase operation
512 pages seams the max limit Signed-off-by: Antonio Borneo <borneo.antonio@gmail.com>
1 parent 666dde2 commit cdfcc5e

File tree

1 file changed

+16
-1
lines changed

1 file changed

+16
-1
lines changed

stm32.c

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -829,6 +829,9 @@ static stm32_err_t stm32_pages_erase(const stm32_t *stm, uint32_t spage, uint32_
829829

830830
stm32_err_t stm32_erase_memory(const stm32_t *stm, uint32_t spage, uint32_t pages)
831831
{
832+
uint32_t n;
833+
stm32_err_t s_err;
834+
832835
if (!pages || spage > STM32_MAX_PAGES ||
833836
((pages != STM32_MASS_ERASE) && ((spage + pages) > STM32_MAX_PAGES)))
834837
return STM32_ERR_OK;
@@ -852,7 +855,19 @@ stm32_err_t stm32_erase_memory(const stm32_t *stm, uint32_t spage, uint32_t page
852855

853856
}
854857

855-
return stm32_pages_erase(stm, spage, pages);
858+
/*
859+
* Some device, like STM32L152, cannot erase more than 512 pages in
860+
* one command. Split the call.
861+
*/
862+
while (pages) {
863+
n = (pages <= 512) ? pages : 512;
864+
s_err = stm32_pages_erase(stm, spage, n);
865+
if (s_err != STM32_ERR_OK)
866+
return s_err;
867+
spage += n;
868+
pages -= n;
869+
}
870+
return STM32_ERR_OK;
856871
}
857872

858873
static stm32_err_t stm32_run_raw_code(const stm32_t *stm,

0 commit comments

Comments
 (0)