From 7b44b5f5f342276df5500e3e79681cee2afb4556 Mon Sep 17 00:00:00 2001 From: Andrey Date: Tue, 20 Jul 2021 14:15:58 -0400 Subject: [PATCH] Button to apply nDBANK #2996 it does not work, i give up for now time to install STM Cube :( --- .../hw_layer/ports/stm32/stm32f7/mpu_util.cpp | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/firmware/hw_layer/ports/stm32/stm32f7/mpu_util.cpp b/firmware/hw_layer/ports/stm32/stm32f7/mpu_util.cpp index 3d2ab1cc59..b6cdb472f3 100644 --- a/firmware/hw_layer/ports/stm32/stm32f7/mpu_util.cpp +++ b/firmware/hw_layer/ports/stm32/stm32f7/mpu_util.cpp @@ -133,6 +133,22 @@ uintptr_t getFlashAddrSecondCopy() { #define FLASH_OPTKEY1 (0x08192A3B) #define FLASH_OPTKEY2 (0x4C5D6E7F) +static void flash_wait_complete(void) +{ + while ((FLASH_SR & FLASH_SR_BSY) == FLASH_SR_BSY) + ; +} + +static void stm32f7_flash_mass_erase_dual_block(void) +{ + FLASH_CR |= FLASH_CR_MER1 | FLASH_CR_MER2; + FLASH_CR |= FLASH_CR_STRT; + flash_wait_complete(); + FLASH_CR &= ~(FLASH_CR_MER1 | FLASH_CR_MER2); +} + +// todo: at the moment this does not work :( +// https://github.com/rusefi/rusefi/issues/2996 void sys_dual_bank(void) { uint32_t reg; @@ -147,5 +163,9 @@ void sys_dual_bank(void) { reg &= ~(FLASH_OPTCR_nDBANK); FLASH_OPTCR = reg; FLASH_OPTCR |= FLASH_OPTCR_STRT; + /* + * see https://github.com/danielinux/stm32f7-dualbank-tool/issues/1 + stm32f7_flash_mass_erase_dual_block(); + */ }