SPRUJ27C November   2022  – November 2023 TMS320F280033 , TMS320F280034 , TMS320F280034-Q1 , TMS320F280036-Q1 , TMS320F280036C-Q1 , TMS320F280037 , TMS320F280037-Q1 , TMS320F280037C , TMS320F280037C-Q1 , TMS320F280038-Q1 , TMS320F280038C-Q1 , TMS320F280039 , TMS320F280039-Q1 , TMS320F280039C , TMS320F280039C-Q1

 

  1.   1
  2.   Trademarks
  3. 1Introduction
    1. 1.1 Reference Material
    2. 1.2 Function Listing Format
  4. 2TMS320F28003x 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 FMC and Bank Setup
        3. 2.3.1.3 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
  5. 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_issueAsyncCommandWithAddress()
      3. 3.2.3 Fapi_issueBankEraseCommand()
      4. 3.2.4 Fapi_issueProgrammingCommand()
      5. 3.2.5 Fapi_issueProgrammingCommandForEccAddresses()
      6. 3.2.6 Fapi_issueFsmSuspendCommand()
      7. 3.2.7 Fapi_issueAsyncCommand()
      8. 3.2.8 Fapi_checkFsmForReady()
      9. 3.2.9 Fapi_getFsmStatus()
    3. 3.3 Read Functions
      1. 3.3.1 Fapi_doBlankCheck()
      2. 3.3.2 Fapi_doVerify()
      3. 3.3.3 Fapi_calculatePsa()
      4. 3.3.4 Fapi_doPsaVerify()
    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_remapEccAddress()
      5. 3.5.5 Fapi_calculateFletcherChecksum()
  6. 4Recommended FSM Flows
    1. 4.1 New Devices From Factory
    2. 4.2 Recommended Erase Flow
    3. 4.3 Recommended Bank Erase Flow
    4. 4.4 Recommended Program Flow
  7. 5Software Application Assumptions of Use Related to Safety
  8.   A Flash State Machine Commands
    1.     A.1 Flash State Machine Commands
  9.   B Compiler Version and Build Settings
  10.   C Object Library Function Information
    1.     C.1 TMS320F28003x Flash API Library
  11.   D Typedefs, Defines, Enumerations and Structures
    1.     D.1 Type Definitions
    2.     D.2 Defines
    3.     D.3 Enumerations
      1.      D.3.1 Fapi_FlashProgrammingCommandsType
      2.      D.3.2 Fapi_FlashBankType
      3.      D.3.3 Fapi_FlashStateCommandsType
      4.      D.3.4 Fapi_FlashReadMarginModeType
      5.      D.3.5 Fapi_StatusType
      6.      D.3.6 Fapi_ApiProductionStatusType
    4.     D.4 Structures
      1.      D.4.1 Fapi_FlashStatusWordType
      2.      D.4.2 Fapi_LibraryInfoType
  12.   E Parallel Signature Analysis (PSA) Algorithm
    1.     E.1 Function Details
  13.   F ECC Calculation Algorithm
    1.     F.1 Function Details
  14.   G Errata
  15.   Revision History

Fapi_issueBankEraseCommand()

Issues a bank erase command to the Flash State Machine along with a user-provided sector mask.

Synopsis

Fapi_StatusType Fapi_issueBankEraseCommand(      
         uint32 *pu32StartAddress,
         uint16 oSectorMask)

Parameters

pu32StartAddress [in] Flash bank address for bank erase operation
OSectorMask [in] 16-bit mask indicating which sectors to mask from the bank erase operation

Description

This function issues a bank erase command to the Flash state machine for the user-provided bank address. If the FSM is busy with another operation, the function returns indicating the FSM is busy, otherwise it proceeds with the bank erase operation. A 16-bit user-provided sector mask indicates which sectors the user wants to mask from the bank erase operation, that is, sectors that will not be erased. Each bit represents a sector, with Bit 0 representing Sector 0, Bit 1 representing Sector 1, and so on until Bit 15, which represents Sector 15. If a bit in the mask is 1, that particular sector is not erased.

Bank erase can not be suspended. If the user application issues a suspend command (using Fapi_issueFsmSuspendCommand()) during an active bank erase operation, suspend function will return an error.

Note: It is important to provide the correct sector mask for the bank erase command. If the mask is mistakenly chosen to erase an inaccessible sector (belongs to other security zone), the bank erase command will continue attempting to erase the sector endlessly and the FSM will never exit (since erase will not succeed). To avoid such situation, user must take care to provide the correct mask. However, given that there is a chance of choosing an incorrect mask, TI suggests to initialize the max allowed erase pulses to zero after the max number of pulses are issued by the FSM for the bank erase operation. This will ensure that the FSM will end the bank erase command after trying to erase the inaccessible sector up to the max allowed erase pulses.

The Example_EraseBanks() function in the C2000Ware’s Flash API usage example depicts the implementation of this sequence as shown below in the Sample Implementation section (content of the while loop waiting for the FSM to complete the command). Users must include use this code as-is irrespective of whether or not the security is used by the application. This is needed for the FSM to exit from the bank erase operation in case of an erase failure.

Return Value

  • Fapi_Status_Success (success)
  • Fapi_Status_FsmBusy (FSM busy)
  • Fapi_Error_FlashRegsNotWritable (Flash registers not writable)
  • Fapi_Error_InvalidBaseRegCntlAddress (failure: Flash control register base address provided by user does not match the expected address)
Sample Implementation

For more details, see the Example_EraseBanks() in the flash API usage example in C2000Ware at C:\ti\c2000\C2000Ware_x_xx_xx_xx\driverlib\f28003x\examples\flash\flashapi_ex1_programming.c. A portion of the example is shown below to illustrate how to initialize the erase pulses to zero after issuing max pulses.

    u32CurrentAddress = Bzero_Sector8_start;
    oReturnCheck = Fapi_issueBankEraseCommand((uint32 *)u32CurrentAddress,     0x001F);

    // Wait until FSM is done with bank erase operation
    while (Fapi_checkFsmForReady() != Fapi_Status_FsmReady)
    {
         //
         // Initialize the Erase Pulses to zero after issuing max pulses
         //
         if(HWREG(FLASH0CTRL_BASE + FLASH_O_ACC_EP) > MAX_ERASE_PULSE)
         {
             EALLOW;

             //
             // Enable Flash Optimization
             //
             HWREG(FLASH0CTRL_BASE + FLASH_O_OPT) = OPT_ENABLE;

             HWREG(FLASH0CTRL_BASE + FLASH_O_ERA_PUL) =
                     HWREG(FLASH0CTRL_BASE + FLASH_O_ERA_PUL) &
                     ~(uint32_t)FLASH_ERA_PUL_MAX_ERA_PUL_M;

             //
             // Disable Flash Optimization
             //
             HWREG(FLASH0CTRL_BASE + FLASH_O_OPT) = OPT_DISABLE;

             EDIS;
         }
    }