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

Differences From C28x

C28 Flash API Function SignatureC29 Flash API Function Signature
Fapi_FlashStatusType Fapi_getFsmStatus(void);
Fapi_FlashStatusType Fapi_getFsmStatus(
         uint32_t u32StartAddress,
         uint32_t u32UserFlashConfig
         );
Fapi_StatusType Fapi_checkFsmForReady(void);
Fapi_StatusType Fapi_checkFsmForReady(
         uint32_t u32StartAddress,
         uint32_t u32UserFlashConfig
         );
Fapi_StatusType Fapi_setActiveFlashBank(
         Fapi_FlashBankType oNewFlashBank
         );
No longer required/deprecated
void Fapi_flushPipeline(void);
void Fapi_flushPipeline(
         uint32_t u32UserFlashConfig
         );
Fapi_StatusType Fapi_setupBankSectorEnable(
         uint32_t reg_address,
         uint32_t value
         );
Fapi_StatusType Fapi_setupBankSectorEnable(
         uint32_t *pu32StartAddress,
         uint32_t u32UserFlashConfig,
         uint32_t reg_address,
         uint32_t value
         );
Fapi_StatusType Fapi_issueAsyncCommandWithAddress(
         Fapi_FlashStateCommandsType oCommand,
         uint32 *pu32StartAddress
         );
Fapi_StatusType Fapi_issueAsyncCommandWithAddress(
         Fapi_FlashStateCommandsType oCommand,
         uint32_t *pu32StartAddress,
         uint8_t u8Iterator,
         uint32_t  u32UserFlashConfig
         );
Fapi_StatusType Fapi_issueAsyncCommand(
         Fapi_FlashStateCommandsType oCommand
         );
Fapi_StatusType Fapi_issueAsyncCommand(
         uint32_t u32StartAddress,
         uint32_t  u32UserFlashConfig,
         Fapi_FlashStateCommandsType oCommand
         );
Fapi_StatusType Fapi_issueBankEraseCommand(
         uint32 *pu32StartAddress
         );
Fapi_StatusType Fapi_issueBankEraseCommand(
         uint32_t *pu32StartAddress,
         uint8_t u8Iterator,
         uint32_t  u32UserFlashConfig
         );
Fapi_StatusType Fapi_doBlankCheck(
         uint32 *pu32StartAddress,
         uint32 u32Length,
         Fapi_FlashStatusWordType *poFlashStatusWord
         );
Fapi_StatusType Fapi_doBlankCheck(
         uint32_t *pu32StartAddress,
         uint32_t u32Length,
         Fapi_FlashStatusWordType *poFlashStatusWord,
         uint8_t u8Iterator,
         uint32_t  u32UserFlashConfig
         );
Fapi_StatusType Fapi_doVerify(
         uint32 *pu32StartAddress,
         uint32 u32Length,
         uint32 *pu32CheckValueBuffer,
         Fapi_FlashStatusWordType *poFlashStatusWord
         );
Fapi_StatusType Fapi_doVerify(
         uint32_t *pu32StartAddress,
         uint32_t u32Length,
         uint32_t *pu32CheckValueBuffer,
         Fapi_FlashStatusWordType *poFlashStatusWord,
         uint8_t u8Iterator,
         uint32_t  u32UserFlashConfig
         );
Fapi_StatusType Fapi_doVerifyBy16bits(
         uint16 *pu16StartAddress,
         uint32 u16Length,
         uint16 *pu16CheckValueBuffer,
         Fapi_FlashStatusWordType *poFlashStatusWord
         );

Deprecated. Use

Fapi_StatusType Fapi_doVerifyByByte(
         uint8_t *pu8StartAddress,
         uint32_t u32Length,
         uint8_t *pu8CheckValueBuffer,
         Fapi_FlashStatusWordType *poFlashStatusWord,
         uint8_t u8Iterator,
         uint32_t  u32UserFlashConfig
         );
Fapi_StatusType Fapi_issueProgrammingCommand(
         uint32 *pu32StartAddress,
         uint16 *pu16DataBuffer,
         uint16  u16DataBufferSizeInWords,
         uint16 *pu16EccBuffer,
         uint16  u16EccBufferSizeInBytes,
         Fapi_FlashProgrammingCommandsType oMode
         );
