Compare commits

..

4 Commits
v1.3.1 ... main

Author SHA1 Message Date
Giovanni Strano 3416a7dd18 [PRJ] Correct the dest addr and Unlock back the Flash after an erase in FLASH_IF_INT_Write()
Change-Id: Id5b1fe757f2f2e62f255d22b2fd14d5320320031
2025-05-13 17:15:20 +01:00
Antonio Sconza 406f7a204c [PRJ] Fetch the RSSI calibration from memory before performing the LBT verification in Sigfox applications of 'B-WL5M-SUBG1' and 'NUCLEO-WL55JC1' boards 2025-03-21 15:02:06 +01:00
Rania JMAI 139e8d28bc [HAL] Upload new fixes 2025-03-10 13:28:25 +01:00
Ali Labbene ad0502685e [DOC] Update './Projects/Release_Notes.html' 2025-02-28 12:08:03 +01:00
22 changed files with 128 additions and 17 deletions

@ -1 +1 @@
Subproject commit 8188d40505f5f77cb6ff9cea404b661d445acbd2 Subproject commit a496d1eebd7394fb880ebfdd56fdcb5f2cce687b

View File

@ -248,7 +248,7 @@ static FLASH_IF_StatusTypedef FLASH_IF_INT_Write(void *pDestination, const void
for (page_index = start_page_index; page_index < (start_page_index + number_pages); page_index++) for (page_index = start_page_index; page_index < (start_page_index + number_pages); page_index++)
{ {
page_address = page_index * FLASH_PAGE_SIZE + FLASH_BASE; page_address = page_index * FLASH_PAGE_SIZE + FLASH_BASE;
if (FLASH_IF_INT_IsEmpty(pDestination, length) != FLASH_IF_MEM_EMPTY) if (FLASH_IF_INT_IsEmpty((void *)uDest, length) != FLASH_IF_MEM_EMPTY)
{ {
if (pAllocatedBuffer == NULL) if (pAllocatedBuffer == NULL)
{ {
@ -272,6 +272,12 @@ static FLASH_IF_StatusTypedef FLASH_IF_INT_Write(void *pDestination, const void
current_dest = page_address; current_dest = page_address;
current_source = (uint32_t)pAllocatedBuffer; current_source = (uint32_t)pAllocatedBuffer;
current_length = FLASH_PAGE_SIZE; current_length = FLASH_PAGE_SIZE;
/* Unlock back the Flash */
if (HAL_OK != HAL_FLASH_Unlock())
{
ret_status = FLASH_IF_LOCK_ERROR;
}
} }
else else
{ {

View File

@ -248,7 +248,7 @@ static FLASH_IF_StatusTypedef FLASH_IF_INT_Write(void *pDestination, const void
for (page_index = start_page_index; page_index < (start_page_index + number_pages); page_index++) for (page_index = start_page_index; page_index < (start_page_index + number_pages); page_index++)
{ {
page_address = page_index * FLASH_PAGE_SIZE + FLASH_BASE; page_address = page_index * FLASH_PAGE_SIZE + FLASH_BASE;
if (FLASH_IF_INT_IsEmpty(pDestination, length) != FLASH_IF_MEM_EMPTY) if (FLASH_IF_INT_IsEmpty((void *)uDest, length) != FLASH_IF_MEM_EMPTY)
{ {
if (pAllocatedBuffer == NULL) if (pAllocatedBuffer == NULL)
{ {
@ -272,6 +272,12 @@ static FLASH_IF_StatusTypedef FLASH_IF_INT_Write(void *pDestination, const void
current_dest = page_address; current_dest = page_address;
current_source = (uint32_t)pAllocatedBuffer; current_source = (uint32_t)pAllocatedBuffer;
current_length = FLASH_PAGE_SIZE; current_length = FLASH_PAGE_SIZE;
/* Unlock back the Flash */
if (HAL_OK != HAL_FLASH_Unlock())
{
ret_status = FLASH_IF_LOCK_ERROR;
}
} }
else else
{ {

View File

@ -248,7 +248,7 @@ static FLASH_IF_StatusTypedef FLASH_IF_INT_Write(void *pDestination, const void
for (page_index = start_page_index; page_index < (start_page_index + number_pages); page_index++) for (page_index = start_page_index; page_index < (start_page_index + number_pages); page_index++)
{ {
page_address = page_index * FLASH_PAGE_SIZE + FLASH_BASE; page_address = page_index * FLASH_PAGE_SIZE + FLASH_BASE;
if (FLASH_IF_INT_IsEmpty(pDestination, length) != FLASH_IF_MEM_EMPTY) if (FLASH_IF_INT_IsEmpty((void *)uDest, length) != FLASH_IF_MEM_EMPTY)
{ {
if (pAllocatedBuffer == NULL) if (pAllocatedBuffer == NULL)
{ {
@ -272,6 +272,12 @@ static FLASH_IF_StatusTypedef FLASH_IF_INT_Write(void *pDestination, const void
current_dest = page_address; current_dest = page_address;
current_source = (uint32_t)pAllocatedBuffer; current_source = (uint32_t)pAllocatedBuffer;
current_length = FLASH_PAGE_SIZE; current_length = FLASH_PAGE_SIZE;
/* Unlock back the Flash */
if (HAL_OK != HAL_FLASH_Unlock())
{
ret_status = FLASH_IF_LOCK_ERROR;
}
} }
else else
{ {

View File

@ -485,6 +485,7 @@ sfx_u8 RF_API_wait_for_clear_channel(sfx_u8 cs_min, sfx_s8 cs_threshold, sfx_rx_
{ {
sfx_u8 status = SFX_ERR_NONE; sfx_u8 status = SFX_ERR_NONE;
sfx_rx_state_enum_t cs_state = DL_TIMEOUT; sfx_rx_state_enum_t cs_state = DL_TIMEOUT;
sfx_s8 lbt_threshold_cal;
/* Starts Rx Windows to sense if channel is occupied or clear* /* Starts Rx Windows to sense if channel is occupied or clear*
* If the channel is clear during the minimum carrier sense * If the channel is clear during the minimum carrier sense
* value (cs_min), under the limit of the cs_threshold, * value (cs_min), under the limit of the cs_threshold,
@ -502,6 +503,8 @@ sfx_u8 RF_API_wait_for_clear_channel(sfx_u8 cs_min, sfx_s8 cs_threshold, sfx_rx_
HAL_Delay(Radio.GetWakeupTime()); HAL_Delay(Radio.GetWakeupTime());
lbt_threshold_cal = E2P_Read_RssiCal();
cs_threshold += lbt_threshold_cal;
APP_LOG(TS_ON, VLEVEL_M, "CS start cs_min=%dms, cs_threshold=%dBm\n\r", cs_min, cs_threshold); APP_LOG(TS_ON, VLEVEL_M, "CS start cs_min=%dms, cs_threshold=%dBm\n\r", cs_min, cs_threshold);
while (RxCarrierSenseGetStatus() == 0) while (RxCarrierSenseGetStatus() == 0)

View File

@ -248,7 +248,7 @@ static FLASH_IF_StatusTypedef FLASH_IF_INT_Write(void *pDestination, const void
for (page_index = start_page_index; page_index < (start_page_index + number_pages); page_index++) for (page_index = start_page_index; page_index < (start_page_index + number_pages); page_index++)
{ {
page_address = page_index * FLASH_PAGE_SIZE + FLASH_BASE; page_address = page_index * FLASH_PAGE_SIZE + FLASH_BASE;
if (FLASH_IF_INT_IsEmpty(pDestination, length) != FLASH_IF_MEM_EMPTY) if (FLASH_IF_INT_IsEmpty((void *)uDest, length) != FLASH_IF_MEM_EMPTY)
{ {
if (pAllocatedBuffer == NULL) if (pAllocatedBuffer == NULL)
{ {
@ -272,6 +272,12 @@ static FLASH_IF_StatusTypedef FLASH_IF_INT_Write(void *pDestination, const void
current_dest = page_address; current_dest = page_address;
current_source = (uint32_t)pAllocatedBuffer; current_source = (uint32_t)pAllocatedBuffer;
current_length = FLASH_PAGE_SIZE; current_length = FLASH_PAGE_SIZE;
/* Unlock back the Flash */
if (HAL_OK != HAL_FLASH_Unlock())
{
ret_status = FLASH_IF_LOCK_ERROR;
}
} }
else else
{ {

View File

@ -485,6 +485,7 @@ sfx_u8 RF_API_wait_for_clear_channel(sfx_u8 cs_min, sfx_s8 cs_threshold, sfx_rx_
{ {
sfx_u8 status = SFX_ERR_NONE; sfx_u8 status = SFX_ERR_NONE;
sfx_rx_state_enum_t cs_state = DL_TIMEOUT; sfx_rx_state_enum_t cs_state = DL_TIMEOUT;
sfx_s8 lbt_threshold_cal;
/* Starts Rx Windows to sense if channel is occupied or clear* /* Starts Rx Windows to sense if channel is occupied or clear*
* If the channel is clear during the minimum carrier sense * If the channel is clear during the minimum carrier sense
* value (cs_min), under the limit of the cs_threshold, * value (cs_min), under the limit of the cs_threshold,
@ -502,6 +503,8 @@ sfx_u8 RF_API_wait_for_clear_channel(sfx_u8 cs_min, sfx_s8 cs_threshold, sfx_rx_
HAL_Delay(Radio.GetWakeupTime()); HAL_Delay(Radio.GetWakeupTime());
lbt_threshold_cal = E2P_Read_RssiCal();
cs_threshold += lbt_threshold_cal;
APP_LOG(TS_ON, VLEVEL_M, "CS start cs_min=%dms, cs_threshold=%dBm\n\r", cs_min, cs_threshold); APP_LOG(TS_ON, VLEVEL_M, "CS start cs_min=%dms, cs_threshold=%dBm\n\r", cs_min, cs_threshold);
while (RxCarrierSenseGetStatus() == 0) while (RxCarrierSenseGetStatus() == 0)

View File

@ -248,7 +248,7 @@ static FLASH_IF_StatusTypedef FLASH_IF_INT_Write(void *pDestination, const void
for (page_index = start_page_index; page_index < (start_page_index + number_pages); page_index++) for (page_index = start_page_index; page_index < (start_page_index + number_pages); page_index++)
{ {
page_address = page_index * FLASH_PAGE_SIZE + FLASH_BASE; page_address = page_index * FLASH_PAGE_SIZE + FLASH_BASE;
if (FLASH_IF_INT_IsEmpty(pDestination, length) != FLASH_IF_MEM_EMPTY) if (FLASH_IF_INT_IsEmpty((void *)uDest, length) != FLASH_IF_MEM_EMPTY)
{ {
if (pAllocatedBuffer == NULL) if (pAllocatedBuffer == NULL)
{ {
@ -272,6 +272,12 @@ static FLASH_IF_StatusTypedef FLASH_IF_INT_Write(void *pDestination, const void
current_dest = page_address; current_dest = page_address;
current_source = (uint32_t)pAllocatedBuffer; current_source = (uint32_t)pAllocatedBuffer;
current_length = FLASH_PAGE_SIZE; current_length = FLASH_PAGE_SIZE;
/* Unlock back the Flash */
if (HAL_OK != HAL_FLASH_Unlock())
{
ret_status = FLASH_IF_LOCK_ERROR;
}
} }
else else
{ {

View File

@ -485,6 +485,7 @@ sfx_u8 RF_API_wait_for_clear_channel(sfx_u8 cs_min, sfx_s8 cs_threshold, sfx_rx_
{ {
sfx_u8 status = SFX_ERR_NONE; sfx_u8 status = SFX_ERR_NONE;
sfx_rx_state_enum_t cs_state = DL_TIMEOUT; sfx_rx_state_enum_t cs_state = DL_TIMEOUT;
sfx_s8 lbt_threshold_cal;
/* Starts Rx Windows to sense if channel is occupied or clear* /* Starts Rx Windows to sense if channel is occupied or clear*
* If the channel is clear during the minimum carrier sense * If the channel is clear during the minimum carrier sense
* value (cs_min), under the limit of the cs_threshold, * value (cs_min), under the limit of the cs_threshold,
@ -502,6 +503,8 @@ sfx_u8 RF_API_wait_for_clear_channel(sfx_u8 cs_min, sfx_s8 cs_threshold, sfx_rx_
HAL_Delay(Radio.GetWakeupTime()); HAL_Delay(Radio.GetWakeupTime());
lbt_threshold_cal = E2P_Read_RssiCal();
cs_threshold += lbt_threshold_cal;
APP_LOG(TS_ON, VLEVEL_M, "CS start cs_min=%dms, cs_threshold=%dBm\n\r", cs_min, cs_threshold); APP_LOG(TS_ON, VLEVEL_M, "CS start cs_min=%dms, cs_threshold=%dBm\n\r", cs_min, cs_threshold);
while (RxCarrierSenseGetStatus() == 0) while (RxCarrierSenseGetStatus() == 0)

View File

@ -248,7 +248,7 @@ static FLASH_IF_StatusTypedef FLASH_IF_INT_Write(void *pDestination, const void
for (page_index = start_page_index; page_index < (start_page_index + number_pages); page_index++) for (page_index = start_page_index; page_index < (start_page_index + number_pages); page_index++)
{ {
page_address = page_index * FLASH_PAGE_SIZE + FLASH_BASE; page_address = page_index * FLASH_PAGE_SIZE + FLASH_BASE;
if (FLASH_IF_INT_IsEmpty(pDestination, length) != FLASH_IF_MEM_EMPTY) if (FLASH_IF_INT_IsEmpty((void *)uDest, length) != FLASH_IF_MEM_EMPTY)
{ {
if (pAllocatedBuffer == NULL) if (pAllocatedBuffer == NULL)
{ {
@ -272,6 +272,12 @@ static FLASH_IF_StatusTypedef FLASH_IF_INT_Write(void *pDestination, const void
current_dest = page_address; current_dest = page_address;
current_source = (uint32_t)pAllocatedBuffer; current_source = (uint32_t)pAllocatedBuffer;
current_length = FLASH_PAGE_SIZE; current_length = FLASH_PAGE_SIZE;
/* Unlock back the Flash */
if (HAL_OK != HAL_FLASH_Unlock())
{
ret_status = FLASH_IF_LOCK_ERROR;
}
} }
else else
{ {

View File

@ -248,7 +248,7 @@ static FLASH_IF_StatusTypedef FLASH_IF_INT_Write(void *pDestination, const void
for (page_index = start_page_index; page_index < (start_page_index + number_pages); page_index++) for (page_index = start_page_index; page_index < (start_page_index + number_pages); page_index++)
{ {
page_address = page_index * FLASH_PAGE_SIZE + FLASH_BASE; page_address = page_index * FLASH_PAGE_SIZE + FLASH_BASE;
if (FLASH_IF_INT_IsEmpty(pDestination, length) != FLASH_IF_MEM_EMPTY) if (FLASH_IF_INT_IsEmpty((void *)uDest, length) != FLASH_IF_MEM_EMPTY)
{ {
if (pAllocatedBuffer == NULL) if (pAllocatedBuffer == NULL)
{ {
@ -272,6 +272,12 @@ static FLASH_IF_StatusTypedef FLASH_IF_INT_Write(void *pDestination, const void
current_dest = page_address; current_dest = page_address;
current_source = (uint32_t)pAllocatedBuffer; current_source = (uint32_t)pAllocatedBuffer;
current_length = FLASH_PAGE_SIZE; current_length = FLASH_PAGE_SIZE;
/* Unlock back the Flash */
if (HAL_OK != HAL_FLASH_Unlock())
{
ret_status = FLASH_IF_LOCK_ERROR;
}
} }
else else
{ {

View File

@ -248,7 +248,7 @@ static FLASH_IF_StatusTypedef FLASH_IF_INT_Write(void *pDestination, const void
for (page_index = start_page_index; page_index < (start_page_index + number_pages); page_index++) for (page_index = start_page_index; page_index < (start_page_index + number_pages); page_index++)
{ {
page_address = page_index * FLASH_PAGE_SIZE + FLASH_BASE; page_address = page_index * FLASH_PAGE_SIZE + FLASH_BASE;
if (FLASH_IF_INT_IsEmpty(pDestination, length) != FLASH_IF_MEM_EMPTY) if (FLASH_IF_INT_IsEmpty((void *)uDest, length) != FLASH_IF_MEM_EMPTY)
{ {
if (pAllocatedBuffer == NULL) if (pAllocatedBuffer == NULL)
{ {
@ -272,6 +272,12 @@ static FLASH_IF_StatusTypedef FLASH_IF_INT_Write(void *pDestination, const void
current_dest = page_address; current_dest = page_address;
current_source = (uint32_t)pAllocatedBuffer; current_source = (uint32_t)pAllocatedBuffer;
current_length = FLASH_PAGE_SIZE; current_length = FLASH_PAGE_SIZE;
/* Unlock back the Flash */
if (HAL_OK != HAL_FLASH_Unlock())
{
ret_status = FLASH_IF_LOCK_ERROR;
}
} }
else else
{ {

View File

@ -248,7 +248,7 @@ static FLASH_IF_StatusTypedef FLASH_IF_INT_Write(void *pDestination, const void
for (page_index = start_page_index; page_index < (start_page_index + number_pages); page_index++) for (page_index = start_page_index; page_index < (start_page_index + number_pages); page_index++)
{ {
page_address = page_index * FLASH_PAGE_SIZE + FLASH_BASE; page_address = page_index * FLASH_PAGE_SIZE + FLASH_BASE;
if (FLASH_IF_INT_IsEmpty(pDestination, length) != FLASH_IF_MEM_EMPTY) if (FLASH_IF_INT_IsEmpty((void *)uDest, length) != FLASH_IF_MEM_EMPTY)
{ {
if (pAllocatedBuffer == NULL) if (pAllocatedBuffer == NULL)
{ {
@ -272,6 +272,12 @@ static FLASH_IF_StatusTypedef FLASH_IF_INT_Write(void *pDestination, const void
current_dest = page_address; current_dest = page_address;
current_source = (uint32_t)pAllocatedBuffer; current_source = (uint32_t)pAllocatedBuffer;
current_length = FLASH_PAGE_SIZE; current_length = FLASH_PAGE_SIZE;
/* Unlock back the Flash */
if (HAL_OK != HAL_FLASH_Unlock())
{
ret_status = FLASH_IF_LOCK_ERROR;
}
} }
else else
{ {

View File

@ -485,6 +485,7 @@ sfx_u8 RF_API_wait_for_clear_channel(sfx_u8 cs_min, sfx_s8 cs_threshold, sfx_rx_
{ {
sfx_u8 status = SFX_ERR_NONE; sfx_u8 status = SFX_ERR_NONE;
sfx_rx_state_enum_t cs_state = DL_TIMEOUT; sfx_rx_state_enum_t cs_state = DL_TIMEOUT;
sfx_s8 lbt_threshold_cal;
/* Starts Rx Windows to sense if channel is occupied or clear* /* Starts Rx Windows to sense if channel is occupied or clear*
* If the channel is clear during the minimum carrier sense * If the channel is clear during the minimum carrier sense
* value (cs_min), under the limit of the cs_threshold, * value (cs_min), under the limit of the cs_threshold,
@ -502,6 +503,8 @@ sfx_u8 RF_API_wait_for_clear_channel(sfx_u8 cs_min, sfx_s8 cs_threshold, sfx_rx_
HAL_Delay(Radio.GetWakeupTime()); HAL_Delay(Radio.GetWakeupTime());
lbt_threshold_cal = E2P_Read_RssiCal();
cs_threshold += lbt_threshold_cal;
APP_LOG(TS_ON, VLEVEL_M, "CS start cs_min=%dms, cs_threshold=%dBm\n\r", cs_min, cs_threshold); APP_LOG(TS_ON, VLEVEL_M, "CS start cs_min=%dms, cs_threshold=%dBm\n\r", cs_min, cs_threshold);
while (RxCarrierSenseGetStatus() == 0) while (RxCarrierSenseGetStatus() == 0)

View File

@ -248,7 +248,7 @@ static FLASH_IF_StatusTypedef FLASH_IF_INT_Write(void *pDestination, const void
for (page_index = start_page_index; page_index < (start_page_index + number_pages); page_index++) for (page_index = start_page_index; page_index < (start_page_index + number_pages); page_index++)
{ {
page_address = page_index * FLASH_PAGE_SIZE + FLASH_BASE; page_address = page_index * FLASH_PAGE_SIZE + FLASH_BASE;
if (FLASH_IF_INT_IsEmpty(pDestination, length) != FLASH_IF_MEM_EMPTY) if (FLASH_IF_INT_IsEmpty((void *)uDest, length) != FLASH_IF_MEM_EMPTY)
{ {
if (pAllocatedBuffer == NULL) if (pAllocatedBuffer == NULL)
{ {
@ -272,6 +272,12 @@ static FLASH_IF_StatusTypedef FLASH_IF_INT_Write(void *pDestination, const void
current_dest = page_address; current_dest = page_address;
current_source = (uint32_t)pAllocatedBuffer; current_source = (uint32_t)pAllocatedBuffer;
current_length = FLASH_PAGE_SIZE; current_length = FLASH_PAGE_SIZE;
/* Unlock back the Flash */
if (HAL_OK != HAL_FLASH_Unlock())
{
ret_status = FLASH_IF_LOCK_ERROR;
}
} }
else else
{ {

View File

@ -485,6 +485,7 @@ sfx_u8 RF_API_wait_for_clear_channel(sfx_u8 cs_min, sfx_s8 cs_threshold, sfx_rx_
{ {
sfx_u8 status = SFX_ERR_NONE; sfx_u8 status = SFX_ERR_NONE;
sfx_rx_state_enum_t cs_state = DL_TIMEOUT; sfx_rx_state_enum_t cs_state = DL_TIMEOUT;
sfx_s8 lbt_threshold_cal;
/* Starts Rx Windows to sense if channel is occupied or clear* /* Starts Rx Windows to sense if channel is occupied or clear*
* If the channel is clear during the minimum carrier sense * If the channel is clear during the minimum carrier sense
* value (cs_min), under the limit of the cs_threshold, * value (cs_min), under the limit of the cs_threshold,
@ -502,6 +503,8 @@ sfx_u8 RF_API_wait_for_clear_channel(sfx_u8 cs_min, sfx_s8 cs_threshold, sfx_rx_
HAL_Delay(Radio.GetWakeupTime()); HAL_Delay(Radio.GetWakeupTime());
lbt_threshold_cal = E2P_Read_RssiCal();
cs_threshold += lbt_threshold_cal;
APP_LOG(TS_ON, VLEVEL_M, "CS start cs_min=%dms, cs_threshold=%dBm\n\r", cs_min, cs_threshold); APP_LOG(TS_ON, VLEVEL_M, "CS start cs_min=%dms, cs_threshold=%dBm\n\r", cs_min, cs_threshold);
while (RxCarrierSenseGetStatus() == 0) while (RxCarrierSenseGetStatus() == 0)

View File

@ -248,7 +248,7 @@ static FLASH_IF_StatusTypedef FLASH_IF_INT_Write(void *pDestination, const void
for (page_index = start_page_index; page_index < (start_page_index + number_pages); page_index++) for (page_index = start_page_index; page_index < (start_page_index + number_pages); page_index++)
{ {
page_address = page_index * FLASH_PAGE_SIZE + FLASH_BASE; page_address = page_index * FLASH_PAGE_SIZE + FLASH_BASE;
if (FLASH_IF_INT_IsEmpty(pDestination, length) != FLASH_IF_MEM_EMPTY) if (FLASH_IF_INT_IsEmpty((void *)uDest, length) != FLASH_IF_MEM_EMPTY)
{ {
if (pAllocatedBuffer == NULL) if (pAllocatedBuffer == NULL)
{ {
@ -272,6 +272,12 @@ static FLASH_IF_StatusTypedef FLASH_IF_INT_Write(void *pDestination, const void
current_dest = page_address; current_dest = page_address;
current_source = (uint32_t)pAllocatedBuffer; current_source = (uint32_t)pAllocatedBuffer;
current_length = FLASH_PAGE_SIZE; current_length = FLASH_PAGE_SIZE;
/* Unlock back the Flash */
if (HAL_OK != HAL_FLASH_Unlock())
{
ret_status = FLASH_IF_LOCK_ERROR;
}
} }
else else
{ {

View File

@ -485,6 +485,7 @@ sfx_u8 RF_API_wait_for_clear_channel(sfx_u8 cs_min, sfx_s8 cs_threshold, sfx_rx_
{ {
sfx_u8 status = SFX_ERR_NONE; sfx_u8 status = SFX_ERR_NONE;
sfx_rx_state_enum_t cs_state = DL_TIMEOUT; sfx_rx_state_enum_t cs_state = DL_TIMEOUT;
sfx_s8 lbt_threshold_cal;
/* Starts Rx Windows to sense if channel is occupied or clear* /* Starts Rx Windows to sense if channel is occupied or clear*
* If the channel is clear during the minimum carrier sense * If the channel is clear during the minimum carrier sense
* value (cs_min), under the limit of the cs_threshold, * value (cs_min), under the limit of the cs_threshold,
@ -502,6 +503,8 @@ sfx_u8 RF_API_wait_for_clear_channel(sfx_u8 cs_min, sfx_s8 cs_threshold, sfx_rx_
HAL_Delay(Radio.GetWakeupTime()); HAL_Delay(Radio.GetWakeupTime());
lbt_threshold_cal = E2P_Read_RssiCal();
cs_threshold += lbt_threshold_cal;
APP_LOG(TS_ON, VLEVEL_M, "CS start cs_min=%dms, cs_threshold=%dBm\n\r", cs_min, cs_threshold); APP_LOG(TS_ON, VLEVEL_M, "CS start cs_min=%dms, cs_threshold=%dBm\n\r", cs_min, cs_threshold);
while (RxCarrierSenseGetStatus() == 0) while (RxCarrierSenseGetStatus() == 0)

View File

@ -248,7 +248,7 @@ static FLASH_IF_StatusTypedef FLASH_IF_INT_Write(void *pDestination, const void
for (page_index = start_page_index; page_index < (start_page_index + number_pages); page_index++) for (page_index = start_page_index; page_index < (start_page_index + number_pages); page_index++)
{ {
page_address = page_index * FLASH_PAGE_SIZE + FLASH_BASE; page_address = page_index * FLASH_PAGE_SIZE + FLASH_BASE;
if (FLASH_IF_INT_IsEmpty(pDestination, length) != FLASH_IF_MEM_EMPTY) if (FLASH_IF_INT_IsEmpty((void *)uDest, length) != FLASH_IF_MEM_EMPTY)
{ {
if (pAllocatedBuffer == NULL) if (pAllocatedBuffer == NULL)
{ {
@ -272,6 +272,12 @@ static FLASH_IF_StatusTypedef FLASH_IF_INT_Write(void *pDestination, const void
current_dest = page_address; current_dest = page_address;
current_source = (uint32_t)pAllocatedBuffer; current_source = (uint32_t)pAllocatedBuffer;
current_length = FLASH_PAGE_SIZE; current_length = FLASH_PAGE_SIZE;
/* Unlock back the Flash */
if (HAL_OK != HAL_FLASH_Unlock())
{
ret_status = FLASH_IF_LOCK_ERROR;
}
} }
else else
{ {

View File

@ -485,6 +485,7 @@ sfx_u8 RF_API_wait_for_clear_channel(sfx_u8 cs_min, sfx_s8 cs_threshold, sfx_rx_
{ {
sfx_u8 status = SFX_ERR_NONE; sfx_u8 status = SFX_ERR_NONE;
sfx_rx_state_enum_t cs_state = DL_TIMEOUT; sfx_rx_state_enum_t cs_state = DL_TIMEOUT;
sfx_s8 lbt_threshold_cal;
/* Starts Rx Windows to sense if channel is occupied or clear* /* Starts Rx Windows to sense if channel is occupied or clear*
* If the channel is clear during the minimum carrier sense * If the channel is clear during the minimum carrier sense
* value (cs_min), under the limit of the cs_threshold, * value (cs_min), under the limit of the cs_threshold,
@ -502,6 +503,8 @@ sfx_u8 RF_API_wait_for_clear_channel(sfx_u8 cs_min, sfx_s8 cs_threshold, sfx_rx_
HAL_Delay(Radio.GetWakeupTime()); HAL_Delay(Radio.GetWakeupTime());
lbt_threshold_cal = E2P_Read_RssiCal();
cs_threshold += lbt_threshold_cal;
APP_LOG(TS_ON, VLEVEL_M, "CS start cs_min=%dms, cs_threshold=%dBm\n\r", cs_min, cs_threshold); APP_LOG(TS_ON, VLEVEL_M, "CS start cs_min=%dms, cs_threshold=%dBm\n\r", cs_min, cs_threshold);
while (RxCarrierSenseGetStatus() == 0) while (RxCarrierSenseGetStatus() == 0)

View File

@ -78,7 +78,7 @@ series</li>
<div class="collapse"> <div class="collapse">
<input type="checkbox" id="collapse-section5" checked aria-hidden="true"> <input type="checkbox" id="collapse-section5" checked aria-hidden="true">
<label for="collapse-section5" aria-hidden="true"><strong>V1.3.1 / <label for="collapse-section5" aria-hidden="true"><strong>V1.3.1 /
29-November-2024</strong></label> 20-December-2024</strong></label>
<div> <div>
<h2 id="main-changes">Main Changes</h2> <h2 id="main-changes">Main Changes</h2>
<h3 id="patch-release">Patch Release</h3> <h3 id="patch-release">Patch Release</h3>
@ -124,7 +124,8 @@ class="icon-st-update"></span></td>
</tr> </tr>
<tr> <tr>
<td style="text-align: left;">NUCLEO-WL55JC</td> <td style="text-align: left;">NUCLEO-WL55JC</td>
<td style="text-align: left;">Demonstrations</td> <td style="text-align: left;">Demonstrations <span
class="icon-st-update"></span></td>
<td style="text-align: left;">Projects\NUCLEO-WL55JC\Demonstrations</td> <td style="text-align: left;">Projects\NUCLEO-WL55JC\Demonstrations</td>
</tr> </tr>
<tr> <tr>
@ -186,6 +187,14 @@ RTC</li>
<li>Set the ulExpectedIdleTime flag before entering in low power mode in <li>Set the ulExpectedIdleTime flag before entering in low power mode in
PreSleepProcessing</li> PreSleepProcessing</li>
</ul></li> </ul></li>
<li><strong>Applications/LoRaWAN/LoRaWAN_AT_Slave</strong>
<ul>
<li>Update CubeMonitor RF test panel</li>
</ul></li>
<li><strong>Applications/LoRaWAN/LoRaWAN_AT_Slave_DualCore</strong>
<ul>
<li>Update CubeMonitor RF test panel</li>
</ul></li>
<li><strong>Applications/LoRaWAN_FUOTA_DualCore</strong> <li><strong>Applications/LoRaWAN_FUOTA_DualCore</strong>
<ul> <ul>
<li>Fix compilation on Linux host due to lower case letters used in file <li>Fix compilation on Linux host due to lower case letters used in file
@ -201,6 +210,10 @@ names</li>
<li>Fix compilation on Linux host due to lower case letters used in file <li>Fix compilation on Linux host due to lower case letters used in file
names</li> names</li>
</ul></li> </ul></li>
<li><strong>Demonstrations/LocalNetwork/LocalNetwork_Concentrator/</strong>
<ul>
<li>Update CubeMonitor RF demo panel</li>
</ul></li>
<li><strong>Examples/PWR/PWR_STOP2_RTC</strong> <li><strong>Examples/PWR/PWR_STOP2_RTC</strong>
<ul> <ul>
<li>Fix PWR_STOP2_RTC test due to uninitialized RCC_OscInitStruct <li>Fix PWR_STOP2_RTC test due to uninitialized RCC_OscInitStruct
@ -223,11 +236,16 @@ struct</li>
<li><strong>Applications/LoRaWAN_FUOTA_DualCore_ExtFlash</strong> <li><strong>Applications/LoRaWAN_FUOTA_DualCore_ExtFlash</strong>
<ul> <ul>
<li>Fix compilation on Linux host due to lower case letters used in file <li>Fix compilation on Linux host due to lower case letters used in file
names<br /> names</li>
</li> </ul></li>
<li><strong>Applications/LoRaWAN/LoRaWAN_AT_Slave</strong>
<ul>
<li>Update CubeMonitor RF test panel</li>
</ul></li> </ul></li>
</ul></li> </ul></li>
</ul> </ul>
<p><br />
</p>
<h2 id="known-limitations">Known Limitations</h2> <h2 id="known-limitations">Known Limitations</h2>
<ul> <ul>
<li><strong>LL/HAL</strong> <li><strong>LL/HAL</strong>