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

 

  1.   1
  2.   商标
  3. 1引言
    1. 1.1 参考书籍
    2. 1.2 函数清单格式
  4. 2TMS320F28003x 闪存 API 概述
    1. 2.1 引言
    2. 2.2 API 概述
    3. 2.3 使用 API
      1. 2.3.1 初始化流程
        1. 2.3.1.1 器件上电后
        2. 2.3.1.2 FMC 和存储体设置
        3. 2.3.1.3 关于系统频率变化
      2. 2.3.2 使用 API 进行构建
        1. 2.3.2.1 目标库文件
        2. 2.3.2.2 分布文件
      3. 2.3.3 闪存 API 使用的关键事实
  5. 3API 函数
    1. 3.1 初始化函数
      1. 3.1.1 Fapi_initializeAPI()
    2. 3.2 闪存状态机函数
      1. 3.2.1 Fapi_setActiveFlashBank()
      2. 3.2.2 Fapi_issueAsyncCommandWithAddress()
      3. 3.2.3 Fapi_issueBankEraseCommand()
      4. 3.2.4 Fapi_issueProgrammingCommand()
      5. 3.2.5 Fapi_issueProgrammingCommandForEccAddresses()
      6. 3.2.6 Fapi_issueFsmSuspendCommand()
      7. 3.2.7 Fapi_issueAsyncCommand()
      8. 3.2.8 Fapi_checkFsmForReady()
      9. 3.2.9 Fapi_getFsmStatus()
    3. 3.3 读取函数
      1. 3.3.1 Fapi_doBlankCheck()
      2. 3.3.2 Fapi_doVerify()
      3. 3.3.3 Fapi_calculatePsa()
      4. 3.3.4 Fapi_doPsaVerify()
    4. 3.4 信息函数
      1. 3.4.1 Fapi_getLibraryInfo()
    5. 3.5 实用功能
      1. 3.5.1 Fapi_flushPipeline()
      2. 3.5.2 Fapi_calculateEcc()
      3. 3.5.3 Fapi_isAddressEcc()
      4. 3.5.4 Fapi_remapEccAddress()
      5. 3.5.5 Fapi_calculateFletcherChecksum()
  6. 4推荐的 FSM 流程
    1. 4.1 新出厂器件
    2. 4.2 推荐的擦除流程
    3. 4.3 推荐的存储体擦除流程
    4. 4.4 推荐的编程流程
  7. 5与安全相关的软件应用程序使用假设
  8.   A 闪存状态机命令
    1.     A.1 闪存状态机命令
  9.   B 编译器版本和构建设置
  10.   C 目标库函数信息
    1.     C.1 TMS320F28003x 闪存 API 库
  11.   D typedef、定义、枚举和结构
    1.     D.1 类型定义
    2.     D.2 定义
    3.     D.3 枚举
      1.      D.3.1 Fapi_FlashProgrammingCommandsType
      2.      D.3.2 Fapi_FlashBankType
      3.      D.3.3 Fapi_FlashStateCommandsType
      4.      D.3.4 Fapi_FlashReadMarginModeType
      5.      D.3.5 Fapi_StatusType
      6.      D.3.6 Fapi_ApiProductionStatusType
    4.     D.4 结构
      1.      D.4.1 Fapi_FlashStatusWordType
      2.      D.4.2 Fapi_LibraryInfoType
  12.   E 并行签名分析 (PSA) 算法
    1.     E.1 函数详细信息
  13.   F ECC 计算算法
    1.     F.1 函数详细信息
  14.   G 勘误
  15.   修订历史记录

Fapi_issueAsyncCommand()

向闪存状态机发出命令。有关该函数可发出的命令列表,请参阅说明。

概要

Fapi_StatusType Fapi_issueAsyncCommand(
         Fapi_FlashStateCommandsType oCommand)

参数

oCommand [in] 向 FSM 发出的命令

说明

对于不需要任何附加信息(如地址)的命令,该函数向闪存状态机发出命令。典型命令为 Clear Status、Program Resume、Erase Resume 和 Clear_More。该函数不会等到命令结束;它只是发出命令并返回。因此,用户应用程序必须等待 FMC 完成给定的命令,然后才能返回到任何类型的闪存访问。Fapi_checkFsmForReady() 函数可用于监测已发出命令的状态。

