SPRADE8 November   2023 TMS320F28P650DH , TMS320F28P650DK , TMS320F28P650SH , TMS320F28P650SK , TMS320F28P659DH-Q1 , TMS320F28P659DK-Q1 , TMS320F28P659SH-Q1

 

  1.   EEPROM Emulation for Generation 3 C2000 Real Time Controllers
  2.   Trademarks
  3. Introduction
  4. Difference Between EEPROM and On-Chip Flash
  5. 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
  6. Software Description
    1. 4.1 Software Functionality and Flow
  7. Ping-Pong Emulation
    1. 5.1 User-Configuration
      1. 5.1.1 EEPROM_Config.h
      2. 5.1.2 F28P65x_EEPROM.c
    2. 5.2 EEPROM Functions
      1. 5.2.1  EEPROM_Config_Check
      2. 5.2.2  Configure_Protection_Masks
      3. 5.2.3  EEPROM_Write
      4. 5.2.4  EEPROM_Read
      5. 5.2.5  EEPROM_Erase
        1. 5.2.5.1 Erase_Bank
      6. 5.2.6  EEPROM_GetValidBank
      7. 5.2.7  EEPROM_UpdateBankStatus
      8. 5.2.8  EEPROM_UpdatePageStatus
      9. 5.2.9  EEPROM_Get_64_Bit_Data_Address
      10. 5.2.10 EEPROM_Program_64_Bits
      11. 5.2.11 EEPROM_CheckStatus
      12. 5.2.12 ClearFSMStatus
    3. 5.3 Testing Example
  8. Single-Unit Emulation
    1. 6.1 User-Configuration
      1. 6.1.1 EEPROM_Config.h
      2. 6.1.2 F28P65x_EEPROM.c
    2. 6.2 EEPROM Functions
      1. 6.2.1  EEPROM_Config_Check
      2. 6.2.2  Configure_Protection_Masks
      3. 6.2.3  EEPROM_Write
      4. 6.2.4  EEPROM_Erase
      5. 6.2.5  EEPROM_GetValidBank
      6. 6.2.6  EEPROM_Get_64_Bit_Data_Address
      7. 6.2.7  EEPROM_UpdateBankStatus
      8. 6.2.8  EEPROM_UpdatePageStatus
      9. 6.2.9  EEPROM_Get_64_Bit_Data_Address
      10. 6.2.10 EEPROM_Program_64_Bits
      11. 6.2.11 EEPROM_CheckStatus
      12. 6.2.12 ClearFSMStatus
    3. 6.3 Testing Example
  9. Application Integration
  10. Adapting to Other Gen 3 C2000 MCUs
  11. Flash API
    1. 9.1 Flash API Checklist
      1. 9.1.1 Flash API Do's and Do Not's
  12. 10Source File Listing
  13. 11Conclusion
  14. 12References

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, it should be noted that F280013x only has one Flash Bank as opposed to the five within certain F28P65x devices. Thus, the CPU1_RAM Build Configuration should 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 should 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 should 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 will throw 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 should 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.