Deleting flash memory breaks BLE connection on P-NUCLEO-WB55
I am using a P-NUCLEO-WB55 board and trying to delete flash from within a BLE app. I have used the p2p_server project as the basis for my project.(github.com/STMicroelectronics/STM32CubeWB/tree/master/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_p2pServer)
When a certain BLE command is called within the P2P_Server.c file, the function below is called to delete a certain area of flash. The erase operation works but the BLE connection is broken. The connection can be reestablished but ideally I do not want the BLE connection to be broken. Is this possible? What is causing the connection to break?
Thanks for any help,
FInlay
oid Flash_Wipe(uint32_t Data_Start_Point, uint32_t Timestamp_Start_Point)
{
uint32_t DataFirstPage = 0, DataNbOfPages = 0, TimestampFirstPage = 0, TimestampNbOfPages = 0;
uint32_t PageError = 0;
/*Variable used for Erase procedure*/
static FLASH_EraseInitTypeDef DataEraseInitStruct;
static FLASH_EraseInitTypeDef TimestampEraseInitStruct;
// Unlock the Flash to enable the flash control register access
HAL_FLASH_Unlock();
// Clear OPTVERR bit set on virgin samples
__HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_OPTVERR);
//if non-zero input then perform the data flash area erase
if(Data_Start_Point != 0U)
{
// Get the 1st page to erase
DataFirstPage = (Data_Start_Point - FLASH_BASE) / FLASH_PAGE_SIZE;
// Get the number of pages to erase from 1st page
DataNbOfPages = ((SPEECH_DATA_END_ADDRESS - FLASH_BASE) / FLASH_PAGE_SIZE) - DataFirstPage + 1;
// Fill EraseInit structure
DataEraseInitStruct.TypeErase = FLASH_TYPEERASE_PAGES;
DataEraseInitStruct.Page = DataFirstPage;
DataEraseInitStruct.NbPages = DataNbOfPages;
if (HAL_FLASHEx_Erase(&DataEraseInitStruct, &PageError) != HAL_OK)
{
while (1)
{
// Turn on Red LED
HAL_GPIO_WritePin(LEDG_GPIO_Port, LEDG_Pin, SET);
}
}
}
//if non-zero input then perform the timestamp flash area erase
if(Timestamp_Start_Point != 0U)
{
//Get the 1st page to erase
TimestampFirstPage = (Timestamp_Start_Point - FLASH_BASE) / FLASH_PAGE_SIZE;
// Get the number of pages to erase from 1st page
TimestampNbOfPages = ((SPEECH_TIMESTAMP_END_ADDRESS - FLASH_BASE) / FLASH_PAGE_SIZE) - TimestampFirstPage + 1;
// Fill EraseInit structure
TimestampEraseInitStruct.TypeErase = FLASH_TYPEERASE_PAGES;
TimestampEraseInitStruct.Page = TimestampFirstPage;
TimestampEraseInitStruct.NbPages = TimestampNbOfPages;
if (HAL_FLASHEx_Erase(&TimestampEraseInitStruct, &PageError) != HAL_OK)
{
while (1)
{
// Turn on Red LED
HAL_GPIO_WritePin(LEDG_GPIO_Port, LEDG_Pin, SET);
}
}
}
// Lock the Flash to disable the flash control register access (recommended to protect the FLASH memory against possible unwanted operation)
HAL_FLASH_Lock(); //we can eventually lock and unlock before and after operations
}