diff options
Diffstat (limited to 'Projects/NUCLEO-WB15CC/Applications/BLE/BLE_Ota/STM32_WPAN/App/otas_app.c')
-rw-r--r-- | Projects/NUCLEO-WB15CC/Applications/BLE/BLE_Ota/STM32_WPAN/App/otas_app.c | 34 |
1 files changed, 15 insertions, 19 deletions
diff --git a/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_Ota/STM32_WPAN/App/otas_app.c b/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_Ota/STM32_WPAN/App/otas_app.c index c01eb57a5..2fbb5de4c 100644 --- a/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_Ota/STM32_WPAN/App/otas_app.c +++ b/Projects/NUCLEO-WB15CC/Applications/BLE/BLE_Ota/STM32_WPAN/App/otas_app.c @@ -29,6 +29,8 @@ #include "ota_sbsfu.h" #endif /* OTA_SBSFU */ +#include "flash_driver.h" + /* Private typedef -----------------------------------------------------------*/ typedef enum { @@ -111,21 +113,21 @@ void OTAS_STM_Notification( OTA_STM_Notification_t *p_notification ) count = 0; size_left = p_notification->ValueLength; - while( LL_HSEM_1StepLock( HSEM, CFG_HW_FLASH_SEMID ) ); - HAL_FLASH_Unlock(); /** * The flash is written by bunch of DOUBLEWORD_SIZE_FOR_FLASH_PROGRAMMING bytes * Data are written in flash as long as there are at least DOUBLEWORD_SIZE_FOR_FLASH_PROGRAMMING bytes */ while( size_left >= (DOUBLEWORD_SIZE_FOR_FLASH_PROGRAMMING - OTAS_APP_Context.write_value_index) ) { + uint32_t NbrOfDataToBeWritten = 1; + memcpy( (uint8_t*)&OTAS_APP_Context.write_value + OTAS_APP_Context.write_value_index, ((OTA_STM_Raw_Data_Event_Format_t*)(p_notification->pPayload))->Raw_Data + count, DOUBLEWORD_SIZE_FOR_FLASH_PROGRAMMING - OTAS_APP_Context.write_value_index ); - while(LL_FLASH_IsActiveFlag_OperationSuspended()); - HAL_FLASH_Program( FLASH_TYPEPROGRAM_DOUBLEWORD, - OTAS_APP_Context.base_address, - OTAS_APP_Context.write_value); + while(NbrOfDataToBeWritten > 0) + NbrOfDataToBeWritten = FD_WriteData(OTAS_APP_Context.base_address, + &(OTAS_APP_Context.write_value), + 1); if(*(uint64_t*)(OTAS_APP_Context.base_address)==OTAS_APP_Context.write_value) { OTAS_APP_Context.base_address += DOUBLEWORD_SIZE_FOR_FLASH_PROGRAMMING; @@ -134,8 +136,6 @@ void OTAS_STM_Notification( OTA_STM_Notification_t *p_notification ) OTAS_APP_Context.write_value_index = 0; } } - HAL_FLASH_Lock(); - LL_HSEM_ReleaseLock( HSEM, CFG_HW_FLASH_SEMID, 0 ); /** * The Flash shall be written by DOUBLEWORD_SIZE_FOR_FLASH_PROGRAMMING number of bytes. @@ -173,17 +173,15 @@ void OTAS_STM_Notification( OTA_STM_Notification_t *p_notification ) 0xFF, DOUBLEWORD_SIZE_FOR_FLASH_PROGRAMMING - OTAS_APP_Context.write_value_index ); - while( LL_HSEM_1StepLock( HSEM, CFG_HW_FLASH_SEMID ) ); - HAL_FLASH_Unlock(); while(*(uint64_t*)(OTAS_APP_Context.base_address) != OTAS_APP_Context.write_value) { - while(LL_FLASH_IsActiveFlag_OperationSuspended()); - HAL_FLASH_Program( FLASH_TYPEPROGRAM_DOUBLEWORD, - OTAS_APP_Context.base_address, - OTAS_APP_Context.write_value); + uint32_t NbrOfDataToBeWritten = 1; + + while(NbrOfDataToBeWritten > 0) + NbrOfDataToBeWritten = FD_WriteData(OTAS_APP_Context.base_address, + &(OTAS_APP_Context.write_value), + 1); } - HAL_FLASH_Lock(); - LL_HSEM_ReleaseLock( HSEM, CFG_HW_FLASH_SEMID, 0 ); } /** @@ -211,9 +209,7 @@ void OTAS_STM_Notification( OTA_STM_Notification_t *p_notification ) STANDALONE_LOADER_STATE = STANDALONE_LOADER_BYPASS_REQ; NVIC_SystemReset(); /* it waits until reset */ - break; #else - /** * Wireless firmware update is requested * Request CPU2 to reboot on FUS by sending two FUS command @@ -224,8 +220,8 @@ void OTAS_STM_Notification( OTA_STM_Notification_t *p_notification ) { HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFI); } - break; #endif /* OTA_SBSFU */ + break; default: break; |