Fapi_StatusType Fapi_issueProgrammingCommand(
         uint32_t *pu32StartAddress,
         uint8_t  *pu8DataBuffer,
         uint8_t  u8DataBufferSizeInBytes,
         uint8_t  *pu8EccBuffer,
         uint8_t  u8EccBufferSizeInBytes,
         Fapi_FlashProgrammingCommandsType oMode,
         uint32_t  u32UserFlashConfig
         );
Fapi_StatusType Fapi_issueDataOnly512ProgrammingCommand(
         uint32 *pu32StartAddress,
         uint16 *pu16DataBuffer,
         uint16  u16DataBufferSizeInWords
         );
Fapi_StatusType Fapi_issueDataOnly512ProgrammingCommand(
         uint32_t *pu32StartAddress,
         uint8_t *pu8DataBuffer,
         uint8_t  u8DataBufferSizeInBytes,
         uint32_t u32UserFlashConfig,
         uint8_t  u8Iterator
         );
Fapi_StatusType Fapi_issueAutoEcc512ProgrammingCommand(
         uint32 *pu32StartAddress,
         uint16 *pu16DataBuffer,
         uint16  u16DataBufferSizeInWords
         );
Fapi_StatusType Fapi_issueAutoEcc512ProgrammingCommand(
         uint32_t *pu32StartAddress,
         uint8_t  *pu8DataBuffer,
         uint8_t  u8DataBufferSizeInWords,
         uint32_t  u32UserFlashConfig,
         uint8_t  u8Iterator
         );
Fapi_StatusType Fapi_issueDataAndEcc512ProgrammingCommand(
         uint32 *pu32StartAddress,
         uint16 *pu16DataBuffer,
         uint16  u16DataBufferSizeInWords,
         uint16 *pu16EccBuffer,
         uint16  u16EccBufferSizeInBytes
         );
Fapi_StatusType Fapi_issueDataAndEcc512ProgrammingCommand(
         uint32_t *pu32StartAddress,
         uint8_t  *pu8DataBuffer,
         uint8_t  u8DataBufferSizeInWords,
         uint8_t  *pu8EccBuffer,
         uint8_t  u8EccBufferSizeInBytes,
         uint32_t u32UserFlashConfig,
         uint8_t  u8Iterator
         );
Fapi_StatusType Fapi_issueEccOnly64ProgrammingCommand(
         uint32 *pu32StartAddress,
         uint16 *pu16EccBuffer,
         uint16  u16EccBufferSizeInBytes
         );
Fapi_StatusType Fapi_issueEccOnly64ProgrammingCommand(
         uint32_t *pu32StartAddress,
         uint8_t *pu8EccBuffer,
         uint8_t  u8EccBufferSizeInBytes,
         uint32_t u32UserFlashConfig,
         uint8_t  u8Iterator
         );
uint8 Fapi_calculateEcc(
         uint32 u32Address,
         uint64 u64Data
         );
uint8_t Fapi_calculateEcc(
         uint32_t *pu32Address,
         uint64_t *pu64Data,
         uint8_t  u8Iterator
         );

Unlike F28P65x devices, the F29H85x memory model uses an interleaved flash bank system to keep up with the CPU processing speed. Figure 1-1 shows a diagram of the flash architecture.

 F29H85x Flash ArchitectureFigure 1-1 F29H85x Flash Architecture

This means that program and erase commands must be called twice, once for each interleaved bank. The exact specifics are handled within FlashAPI, with reads and writes now done through up to four Flash Read Interfaces (FRI-n) rather than a raw bank base address. There are four BankModes to choose from, affecting the memory split between CPUs 1 and 3 and whether or not swap is enabled. More specifics can be found in the F29H85x and F29P58x Real-Time Microcontrollers Technical Reference Manual.

To meet the requirements of this new architecture, several new parameters have been added to the functions, as shows above:

  • u32StartAddress: Tells Flash API which flash controller (FLCx) to use
  • u8Iterator: additional parameter for the user/API to track the command iteration between first interleaved bank and second interleaved bank
  • u32UserFlashConfig: Passes merged data about bank types and FOTA to the Flash API

Additionally, the F29 series of devices are byte/8-bit addressable, unlike the C28's 16-bit addressability.

For specific documentation on the flash architecture, see the F29H85x and F29P58x Real-Time Microcontrollers Technical Reference Manual.