SPRZ496D October 2021 – May 2024 TMS320F280033 , TMS320F280034 , TMS320F280034-Q1 , TMS320F280036-Q1 , TMS320F280036C-Q1 , TMS320F280037 , TMS320F280037-Q1 , TMS320F280037C , TMS320F280037C-Q1 , TMS320F280038-Q1 , TMS320F280038C-Q1 , TMS320F280039 , TMS320F280039-Q1 , TMS320F280039C , TMS320F280039C-Q1
Flash: Execution of Fapi_setActiveFlashBank() Without Disabling Flash Prefetch may Cause ITRAP
0
Flash prefetch mechanism should be disabled only by the code executing from RAM and only when there is not any active fetch access to flash. Fapi_setActiveFlashBank() disables the prefetch mechanism. Any flash execution can result in ITRAP when the prefetch-disable process is in progress; therefore, prefetch should be disabled before executing Fapi_setActiveFlashBank().
Disable the prefetch mechanism before calling Fapi_setActiveFlashBank(). Prefetch can be enabled after the execution of the Fapi_setActiveFlashBank(). Code that disables and enables the prefetch mechanism should be executed from RAM. When this workaround is implemented, note that Fapi_setActiveFlashBank() can be executed from flash (not from the bank on which the erase/program operations are targeted) since prefetch is already disabled.
Flash API usage examples provided in C2000Ware_5_02_00_00 (and onwards) depict the implementation of this workaround.
Path to the TMS320F28003x example:
C2000Ware_5_02_00_00\driverlib\f28003x\examples\flash\flashapi_ex1_programming.c
In this example, Flash_DisablePrefetch_SW_Workaround() is executed from RAM to disable the prefetch before calling Fapi_setActiveFlashBank(). Flash_EnablePrefetch_SW_Workaround() is executed from RAM to enable the prefetch after calling Fapi_setActiveFlashBank().