arch/arm/src/stm32l4/stm32l4_flash.c: Fix flash_erase(page) when page >= 256 (#170)
All STM32L4 MPUs have FLASH_CR_PNB bits (8 bits), and some MPUs have FLASH_CR_BKER bit to change bank if page >= 256. The code wasn't setting or clearing FLASH_CR_BKER correctly.
This commit is contained in:
parent
83354983c3
commit
4813b9d751
@ -176,7 +176,21 @@ static inline void flash_erase(size_t page)
|
||||
finfo("erase page %u\n", page);
|
||||
|
||||
modifyreg32(STM32L4_FLASH_CR, 0, FLASH_CR_PAGE_ERASE);
|
||||
modifyreg32(STM32L4_FLASH_CR, FLASH_CR_PNB_MASK, FLASH_CR_PNB(page));
|
||||
modifyreg32(STM32L4_FLASH_CR, FLASH_CR_PNB_MASK, FLASH_CR_PNB(page & 0xff));
|
||||
|
||||
#if defined(CONFIG_STM32L4_STM32L4X5) || \
|
||||
defined(CONFIG_STM32L4_STM32L4X6) || \
|
||||
defined(CONFIG_STM32L4_STM32L4XR)
|
||||
if (page <= 0xff)
|
||||
{
|
||||
modifyreg32(STM32L4_FLASH_CR, FLASH_CR_BKER, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
modifyreg32(STM32L4_FLASH_CR, 0, FLASH_CR_BKER);
|
||||
}
|
||||
#endif
|
||||
|
||||
modifyreg32(STM32L4_FLASH_CR, 0, FLASH_CR_START);
|
||||
|
||||
while (getreg32(STM32L4_FLASH_SR) & FLASH_SR_BSY)
|
||||
|
Loading…
x
Reference in New Issue
Block a user