SPRUJE7A January   2025  – July 2025 F29H850TU , F29H859TU-Q1

 

  1.   1
  2.   Abstract
  3.   Trademarks
  4. 1Introduction
    1. 1.1 Differences From C28x
    2. 1.2 Function Listing Format
  5. 2F29H85x Flash API Overview
    1. 2.1 Introduction
    2. 2.2 API Overview
    3. 2.3 Using API
      1. 2.3.1 Initialization Flow
        1. 2.3.1.1 After Device Power Up
        2. 2.3.1.2 On System Frequency Change
      2. 2.3.2 Building With the API
        1. 2.3.2.1 Object Library Files
        2. 2.3.2.2 Distribution Files
      3. 2.3.3 Key Facts for Flash API Usage
  6. 3API Functions
    1. 3.1 Initialization Functions
      1. 3.1.1 Fapi_initializeAPI()
    2. 3.2 Flash State Machine Functions
      1. 3.2.1  Fapi_setActiveFlashBank()
      2. 3.2.2  Fapi_setupBankSectorEnable()
      3. 3.2.3  Fapi_issueAsyncCommandWithAddress()
      4. 3.2.4  Fapi_issueBankEraseCommand()
      5. 3.2.5  Fapi_issueProgrammingCommand()
      6. 3.2.6  Fapi_issueAutoEcc512ProgrammingCommand()
      7. 3.2.7  Fapi_issueDataAndEcc512ProgrammingCommand()
      8. 3.2.8  Fapi_issueDataOnly512ProgrammingCommand()
      9. 3.2.9  Fapi_issueEccOnly64ProgrammingCommand()
      10. 3.2.10 Fapi_issueAsyncCommand()
      11. 3.2.11 Fapi_checkFsmForReady()
      12. 3.2.12 Fapi_getFsmStatus()
    3. 3.3 Read Functions
      1. 3.3.1 Fapi_doBlankCheck()
      2. 3.3.2 Fapi_doVerify()
      3. 3.3.3 Fapi_doVerifyByByte()
    4. 3.4 Informational Functions
      1. 3.4.1 Fapi_getLibraryInfo()
    5. 3.5 Utility Functions
      1. 3.5.1 Fapi_flushPipeline()
      2. 3.5.2 Fapi_calculateEcc()
      3. 3.5.3 Fapi_isAddressEcc()
      4. 3.5.4 Fapi_getUserConfiguration()
      5. 3.5.5 Fapi_setFlashCPUConfiguration()
      6. 3.5.6 Fapi_issueProgBankMode()
  7. 4SECCFG and BANKMGMT Programming Using the Flash API
    1. 4.1 BANKMGMT Programming
    2. 4.2 SECCFG Programming
  8. 5Allowed Programming Ranges for All Modes
  9. 6Recommended FSM Flows
    1. 6.1 New Devices From Factory
    2. 6.2 Recommended Erase Flow
    3. 6.3 Recommended Bank Erase Flow
    4. 6.4 Recommended Program Flow
  10. 7References
  11.   A Flash State Machine Commands
  12.   B Typedefs, Defines, Enumerations and Structure
    1.     B.1 Type Definitions
    2.     B.2 Defines
    3.     B.3 Enumerations
      1.      B.3.1 Fapi_FlashProgrammingCommandsType
      2.      B.3.2 Fapi_FlashBankType
      3.      B.3.3 Fapi_FlashStateCommandsType
      4.      B.3.4 Fapi_StatusType
      5.      B.3.5 Fapi_ApiProductionStatusType
      6.      B.3.6 Fapi_BankID
      7.      B.3.7 Fapi_FLCID
      8.      B.3.8 Fapi_BankMode
      9.      B.3.9 Fapi_CPU1BankSwap
      10.      B.3.10 Fapi_CPU3BankSwap
      11.      B.3.11 Fapi_FOTAStatus
      12.      B.3.12 Fapi_SECVALID
      13.      B.3.13 Fapi_BankMgmtAddress
    4.     B.4 Structures
      1.      B.4.1 Fapi_FlashStatusWordType
      2.      B.4.2 Fapi_LibraryInfoType
  13.   Revision History

