Here are some important facts about API
usage:
- Names of the Flash API functions start with a prefix
“Fapi_”.
- Flash API does not configure PLL. The user application should
configure the PLL as needed and pass the configured CPUCLK value to
Fapi_initializeAPI() function (details of this function are given later in this
document).
- Flash API does not check the PLL
configuration to confirm the user input frequency. This is up to the system
integrator - TI suggests to use the DCC module to check the system frequency. For
example implementation, see the C2000Ware driverlib clock configuration
function.
- Always configure waitstates as per the device-specific data
manual before calling the Flash API functions. The Flash API will issue an error
if the waitstate configured by the application is not appropriate for the
operating frequency of the application. For more details, See the Fapi_Set
ActiveFlashBank() function.
- Flash API execution is interruptible. However, there should not
be any read/fetch access from the Flash bank on which an erase/program operation
is in progress. Therefore, the Flash API functions, the user application functions
that call the Flash API functions, and any ISRs (Interrupt service routines,) must
be executed from RAM, or from another flash bank on which the erase/program
operations are not targeted. For example, the above mentioned conditions apply to
the entire code-snippet shown below in addition to the Flash API functions.
The reason for this is because the
Fapi_issueAsyncCommandWithAddress() function issues the erase command to the
FSM, but it does not wait until the erase operation is over. As long as the FSM
is busy with the current operation, the Flash bank being erased should not be
accessed.
//
// Erase a Sector
//
oReturnCheck = Fapi_issueAsyncCommandWithAddress(Fapi_EraseSector,(uint32*)0x0080000);
//
// Wait until the erase operation is over
//
while (Fapi_checkFsmForReady() != Fapi_Status_FsmReady){}
- Flash API does not configure (enable/disable) watchdog. The user
application can configure watchdog and service it as needed. Hence, the
Fapi_ServiceWatchdogTimer() function is no longer provided.
- Flash API uses EALLOW and EDIS internally as needed to
allow/disallow writes to protected registers.
- The Main Array flash programming must be aligned to 64-bit
address boundaries and each 64-bit word may only be programmed once per
write/erase cycle.
- It is permissible to program the data and ECC separately.
However, each 64-bit dataword and the corresponding ECC word may only be
programmed once per write/erase cycle.
- The DCSM OTP programming must be
aligned to 128-bit address boundaries and each 128-bit word may only be programmed
once. The exceptions are:
- The DCSM Zx-LINKPOINTER1 and
Zx-LINKPOINTER2 values in the DCSM OTP should be programmed together, and
may be programmed 1 bit at a time as required by the DCSM operation.
- The DCSM Zx-LINKPOINTER3
values in the DCSM OTP may be programmed 1 bit at a time as required by the
DCSM operation.
- Users can program JLM_Enable
separately if needed. If users want to program all the 64-bits together,
users must read the link-pointer (ZxOTP_LINKPOINTER1, ZxOTP_LINKPOINTER2,
ZxOTP_LINKPOINTER3) and program that value along with the JLM_Enable
value.
- There is no pump semaphore in TMS320F28003x devices.
- ECC should not be programmed for link-pointer locations. The API
skips programming the ECC when the start address provided for the program
operation is any of the three link-pointer addresses. API will use Fapi_DataOnly
mode for programming these locations even if the user passes
Fapi_AutoEccGeneration or Fapi_DataAndEcc mode as the programming mode parameter.
The Fapi_EccOnly mode is not supported for programming these locations. The user
application should exercise caution here. Care should be taken to maintain a
separate structure/section for link-pointer locations in the application. Do not
mix these fields with other DCSM OTP settings. If other fields are mixed with
link-pointers, API will skip programming ECC for the non-link-pointer locations as
well. This will cause ECC errors in the application.
- When using INTOSC as the clock source, a few SYSCLK frequency
ranges need an extra waitstate to perform erase and program operations. After the
operation is over, that extra waitstate is not needed. For more details, see the
TMS320F28003x Microcontrollers Data Manual.
- In order to avoid conflict between zone1 and zone2, a semaphore
(FLSEM) is provided in the DCSM registers to configure Flash registers. The user
application should configure this semaphore register before initializing the Flash
and calling the Flash API functions. For more details on this register, see the
TMS320F28003x Microcontrollers Technical Reference
Manual.
- Note that the Flash API functions do not configure any of the
DCSM registers. The user application should be sure to configure the required DCSM
settings. For example, if a zone is secured, then Flash API should be executed
from the same zone in order to be able to erase or program the Flash sectors of
that zone. Or the zone should be unlocked. If not, Flash API’s writes to Flash
registers will not succeed. Flash API does not check whether the writes to the
Flash registers are going through or not. It writes to them as required for the
erase/program sequence and returns back assuming that the writes went through.
This will cause the Flash API to return false success status. For example,
Fapi_issueAsyncCommandWithAddress(Fapi_EraseSector, Address) when called, can
return the success status but it does not mean that the sector erase is
successful. Erase status should be checked using Fapi_getFSMStatus() and
Fapi_doBlankCheck().
- Note that there should not be any access to the Flash bank/OTP
on which the Flash erase/program operation is in progress.