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

EEPROM_Get_64_Bit_Data_Address

The EEPROM_Get_64_Bit_Data_Address() provides functionality for determining if the EEPROM unit is full and assigning the proper address, if required. If a full EEPROM unit is detected, EEPROM is erased using the EEPROM_Erase() function and the active EEPROM unit is switched.

First, the end address of EEPROM is set according to the device being used and the configuration. The END_OF_SECTOR directive is set in the EEPROM_Config.h file.

End_Address = (uint16 *)END_OF_SECTOR;  // Set End_Address for sector

Next, the EEPROM bank pointer is compared to the end address. If writing four 16-bit words beginning at the current EEPROM bank pointer goes beyond the end address, this indicates the sector is full. At this point, the active EEPROM unit is switched, new Write/Protection masks are configured, the Erase_Inactive_Unit flag is set, and the EEPROM EEPROM Bank Pointer is reset to the beginning of the newly active EEPROM unit.

if(Bank_Pointer > End_Address-3)         // Test if EEPROM is full
{
    EEPROM_ACTIVE_UNIT ^= 1; 

    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;

    Erase_Inactive_Unit = 1; 
    RESET_BANK_POINTER;  
}