Content originally posted in LPCWare by simm on Thu Apr 07 04:43:35 MST 2011
I use IAP functions but I have still a problem with saving value in Flash.
I use function similar like in example with secendary bootloader but it doesn't work correcly.
This function work only if I program application by Hyperterminal and use this function.
When I want to save some value without programming app it doesn't work.
Do you know where is a problem?
*****************************************************************************/
static uint32_t u32Bootloader_WriteVerInfo(uint16_t AssressWordOffset, uint32_t Value)
{
uint32_t ind;
uint32_t u32Result = 0;
uint32_t a32DummyData[IAP_FLASH_PAGE_SIZE_WORDS];
uint32_t *pu32Mem = (uint32_t *)(APP_END_ADDR - IAP_FLASH_PAGE_SIZE_BYTES);
/* First copy the data that is currently present in the last page of
flash into a temporary buffer */
for (ind = 0 ; ind < IAP_FLASH_PAGE_SIZE_WORDS; ind++)
{
a32DummyData[ind] = *pu32Mem++;
}
ind=((VERINFO_ADDR & 0xFF)>>2) + AssressWordOffset;
a32DummyData[ind] = (uint32_t)Value;
if (u32IAP_PrepareSectors(APP_END_SECTOR, APP_END_SECTOR) == IAP_STA_CMD_SUCCESS)
{
/* Now write the data back */
if (u32IAP_CopyRAMToFlash((APP_END_ADDR - IAP_FLASH_PAGE_SIZE_BYTES),(uint32_t)a32DummyData,IAP_FLASH_PAGE_SIZE_BYTES) == IAP_STA_CMD_SUCCESS)
{
/* Check that the write was successful */
if (u32IAP_Compare((APP_END_ADDR - IAP_FLASH_PAGE_SIZE_BYTES),(uint32_t)a32DummyData, IAP_FLASH_PAGE_SIZE_BYTES, 0) == IAP_STA_CMD_SUCCESS)
{
u32Result = 1;
}
}
}
return (u32Result);
}