BANKMGMT Programming

Users can program the BANKMGMT using the Fapi_issueProgBankMode() function. This memory range can also be programmed manually by following the process below:

  1. Issue an erase sector command. Users can always provide an active FLC1 or FLCS2 address (see the table below) when erasing the BANKMGMT sector from Flash API.
    Bank Mode FLC1 BANKMGMT Sector Address FLC2 BANKMGMT Sector Address
    Mode 0 0x10D8 0000 N/A
    Mode 1 0x10D8 0000 N/A
    Mode 2 0x10D8 0000 N/A
    Mode 3 0x10D8 0000 0x10D9 0000
    Note: Users can always give an erase sector command using Fapi_issueAsyncCommandWithAddress() before programming the BANKMGMT sector. For an example on how to erase a sector, see the flash programming example located in the F29 SDK at "f29h85x-sdk > examples > driverlib > single_core > flash > flash_mode0_128_program".
  2. Issue a 128-bit programming command to the BANKMGMT sector, use the below tables to determine the correct values to program. A valid FLC1 address must be provided when programming the BANKMGMT sector using Flash API.
    Table 4-1 BANKMGMT Registers
    Register Value Notes
    BANK_STATUS[63:0] 0x55555555_55555555 Offset 0 in the data buffer (see the below code snippet).
    BANK_UPDATE_CTR[63:0] 0x00000000_00000000 Offset 8 in the data buffer (see the below code snippet).
    When programming the BANKMGMT sector, can always be set to 0. Flash API internally reads the counter from the active BANKMGMT sector, decrements it by 1, and program it to the inactive sector
    BANKMODE[63:0] Refer to BANKMODE Values Offset 16 in the data buffer (see the below code snippet).
    Contains the current BANKMODE value
    Table 4-2 BANKMODE Values
    BANKMODE BANKMODE[63:0] Value Buffer With Offset
    Mode 0 0x03 Buffer[16] = 0x03
    Mode 1 0x06 Buffer[16] = 0x06
    Mode 2 0x09 Buffer[16] = 0x09
    Mode 3 0x0C Buffer[16] = 0x0C

    An example programming flow, assuming the sector has already been erased:

    uint8 Buffer[32] = { 
    	0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, // BANK_STATUS
    	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // BANK_UPDATE_CTR
    	0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // BANKMODE
    	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF  // Unused
    };
    
    ClearFSMStatus(u32Index, u32UserFlashConfig);
    
    Fapi_setupBankSectorEnable((uint32 *)u32Index, u32UserFlashConfig, FLASH_NOWRAPPER_O_CMDWEPROTNM, 0x00000000);
    
    oReturnCheck = Fapi_issueProgrammingCommand((uint32 *)u32Index,Buffer +i,
    		16, 0, 0, Fapi_AutoEccGeneration, u32UserFlashConfig);
    
    while(Fapi_checkFsmForReady(u32Index, u32UserFlashConfig) == Fapi_Status_FsmBusy);
    
    if(oReturnCheck != Fapi_Status_Success)
    {
    	//
    	// Check Flash API documentation for possible errors
    	//
    	Example_Error(oReturnCheck);
    }
    
    oFlashStatus = Fapi_getFsmStatus(u32Index, u32UserFlashConfig);
    if(oFlashStatus != 3)
    {
    	//
    	//Check FMSTAT and debug accordingly
    	//
    	FMSTAT_Fail();
    }
  3. After programming the BANKMGMT sector, an external reset (XSRn) must be issued in order for boot ROM to read the new value and write it to the SSU register.

For more information, see the F29H85x and F29P58x Real-Time Microcontrollers Technical Reference Manual.