SPRADL4 January 2025 F29H850TU , F29H859TU-Q1
EEPROM_Write_Buffer() takes a pointer to an address in flash the write location) and a pointer to a 64-bit write buffer as input. It calls all the necessary FlashAPI functions to commit the write buffer to flash at the specified address.
It begins by clearing the FSM status and setting the proper protection masks.
Fapi_StatusType oReturnCheck;
Fapi_FlashStatusType oFlashStatus;
Fapi_FlashStatusWordType oFlashStatusWord;
ClearFSMStatus();
Fapi_setupBankSectorEnable((uint32_t*) FLASH_BANK_SELECT, u32UserFlashConfig,
FLASH_NOWRAPPER_O_CMDWEPROTA, WE_Protection_A_Mask);
Fapi_setupBankSectorEnable((uint32_t*) FLASH_BANK_SELECT, u32UserFlashConfig,
FLASH_NOWRAPPER_O_CMDWEPROTB, WE_Protection_B_Mask);
Then the data from the write buffer is programmed to flash.
oReturnCheck = Fapi_issueProgrammingCommand((uint32_t*) address, (uint8_t*) write_buffer,
WRITE_SIZE_BYTES, 0, 0, Fapi_AutoEccGeneration, u32UserFlashConfig);
while (Fapi_checkFsmForReady((uint32_t) address, u32UserFlashConfig) == Fapi_Status_FsmBusy);
Finally, it checks for any programming errors and verifies the correct data was written.
if (oReturnCheck != Fapi_Status_Success)
{
Sample_Error();
}
oFlashStatus = Fapi_getFsmStatus((uint32_t) address, u32UserFlashConfig);
if (oFlashStatus != 3)
{
FMSTAT_Fail();
}
oReturnCheck = Fapi_doVerify((uint32_t*) address, VERIFY_LEN, (uint32_t*) write_buffer,
&oFlashStatusWord, 0, u32UserFlashConfig);
if (oReturnCheck != Fapi_Status_Success)
{
Sample_Error();
}