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
Issues an erase command to the Flash State Machine along with a user-provided sector address.
Synopsis
Fapi_StatusType Fapi_issueAsyncCommandWithAddress(
Fapi_FlashStateCommandsType oCommand,
uint32 *pu32StartAddress)
Parameters
oCommand [in] | Command to issue to the FSM. Use Fapi_EraseSector |
pu32StartAddress [in] | Flash sector address for erase operation |
Description
This function issues an erase command to the Flash State Machine for the user-provided sector address. This function does not wait until the erase operation is over; it just issues the command and returns back. Hence, this function always returns success status when the Fapi_EraseSector command is used. The user application must wait for the FMC to complete the erase operation before returning to any kind of Flash accesses. The Fapi_checkFsmForReady() function can be used to monitor the status of an issued command.
Further, if the application uses both the bank erase and sector erase operations, the application must issue the Fapi_ClearMore command to the FSM (using Fapi_issueAsyncCommand) prior to calling this function for sector erase operation. After a bank erase command, Fapi_ClearMore command is needed to initialize the FSM to a clean state for sector erase operation. If only one of the erases (sector erase or bank erase) is used in the application, then there is no need to issue Fapi_ClearMore command before a sector erase operation.
Also, the user application should use the Fapi_doBlankCheck() function to verify that the Flash is erased.
Return Value
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;
//
// 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);
}
//
// Code for bank erase (not shown here)
//
//
// Code for Bank 0 sector 4 program (not shown here)
//
//
// Issue ClearMore command - Required prior to Sector Erase
//
oReturnCheck = Fapi_issueAsyncCommand(Fapi_ClearMore);
//
// Wait until FSM is done with clear more operation
//
while (Fapi_checkFsmForReady() != Fapi_Status_FsmReady){}
if(oReturnCheck != Fapi_Status_Success)
{
//
// Check Flash API documentation for possible errors
//
Example_Error(oReturnCheck);
}
//
// Bank0 Flash operations
//
//
// Erase Bank0 Sector4
//
oReturnCheck = Fapi_issueAsyncCommandWithAddress(Fapi_EraseSector, (uint32 *)0x84000);
//
// Wait until FSM is done with erase sector operation
//
while(Fapi_checkFsmForReady() != Fapi_Status_FsmReady){}
if(oReturnCheck != Fapi_Status_Success)
{
Example_Error (oReturnCheck);
}
//
// Read FMSTAT contents to know the status of FSM
// after erase command to see if there are any erase operation
// related errors
//
oFlashStatus = Fapi_getFsmStatus();
if (oFlashStatus!=0)
{
FMSTAT_Fail();
}
//
// Do blank check.
// Verify that the sector is erased.
//
oReturnCheck = Fapi_doBlankCheck((uint32 *)0x84000, 0x800,&oFlashStatusWord);
if(oReturnCheck != Fapi_Status_Success)
{
Example_Error(oReturnCheck);
}
//
// * User code for further Bank0 flash operations *
//
.
.
.
.
//
// Example is done here
//
Example_Done();
}