SPRADE8A November 2023 – April 2024 F29H850TU , F29H859TU-Q1 , TMS320F28P650DH , TMS320F28P650DK , TMS320F28P650SH , TMS320F28P650SK , TMS320F28P659DH-Q1 , TMS320F28P659DK-Q1 , TMS320F28P659SH-Q1
The EEPROM_UpdatePageData() function provides functionality for updating the EEPROM page data. This function is called from the EEPROM_Write() function.
The following steps need to be taken to achieve this:
// Clears status of previous Flash operation
ClearFSMStatus();
Fapi_setupBankSectorEnable(FLASH_WRAPPER_PROGRAM_BASE+FLASH_O_CMDWEPROTA, WE_Protection_A_Mask);
Fapi_setupBankSectorEnable(FLASH_WRAPPER_PROGRAM_BASE+FLASH_O_CMDWEPROTB, WE_Protection_B_Mask);
// Variable for page offset
//(first write position has offset of 2 (64 bits),
// second has offset of 4 (128 bits), etc.)
uint32 Page_Offset = 4 + (2 * i);
// Program data located in Write_Buffer to current page
oReturnCheck = Fapi_issueProgrammingCommand((uint32*) Page_Pointer + Page_Offset,Write_Buffer + (i*4), 4, 0, 0,Fapi_AutoEccGeneration);
// Wait for completion and check for any programming errors
EEPROM_CheckStatus(&oReturnCheck);
The following parameters are passed to the Flash API for programming.
The fourth and fifth parameters are zero when using Fapi_AutoEccGeneration mode. For more details, see the TMS320F28P65x Flash API Version 3.02.00.00 Reference Guide.
If the programming is successful, the page status of the current page is updated and the Empty_EEPROM flag is cleared. The code is shown below:
if(oReturnCheck == Fapi_Status_Success)
{
// Set Page Status to Current Page
Page_Status[0] = CURRENT_PAGE;
Page_Status[1] = CURRENT_PAGE;
Page_Status[2] = CURRENT_PAGE;
Page_Status[3] = CURRENT_PAGE;
Fapi_setupBankSectorEnable(FLASH_WRAPPER_PROGRAM_BASE+FLASH_O_CMDWEPROTA, WE_Protection_A_Mask);
Fapi_setupBankSectorEnable(FLASH_WRAPPER_PROGRAM_BASE+FLASH_O_CMDWEPROTB, WE_Protection_B_Mask);
oReturnCheck = Fapi_issueProgrammingCommand((uint32*)Page_Pointer,
Page_Status, 4, 0, 0,
Fapi_AutoEccGeneration);
// Wait for completion and check for any programming errors
EEPROM_CheckStatus(&oReturnCheck);
Empty_EEPROM = 0;
}
if (Erase_Inactive_Unit)
{
// Erase the inactive (full) EEPROM Bank
Erase_Inactive_Unit = 0;
}