SPRADE8B November   2023  – August 2025 F29H850TU , F29H859TU-Q1 , TMS320F28P650DH , TMS320F28P650DK , TMS320F28P650SH , TMS320F28P650SK , TMS320F28P659DH-Q1 , TMS320F28P659DK-Q1 , TMS320F28P659SH-Q1

 

  1.   1
  2.   Abstract
  3.   Trademarks
  4. Introduction
  5. Difference Between EEPROM and On-Chip Flash
  6. Overview
    1. 3.1 Basic Concept
    2. 3.2 Single-Unit Method
    3. 3.3 Ping-Pong Method
    4. 3.4 Creating EEPROM Sections (Pages) and Page Identification
  7. Software Description
  8. Ping-Pong Emulation
    1. 5.1 User-Configuration
      1. 5.1.1 EEPROM_PingPong_Config.h
      2. 5.1.2 F28P65x_EEPROM_PingPong.c
    2. 5.2 Testing Example
  9. EEPROM Functions
    1. 6.1  EEPROM_Config_Check
    2. 6.2  Configure_Protection_Masks
    3. 6.3  EEPROM_Write
    4. 6.4  EEPROM_Read
    5. 6.5  EEPROM_Erase
      1. 6.5.1 Erase_Bank
    6. 6.6  EEPROM_GetValidBank
    7. 6.7  EEPROM_UpdateBankStatus
    8. 6.8  EEPROM_UpdatePageStatus
    9. 6.9  EEPROM_UpdatePageData
    10. 6.10 EEPROM_Get_64_Bit_Data_Address
    11. 6.11 EEPROM_Program_64_Bits
    12. 6.12 EEPROM_CheckStatus
    13. 6.13 ClearFSMStatus
  10. Single-Unit Emulation
    1. 7.1 User-Configuration
      1. 7.1.1 EEPROM_Config.h
      2. 7.1.2 F28P65x_EEPROM.c
    2. 7.2 EEPROM Functions
      1. 7.2.1  EEPROM_Config_Check
      2. 7.2.2  Configure_Protection_Masks
      3. 7.2.3  EEPROM_Write
      4. 7.2.4  EEPROM_Read
      5. 7.2.5  EEPROM_Erase
      6. 7.2.6  EEPROM_GetValidBank
      7. 7.2.7  EEPROM_Get_64_Bit_Data_Address
      8. 7.2.8  EEPROM_UpdateBankStatus
      9. 7.2.9  EEPROM_UpdatePageStatus
      10. 7.2.10 EEPROM_UpdatePageData
      11. 7.2.11 EEPROM_Get_64_Bit_Data_Address
      12. 7.2.12 EEPROM_Program_64_Bits
      13. 7.2.13 EEPROM_CheckStatus
      14. 7.2.14 ClearFSMStatus
    3. 7.3 Testing Example
  11. Application Integration
    1. 8.1 Software Functionality and Flow
  12. Adapting to Other Gen 3 C2000 MCUs
  13. 10Flash API
    1. 10.1 Flash API Checklist
      1. 10.1.1 Flash API Do's and Do Not's
  14. 11Source File Listing
  15. 12Troubleshooting
    1. 12.1 General
  16. 13Conclusion
  17. 14References
  18. 15Revision History

Adapting to Other Gen 3 C2000 MCUs

As discussed earlier in the document, this guide uses the F28P65x to demonstrate the EEPROM Emulation functionality. However, this project can be adapted to other Gen 3 C2000 MCUs by making small changes to macros and function definitions. To show this, this section discusses the changes required to use the F280013x.

First and foremost, note that F280013x only has one Flash Bank as opposed to the five within certain F28P65x devices. Thus, the CPU1_RAM Build Configuration must be used instead of the CPU1_FLASH Build Configuration. This is necessary because the Flash API cannot be executed on the same Flash Bank in which it is contained.

Additionally, the default configuration contained in the EEPROM_Config.h file uses device specific values to create definitions and macros. These must be updated to the values found in the TMS320F280013x Real-Time Microcontrollers Data Sheet. In the case of the F280013x, these values happen to be the same as the default configuration for the F28P65x, but these values must always be verified with the device-specific data sheet.

#define FLASH_BANK_SELECT 0x80000


#define FLASH_SECTOR_SIZE 0x400


#define NUM_FLASH_SECTORS 128

These values are important for error-checking within EEPROM_Config_Check as well as defining the beginning/end address of EEPROM Emulation.

Finally, the EEPROM_Config_Check() function needs to be modified when using the F280013x. By default, Flash Bank 0 is reserved for storing the Flash API, and the function throws an error if this Flash Bank is selected for EEPROM Emulation. However, since the CPU_1_RAM Build Configuration is selected, Flash Bank 0 is now available for EEPROM Emulation. Thus, these lines must be removed or commented out in the function.

if (FLASH_BANK_SELECT == FlashBank0StartAddress)
{
    return 0xFFFF;
}

While the changes required for using the F280013x are relatively simple, using other Gen 3 C2000 MCUs can require more changes. For a list of available projects, see the Troubleshooting section.