Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/Flipper-Zero/STM32CubeWB.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'Middlewares/ST/STM32_WPAN/ble/mesh/PAL/STM32WB/pal_nvm.c')
-rw-r--r--Middlewares/ST/STM32_WPAN/ble/mesh/PAL/STM32WB/pal_nvm.c65
1 files changed, 40 insertions, 25 deletions
diff --git a/Middlewares/ST/STM32_WPAN/ble/mesh/PAL/STM32WB/pal_nvm.c b/Middlewares/ST/STM32_WPAN/ble/mesh/PAL/STM32WB/pal_nvm.c
index 392f1a3ea..5d4a7f95c 100644
--- a/Middlewares/ST/STM32_WPAN/ble/mesh/PAL/STM32WB/pal_nvm.c
+++ b/Middlewares/ST/STM32_WPAN/ble/mesh/PAL/STM32WB/pal_nvm.c
@@ -47,11 +47,6 @@
#include "ble.h"
-extern const void* mobleNvmBase;
-#define NVM_BASE ((unsigned int)mobleNvmBase)
-#define NVM_SIZE 0x00002000
-#define FLASH_SECTOR_SIZE 0x1000
-
/* Private functions ---------------------------------------------------------*/
/**
* @brief Gets the page of a given address
@@ -96,13 +91,18 @@ MOBLEBOOL MoblePalNvmIsWriteProtected(void)
/**
* @brief Read NVM
-* @param offset: offset wrt start address of nvm
+* @param address: read start address of nvm
+* @param offset: offset read start address of nvm
* @param buf: copy of read content
* @param size: size of memory to be read
* @param backup: If read from backup memory
* @retval Result of read operation
*/
-MOBLE_RESULT MoblePalNvmRead(MOBLEUINT32 offset, void *buf, MOBLEUINT32 size, MOBLEBOOL backup)
+MOBLE_RESULT MoblePalNvmRead(MOBLEUINT32 address,
+ MOBLEUINT32 offset,
+ void *buf,
+ MOBLEUINT32 size,
+ MOBLEBOOL backup)
{
MOBLE_RESULT result = MOBLE_RESULT_SUCCESS;
@@ -122,7 +122,7 @@ MOBLE_RESULT MoblePalNvmRead(MOBLEUINT32 offset, void *buf, MOBLEUINT32 size, MO
}
else
{
- memmove(buf, (void *)(NVM_BASE + offset), size);
+ memmove(buf, (void *)(address + offset), size);
}
// printf("MoblePalNvmRead <<<\r\n");
@@ -131,13 +131,18 @@ MOBLE_RESULT MoblePalNvmRead(MOBLEUINT32 offset, void *buf, MOBLEUINT32 size, MO
/**
* @brief Compare with NVM
-* @param offset: offset wrt start address of nvm
+* @param offset: start address of nvm to compare
+* @param offset: offset start address of nvm
* @param buf: copy of content
* @param size: size of memory to be compared
* @param comparison: outcome of comparison
* @retval Result
*/
-MOBLE_RESULT MoblePalNvmCompare(MOBLEUINT32 offset, void const *buf, MOBLEUINT32 size, MOBLE_NVM_COMPARE* comparison)
+MOBLE_RESULT MoblePalNvmCompare(MOBLEUINT32 address,
+ MOBLEUINT32 offset,
+ void const *buf,
+ MOBLEUINT32 size,
+ MOBLE_NVM_COMPARE* comparison)
{
MOBLE_RESULT result = MOBLE_RESULT_SUCCESS;
@@ -173,7 +178,7 @@ MOBLE_RESULT MoblePalNvmCompare(MOBLEUINT32 offset, void const *buf, MOBLEUINT32
size >>= 3;
uint64_t* src = (uint64_t*)buf;
- uint64_t* dst = (uint64_t*)(NVM_BASE + offset);
+ uint64_t* dst = (uint64_t*)(address + offset);
for (MOBLEUINT32 i=0; i<size; ++i)
{
@@ -199,25 +204,31 @@ MOBLE_RESULT MoblePalNvmCompare(MOBLEUINT32 offset, void const *buf, MOBLEUINT32
* @param None
* @retval Result
*/
-MOBLE_RESULT MoblePalNvmErase(MOBLEUINT32 offset)
+MOBLE_RESULT MoblePalNvmErase(MOBLEUINT32 address,
+ MOBLEUINT32 offset)
{
HAL_StatusTypeDef status = HAL_OK;
+ uint32_t pageError = 0;
// printf("MoblePalNvmErase >>>\r\n");
- while( LL_HSEM_1StepLock( HSEM, CFG_HW_FLASH_SEMID ) );
- HAL_FLASH_Unlock();
- __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP | FLASH_FLAG_WRPERR | FLASH_FLAG_OPTVERR);
-
FLASH_EraseInitTypeDef erase;
erase.TypeErase = FLASH_TYPEERASE_PAGES;
- erase.Page = GetPage(NVM_BASE + offset); /* 126 or 127 */;
+ erase.Page = GetPage(address + offset); /* 126 or 127 */;
erase.NbPages = FLASH_SECTOR_SIZE >> 12;
- uint32_t pageError = 0;
+ while( LL_HSEM_1StepLock( HSEM, CFG_HW_FLASH_SEMID ) );
+ HAL_FLASH_Unlock();
+ __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP | FLASH_FLAG_WRPERR | FLASH_FLAG_OPTVERR);
+
+ SHCI_C2_FLASH_EraseActivity( ERASE_ACTIVITY_ON);
+
while(LL_FLASH_IsActiveFlag_OperationSuspended());
status = HAL_FLASHEx_Erase(&erase, &pageError);
while(LL_FLASH_IsActiveFlag_OperationSuspended());
+
+ SHCI_C2_FLASH_EraseActivity( ERASE_ACTIVITY_OFF);
+
HAL_FLASH_Lock();
LL_HSEM_ReleaseLock( HSEM, CFG_HW_FLASH_SEMID, 0 );
@@ -228,12 +239,16 @@ MOBLE_RESULT MoblePalNvmErase(MOBLEUINT32 offset)
/**
* @brief Write to NVM
+* @param offset: wrt start address of nvm
* @param offset: offset wrt start address of nvm
* @param buf: copy of write content
* @param size: size of memory to be written
* @retval Result
*/
-MOBLE_RESULT MoblePalNvmWrite(MOBLEUINT32 offset, void const *buf, MOBLEUINT32 size)
+MOBLE_RESULT MoblePalNvmWrite(MOBLEUINT32 address,
+ MOBLEUINT32 offset,
+ void const *buf,
+ MOBLEUINT32 size)
{
MOBLE_RESULT result = MOBLE_RESULT_SUCCESS;
@@ -264,24 +279,24 @@ MOBLE_RESULT MoblePalNvmWrite(MOBLEUINT32 offset, void const *buf, MOBLEUINT32 s
size >>= 3;
uint64_t* src = (uint64_t*)buf;
- uint64_t* dst = (uint64_t*)(NVM_BASE + offset);
+// uint64_t* dst = (uint64_t*)(address + offset);
HAL_StatusTypeDef status = HAL_OK;
while( LL_HSEM_1StepLock( HSEM, CFG_HW_FLASH_SEMID ) );
HAL_FLASH_Unlock();
__HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP | FLASH_FLAG_WRPERR | FLASH_FLAG_OPTVERR);
- for (size_t i = 0; i < size && status == HAL_OK; i++)
- {
- if (src[i<<3] != dst[i<<3])
+ for (size_t i = 0; (i < size) && (status == HAL_OK); i++)
{
+// if (src[i<<3] != dst[i<<3])
+// {
while(LL_FLASH_IsActiveFlag_OperationSuspended());
- status = HAL_FLASH_Program(FLASH_TYPEPROGRAM_DOUBLEWORD, NVM_BASE + offset + (i <<3), src[i]);
+ status = HAL_FLASH_Program(FLASH_TYPEPROGRAM_DOUBLEWORD, address + offset + (i <<3), src[i]);
if (status != HAL_OK)
{
break;
}
- }
+// }
}
HAL_FLASH_Lock();
LL_HSEM_ReleaseLock( HSEM, CFG_HW_FLASH_SEMID, 0 );