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_issueAsyncCommandWithAddress()

向闪存状态机发出擦除命令以及用户提供的扇区地址。

概要

Fapi_StatusType Fapi_issueAsyncCommandWithAddress(
         Fapi_FlashStateCommandsType oCommand,
         uint32 *pu32StartAddress)

参数

oCommand [in] 向 FSM 发出的命令。使用 Fapi_EraseSector
pu32StartAddress [in] 用于擦除操作的闪存扇区地址

说明

该函数针对用户提供的扇区地址向闪存状态机发出擦除命令。该函数不会等到擦除操作结束;它只是发出命令并返回。因此,当使用 Fapi_EraseSector 命令时,该函数始终返回成功状态。用户应用程序必须等待 FMC 完成擦除操作,然后才能返回到任何类型的闪存访问。Fapi_checkFsmForReady() 函数可用于监测已发出命令的状态。

此外,如果应用程序同时进行存储体擦除和扇区擦除操作,则应用程序必须在调用该函数进行扇区擦除操作之前向 FSM 发出 Fapi_ClearMore 命令(使用 Fapi_issueAsyncCommand)。在执行存储体擦除命令之后,需要执行 Fapi_ClearMore 命令将 FSM 初始化为干净状态从而进行扇区擦除操作。如果应用程序中仅使用其中一个擦除操作(扇区擦除或存储体擦除),则无需在扇区擦除操作之前发出 Fapi_ClearMore 命令。

注: 该函数在发出擦除命令后不检查 FMSTAT。当 FSM 完成擦除操作时,用户应用程序必须检查 FMSTAT 值。FMSTAT 指示擦除操作期间是否有任何故障发生。用户应用程序可以使用 Fapi_getFsmStatus 函数来获取 FMSTAT 值。

此外,用户应用程序应使用 Fapi_doBlankCheck() 函数来验证闪存是否被擦除。

返回值

  • Fapi_Status_Success(成功)
  • Fapi_Error_InvalidBaseRegCntlAddress(失败:用户提供的闪存控制寄存器基地址与预期地址不匹配)
  • Fapi_Error_FeatureNotAvailable(失败:用户请求的命令不受支持。)
  • Fapi_Error_FlashRegsNotWritable(失败:闪存寄存器写入失败。用户应确保 API 从与闪存操作的目标地址相同的区域执行,或者用户应在闪存操作之前解锁。)
  • Fapi_Error_InvalidAddress(失败:用户提供的地址无效。有关有效地址范围的信息,请参阅 TMS320F28003x 微控制器数据手册。)

实现示例

#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;
     //
     // 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);
     }

     //
     // Code for bank erase (not shown here)
     //

     //
     // Code for Bank 0 sector 4 program (not shown here)
     //
     
     // 
     // Issue ClearMore command - Required prior to Sector Erase 
     // 
     oReturnCheck = Fapi_issueAsyncCommand(Fapi_ClearMore);

     // 
     // Wait until FSM is done with clear more operation 
     // 
     while (Fapi_checkFsmForReady() != Fapi_Status_FsmReady){}

     if(oReturnCheck != Fapi_Status_Success) 
     { 
         // 
         // Check Flash API documentation for possible errors 
         // 
         Example_Error(oReturnCheck); 
     }

     //
     // Bank0 Flash operations
     //
     //
     // Erase Bank0 Sector4
     //
     oReturnCheck = Fapi_issueAsyncCommandWithAddress(Fapi_EraseSector, (uint32 *)0x84000);
     //
     // Wait until FSM is done with erase sector operation
     //
     while(Fapi_checkFsmForReady() != Fapi_Status_FsmReady){}
     if(oReturnCheck != Fapi_Status_Success)
     {  
          Example_Error (oReturnCheck);
     }
     //
     // Read FMSTAT contents to know the status of FSM
     // after erase command to see if there are any erase operation
     // related errors
     //
     oFlashStatus = Fapi_getFsmStatus();
     if (oFlashStatus!=0)
     {
          FMSTAT_Fail();
     }
     //
     // Do blank check.
     // Verify that the sector is erased.
     //
     oReturnCheck = Fapi_doBlankCheck((uint32 *)0x84000, 0x800,&oFlashStatusWord);                                                                
     if(oReturnCheck != Fapi_Status_Success)
     {
          Example_Error(oReturnCheck);
     }
     // 
     // * User code for further Bank0 flash operations *
     //
     .
     .
     .
     .
     //
     // Example is done here
     //
     Example_Done();
}