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_issueBankEraseCommand(
uint32 *pu32StartAddress,
uint16 oSectorMask)
参数
pu32StartAddress [in] | 用于进行存储体擦除操作的闪存存储体地址 |
OSectorMask [in] | 16 位掩码,指示存储体擦除操作中要屏蔽的扇区 |
说明
该函数针对用户提供的存储体地址,向闪存状态机发出存储体擦除命令。如果 FSM 正忙于进行另一个操作,该函数将返回,指示 FSM 处于繁忙状态,否则将继续进行存储体擦除操作。用户提供的 16 位扇区掩码指示存储体擦除操作中用户想要屏蔽的扇区,即不会被擦除的扇区。每个位表示一个扇区,位 0 表示扇区 0,位 1 表示扇区 1,依此类推,直到位 15 代表扇区 15。如果掩码中的某个位为 1,则不会擦除该特定扇区。
无法暂停存储体擦除操作。如果用户应用程序在存储体擦除操作有效期间发出暂停命令(使用 Fapi_issueFsmSuspendCommand()),暂停函数将返回错误。
C2000Ware 的闪存 API 使用示例中的 Example_EraseBanks() 函数描述了该序列的实现,如下面的实现示例 部分(等待 FSM 完成命令的 while 循环的内容)所示。无论应用程序是否使用安全性,用户都必须按原样使用该代码。在擦除失败的情况下,FSM 需要退出存储体擦除操作。
返回值
有关更多详细信息,请参阅 C2000Ware 中闪存 API 使用示例中的 Example_EraseBanks(),其位于 C:\ti\c2000\C2000Ware_x_xx_xx_xx\driverlib\f28003x\examples\flash\flashapi_ex1_programming.c。下面显示了示例的一部分,说明如何在发出最大脉冲后将擦除脉冲初始化为零。
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;
}
}