STM32G0 FLASH : support MCU with dual bank

pull/15204/head
Jerome Coutant 2022-01-13 11:44:21 +01:00
parent 6bb606f62d
commit 5e5d2ab9a5
1 changed files with 40 additions and 1 deletions

View File

@ -24,6 +24,44 @@
#include "cmsis.h" #include "cmsis.h"
uint32_t GetBank(uint32_t Addr)
{
#if defined(FLASH_DBANK_SUPPORT)
if (Addr < (FLASH_BASE + FLASH_BANK_SIZE))
{
return FLASH_BANK_1;
}
else
{
return FLASH_BANK_2;
}
#else
return FLASH_BANK_1;
#endif
}
uint32_t GetPage(uint32_t Addr)
{
uint32_t page = 0;
#if defined(FLASH_DBANK_SUPPORT)
if (Addr < (FLASH_BASE + FLASH_BANK_SIZE))
{
/* Bank 1 */
page = (Addr - FLASH_BASE) / FLASH_PAGE_SIZE;
}
else
{
/* Bank 2 */
page = (Addr - (FLASH_BASE + FLASH_BANK_SIZE)) / FLASH_PAGE_SIZE;
}
#else
page = (Addr - FLASH_BASE) / FLASH_PAGE_SIZE;
#endif
return page;
}
int32_t flash_init(flash_t *obj) int32_t flash_init(flash_t *obj)
{ {
return 0; return 0;
@ -57,7 +95,8 @@ int32_t flash_erase_sector(flash_t *obj, uint32_t address)
/* MBED HAL erases 1 sector at a time */ /* MBED HAL erases 1 sector at a time */
/* Fill EraseInit structure*/ /* Fill EraseInit structure*/
EraseInitStruct.TypeErase = FLASH_TYPEERASE_PAGES; EraseInitStruct.TypeErase = FLASH_TYPEERASE_PAGES;
EraseInitStruct.Page = (address & 0xFFFFF) / 2048; // page size = 2048 EraseInitStruct.Banks = GetBank(address);
EraseInitStruct.Page = GetPage(address);
EraseInitStruct.NbPages = 1; EraseInitStruct.NbPages = 1;
/* Note: If an erase operation in Flash memory also concerns data in the data or instruction cache, /* Note: If an erase operation in Flash memory also concerns data in the data or instruction cache,