2025-09-01 11:16 PM
Hi,
I have the following code inside a function that writes data into flash memory. I noticed that on the first iteration of the for loop, when HAL_FLASH_Program is called, it fails to write at the flash starting address 0x0801F080. However, from the second iteration onward, it successfully writes data into flash. Because of this, the initial data is missing.
While debugging, I found that the failure occurs due to this line:
The error value I get is 128 (decimal).
is there anything I am doing wrong?
1.JYI, I have erased the memory before write to confirm this I am observing FF bytes
2.To confirm again I have changed the address from 0x0801F080 to 0x0801F088 still same scenario occours
bool write_function(void)
{
HAL_StatusTypeDef status.
uint64_t temp;
uint32_t i, j.
HAL_FLASH_Unlock();
__HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP | FLASH_FLAG_WRPERR | FLASH_FLAG_PGAERR |
FLASH_FLAG_SIZERR | FLASH_FLAG_OPERR | FLASH_FLAG_PROGERR);
for (i = 0; i < 64; i += 4)
{
temp = 0;
for (j = 0; j < 4; j++)
{
if (i + j < 64)
{
temp |= ((uint64_t)data[i + j]) << (16 * j);
}
}
status = HAL_FLASH_Program(FLASH_TYPEPROGRAM_DOUBLEWORD,address + (i * 2), temp);
if (status != HAL_OK ||*(volatile U64 *)(address + (i * 2)) != temp)
{
HAL_FLASH_Lock();
return false;
}
}HAL_FLASH_Lock();
return TRUE;
}