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 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.
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
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;
}
}