以下是此类命令的详细信息:

  • Fapi_ClearStatus:执行该命令会清除 FMSTAT 寄存器中的 ILA、PGV、EV、CSTAT 和 INVDAT 位。闪存 API 在发出编程或擦除命令之前发出该命令。
  • Fapi_ClearMore:执行此命令会清除 Clear Status 命令可清除的所有内容,此外还会将 FMSTAT 寄存器中的 ESUSP 位和 PSUSP 位清零。
  • Fapi_ProgramResume:执行该命令将恢复先前暂停的编程操作。在暂停命令未处于有效状态时发出恢复命令会不起作用。请注意,如果之前的编程操作处于暂停状态,则无法启动新的编程操作。编程恢复 (Fapi_ProgramResume) 命令完成后,应使用 Fapi_doVerify() 来确保按照要求对数据进行编程。如果未对数据进行编程,用户应用程序应通过调用编程函数重新对相应的数据进行编程。
  • Fapi_EraseResume:执行该命令将恢复先前暂停的擦除操作。在暂停命令未处于有效状态时发出恢复命令会不起作用。请注意,如果之前的擦除操作处于暂停状态,则无法启动新的擦除操作。
注: 该函数在发出命令后不检查 FMSTAT。当 FSM 完成操作时,用户应用程序必须检查 FMSTAT 值。FMSTAT 指示操作期间是否有任何故障发生。用户应用程序可以使用 Fapi_getFsmStatus 函数来获取 FMSTAT 值。

返回值

  • Fapi_Status_Success(成功)
  • Fapi_Error_FeatureNotAvailable(失败:用户传递了不受支持的命令)

实现示例

#include “F021_F28003x_C28x.h”
#define CPUCLK_FREQUENCY   120   /* 120 MHz System frequency */
int main(void)
{
     //     
     // Initialize System Control
     //
     Device_init();
 
     //
     // Call Flash Initialization to setup flash waitstates
     // This function must reside in RAM
     //
     Flash_initModule(FLASH0CTRL_BASE, FLASH0ECC_BASE, DEVICE_FLASH_WAITSTATES);
     
     //
     // Jump to RAM and call the Flash API functions
     //
     Example_CallFlashAPI();
}
#pragma CODE_SECTION(Example_CallFlashAPI, ramFuncSection);
void Example_CallFlashAPI(void)
{
     Fapi_StatusType oReturnCheck;
     Fapi_FlashStatusType oFlashStatus;
     uint16 au16DataBuffer[8] = {0x0001, 0x0203, 0x0405, 0x0607, 0x0809, 0x0A0B, 0x0C0D, 0x0E0F};
     uint32 *DataBuffer32 = (uint32 *)au16DataBuffer;
     uint32 u32Index = 0;
     //
     // Bank0 operations
     //
     EALLOW;
     //
     // This function is required to initialize the Flash API based on 
     // System frequency before any other Flash API operation can be performed
     // Note that the FMC register base address and system frequency are passed as the parameters
     //
     oReturnCheck = Fapi_initializeAPI(F021_CPU0_BASE_ADDRESS, CPUCLK_FREQUENCY);
     if(oReturnCheck != Fapi_Status_Success)
     {
          Example_Error(oReturnCheck);
     }
 
     // 
     // Fapi_setActiveFlashBank function initializes Flash banks 
     // and FMC for erase and program operations.
     //
     oReturnCheck = Fapi_setActiveFlashBank(Fapi_FlashBank0);
      
     if(oReturnCheck != Fapi_Status_Success)
     {
          Example_Error(oReturnCheck);
     }
     //
     // Issue an async command
     //
     oReturnCheck = Fapi_issueAsyncCommand(Fapi_ClearMore);
     // 
     // Wait until the Fapi_ClearMore operation is over
     // 
     while (Fapi_checkFsmForReady() != Fapi_Status_FsmReady){}
     if(oReturnCheck != Fapi_Status_Success)
     {
         Example_Error (oReturnCheck);
     }
     // 
     // Read FMSTAT register contents to know the status of FSM after
     // program command to see if there are any program operation related errors
     // 
     oFlashStatus = Fapi_getFsmStatus();
     if(oFlashStatus != 0)
     {
          //
          //Check FMSTAT and debug accordingly
          //   
          FMSTAT_Fail();
     }
  
     // 
     // * User code for further Bank0 flash operations *
     //
     .
     .
     .
     .
    
 
     EDIS;
     //
     // Example is done here
     //
     Example_Done();
 
}