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;
}
After a successful write, the function checks if the inactive EEPROM unit needs to be erased. If so, it calls EEPROM_Erase, clears the flag, and re-configures the W/E Protection Masks. The flag to set the blank check is raised before erase is called. The flag to erase the inactive unit is set in EEPROM_GetValid_Bank.
if (Erase_Inactive_Unit)
{
// Erase the inactive (full) EEPROM Bank
Erase_Blank_Check = 1;
EEPROM_Erase();
Erase_Inactive_Unit = 0;
// Re-configure Write/Erase Protection Masks for active EEPROM Bank
uint64 WE_Protection_AB_Mask = Configure_Protection_Masks(
FIRST_AND_LAST_SECTOR[EEPROM_ACTIVE_UNIT], NUM_EEPROM_SECTORS);
WE_Protection_A_Mask = 0xFFFFFFFF ^ (uint32)WE_Protection_AB_Mask;
WE_Protection_B_Mask = 0x00000FFF ^ WE_Protection_AB_Mask >> 32;
}