SPRADE8 November 2023 TMS320F28P650DH , TMS320F28P650DK , TMS320F28P650SH , TMS320F28P650SK , TMS320F28P659DH-Q1 , TMS320F28P659DK-Q1 , TMS320F28P659SH-Q1
The EEPROM_Write() function provides the functionality for programming the data to Flash. It leverages the Flash API directly and makes several function calls within to prepare for data programming. The functions called are listed below:
Each of the above functions are described in detail in their respective sections. To begin, the current EEPROM bank and page are found. After the current EEPROM bank and page are found, the page status of the previous page is updated and the EEPROM bank status is updated if a new EEPROM bank is being used.
EEPROM_GetValidBank(); // Find Current Bank and Current Page
EEPROM_UpdatePageStatus(); // Update Page Status of previous page
EEPROM_UpdateBankStatus(); // Update Bank Status of current and previous bank
Next, the actual programming occurs. 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.00.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;
}