ZHCUAO0C 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
向闪存状态机发出擦除命令以及用户提供的扇区地址。
概要
Fapi_StatusType Fapi_issueAsyncCommandWithAddress(
Fapi_FlashStateCommandsType oCommand,
uint32 *pu32StartAddress)
参数
oCommand [in] | 向 FSM 发出的命令。使用 Fapi_EraseSector |
pu32StartAddress [in] | 用于擦除操作的闪存扇区地址 |
说明
该函数针对用户提供的扇区地址向闪存状态机发出擦除命令。该函数不会等到擦除操作结束;它只是发出命令并返回。因此,当使用 Fapi_EraseSector 命令时,该函数始终返回成功状态。用户应用程序必须等待 FMC 完成擦除操作,然后才能返回到任何类型的闪存访问。Fapi_checkFsmForReady() 函数可用于监测已发出命令的状态。
此外,如果应用程序同时进行存储体擦除和扇区擦除操作,则应用程序必须在调用该函数进行扇区擦除操作之前向 FSM 发出 Fapi_ClearMore 命令(使用 Fapi_issueAsyncCommand)。在执行存储体擦除命令之后,需要执行 Fapi_ClearMore 命令将 FSM 初始化为干净状态从而进行扇区擦除操作。如果应用程序中仅使用其中一个擦除操作(扇区擦除或存储体擦除),则无需在扇区擦除操作之前发出 Fapi_ClearMore 命令。
此外,用户应用程序应使用 Fapi_doBlankCheck() 函数来验证闪存是否被擦除。
返回值
实现示例
#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();
}