Here are some important facts about
API usage:
- Names of the Flash API functions
start with a prefix “Fapi_”.
- Flash API does not configure the
PLL. The user application must 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 an example implementation, see the F29H85x SDK driverlib clock configuration
function.
- Flash API does not configure the
SSU registers or obtain the flash semaphore. User applications must configure
them as needed. For details of these registers, see the F29H85x and F29P58x
Real-Time Microcontrollers Technical Reference Manual.
- Always configure waitstates as
per the device-specific data manual before calling the Flash API functions. The
Flash API issues an error if the waitstate configured by the application is not
appropriate for the operating frequency of the application.
- Flash API execution is
interruptible. There cannot 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 the flash
bank on which there is no any active erase/program operation in progress. 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 cannot be
accessed.
//
// Erase Sector
//
oReturnCheck = Fapi_issueProgrammingCommand(Fapi_EraseSector, u32Index,
0, u32UserFlashConfig);
//
// Wait until the Flash erase operation is over
//
while(Fapi_checkFsmForReady(u32Index, u32UserFlashConfig) == Fapi_Status_FsmBusy);
- Flash API does not configure
(enable/disable) watchdog. The user application can configure watchdog and
service it as needed.
- The Main Array flash programming
must be aligned to 64-bit address boundaries (alignment on 128-bit address
boundary is suggested) 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.
- Note that there cannot be any
access to the Flash bank on which the Flash erase/program operation is in
progress.
- Verification/blank check
operations cannot be performed by default when in SSUMODE2 or SSUMODE3. If a
user wants to perform a verify/blank check operation in SSUMODE2 or SSUMODE3,
the user must provide the necessary read APR permissions. For details on SSU
configuration, see the F29H85x and F29P58x Real-Time Microcontrollers Technical
Reference Manual.
- The
Flash state machine also internally performs a verify operation after an
erase/program pulse to validate the success of the operation. Successive
program/program verify loops (or erase/erase verify loops) using the provided
functions are done as needed to verify proper erase/programming. If the flash
Wrapper state machines fail to completely program or erase all target bits in
the flash within the number of program/erase pulses configured in the maximum
pulse count setting, the FAILVERIFY bit is set in the STATCMD register.