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_issueAsyncCommand()

Issues a command to the Flash State Machine. See the description for the list of commands that can be issued by this function.

Synopsis

Fapi_StatusType Fapi_issueAsyncCommand(
         Fapi_FlashStateCommandsType oCommand)

Parameters

oCommand [in] Command to issue to the FSM

Description

This function issues a command to the Flash State Machine for commands not requiring any additional information (such as address). Typical commands are Clear Status, Program Resume, Erase Resume and Clear_More. This function does not wait until the command is over; it just issues the command and returns back. Hence, the user application must wait for the FMC to complete the given command before returning to any kind of Flash accesses. The Fapi_checkFsmForReady() function can be used to monitor the status of an issued command.

Below are the details of these commands:

  • Fapi_ClearStatus: Executing this command clears the ILA, PGV, EV, CSTAT, and INVDAT bits in the FMSTAT register. Flash API issues this command before issuing a program or an erase command.
  • Fapi_ClearMore: Executing this command clears everything the Clear Status command clears and additionally, clears the ESUSP and PSUSP bits in the FMSTAT register.
  • Fapi_ProgramResume: Executing this command will resume the previously suspended program operation. Issuing a resume command when suspend is not active has no effect. Note that a new program operation cannot be initiated while a previous program operation is suspended. After the program resume (Fapi_ProgramResume) command is completed, Fapi_doVerify() should be used to ensure that the data is programmed as required. If the data is not programmed, user application should program the corresponding data again by calling the program function.
  • Fapi_EraseResume: Executing this command will resume the previously suspended erase operation. Issuing a resume command when suspend is not active has no effect. Note that a new erase operation cannot be initiated while a previous erase operation is suspended.
Note: This function does not check FMSTAT after issuing the command. The user application must check the FMSTAT value when FSM has completed the operation. FMSTAT indicates if there is any failure occurrence during the operation. The user application can use the Fapi_getFsmStatus function to obtain the FMSTAT value.

Return Value

  • Fapi_Status_Success (success)
  • Fapi_Error_FeatureNotAvailable (failure: User passed a command that is not supported)

Sample Implementation

#include “F021_F28003x_C28x.h”
#define CPUCLK_FREQUENCY   120   /* 120 MHz System frequency */
int main(void)
{
     //     
     // Initialize System Control
     //
     Device_init();
 
     //
     // Call Flash Initialization to setup flash waitstates
     // This function must reside in RAM
     //
     Flash_initModule(FLASH0CTRL_BASE, FLASH0ECC_BASE, DEVICE_FLASH_WAITSTATES);
     
     //
     // Jump to RAM and call the Flash API functions
     //
     Example_CallFlashAPI();
}
#pragma CODE_SECTION(Example_CallFlashAPI, ramFuncSection);
void Example_CallFlashAPI(void)
{
     Fapi_StatusType oReturnCheck;
     Fapi_FlashStatusType oFlashStatus;
     uint16 au16DataBuffer[8] = {0x0001, 0x0203, 0x0405, 0x0607, 0x0809, 0x0A0B, 0x0C0D, 0x0E0F};
     uint32 *DataBuffer32 = (uint32 *)au16DataBuffer;
     uint32 u32Index = 0;
     //
     // Bank0 operations
     //
     EALLOW;
     //
     // This function is required to initialize the Flash API based on 
     // System frequency before any other Flash API operation can be performed
     // Note that the FMC register base address and system frequency are passed as the parameters
     //
     oReturnCheck = Fapi_initializeAPI(F021_CPU0_BASE_ADDRESS, CPUCLK_FREQUENCY);
     if(oReturnCheck != Fapi_Status_Success)
     {
          Example_Error(oReturnCheck);
     }
 
     // 
     // Fapi_setActiveFlashBank function initializes Flash banks 
     // and FMC for erase and program operations.
     //
     oReturnCheck = Fapi_setActiveFlashBank(Fapi_FlashBank0);
      
     if(oReturnCheck != Fapi_Status_Success)
     {
          Example_Error(oReturnCheck);
     }
     //
     // Issue an async command
     //
     oReturnCheck = Fapi_issueAsyncCommand(Fapi_ClearMore);
     // 
     // Wait until the Fapi_ClearMore operation is over
     // 
     while (Fapi_checkFsmForReady() != Fapi_Status_FsmReady){}
     if(oReturnCheck != Fapi_Status_Success)
     {
         Example_Error (oReturnCheck);
     }
     // 
     // Read FMSTAT register contents to know the status of FSM after
     // program command to see if there are any program operation related errors
     // 
     oFlashStatus = Fapi_getFsmStatus();
     if(oFlashStatus != 0)
     {
          //
          //Check FMSTAT and debug accordingly
          //   
          FMSTAT_Fail();
     }
  
     // 
     // * User code for further Bank0 flash operations *
     //
     .
     .
     .
     .
    
 
     EDIS;
     //
     // Example is done here
     //
     Example_Done();
 
}