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

向闪存状态机发出存储体擦除命令以及用户提供的扇区掩码。

概要

Fapi_StatusType Fapi_issueBankEraseCommand(      
         uint32 *pu32StartAddress,
         uint16 oSectorMask)

参数

pu32StartAddress [in] 用于进行存储体擦除操作的闪存存储体地址
OSectorMask [in] 16 位掩码,指示存储体擦除操作中要屏蔽的扇区

说明

该函数针对用户提供的存储体地址,向闪存状态机发出存储体擦除命令。如果 FSM 正忙于进行另一个操作,该函数将返回,指示 FSM 处于繁忙状态,否则将继续进行存储体擦除操作。用户提供的 16 位扇区掩码指示存储体擦除操作中用户想要屏蔽的扇区,即不会被擦除的扇区。每个位表示一个扇区,位 0 表示扇区 0,位 1 表示扇区 1,依此类推,直到位 15 代表扇区 15。如果掩码中的某个位为 1,则不会擦除该特定扇区。

无法暂停存储体擦除操作。如果用户应用程序在存储体擦除操作有效期间发出暂停命令(使用 Fapi_issueFsmSuspendCommand()),暂停函数将返回错误。

注: 为存储体擦除命令提供正确的扇区掩码非常重要。如果错误地选择掩码来擦除无法访问的扇区(属于其他安全区域),存储体擦除命令将继续尝试不停地擦除扇区并且 FSM 永远不会退出(因为擦除不会成功)。为避免这种情况,用户必须注意提供正确的掩码。但是,鉴于有可能选择不正确的掩码,TI 建议在 FSM 为进行存储体擦除操作发出最大脉冲数后,将允许的最大擦除脉冲数初始化为零。这将确保 FSM 在尝试擦除不可访问的扇区到允许的最大擦除脉冲后结束存储体擦除命令。

C2000Ware 的闪存 API 使用示例中的 Example_EraseBanks() 函数描述了该序列的实现,如下面的实现示例 部分(等待 FSM 完成命令的 while 循环的内容)所示。无论应用程序是否使用安全性,用户都必须按原样使用该代码。在擦除失败的情况下,FSM 需要退出存储体擦除操作。

返回值

  • Fapi_Status_Success(成功)
  • Fapi_Status_FsmBusy(FSM 处于繁忙状态)
  • Fapi_Error_FlashRegsNotWritable(闪存寄存器不可写)
  • Fapi_Error_InvalidBaseRegCntlAddress(失败:用户提供的闪存控制寄存器基地址与预期地址不匹配)
实现示例

有关更多详细信息,请参阅 C2000Ware 中闪存 API 使用示例中的 Example_EraseBanks(),其位于 C:\ti\c2000\C2000Ware_x_xx_xx_xx\driverlib\f28003x\examples\flash\flashapi_ex1_programming.c。下面显示了示例的一部分,说明如何在发出最大脉冲后将擦除脉冲初始化为零。

    u32CurrentAddress = Bzero_Sector8_start;
    oReturnCheck = Fapi_issueBankEraseCommand((uint32 *)u32CurrentAddress,     0x001F);

    // Wait until FSM is done with bank erase operation
    while (Fapi_checkFsmForReady() != Fapi_Status_FsmReady)
    {
         //
         // Initialize the Erase Pulses to zero after issuing max pulses
         //
         if(HWREG(FLASH0CTRL_BASE + FLASH_O_ACC_EP) > MAX_ERASE_PULSE)
         {
             EALLOW;

             //
             // Enable Flash Optimization
             //
             HWREG(FLASH0CTRL_BASE + FLASH_O_OPT) = OPT_ENABLE;

             HWREG(FLASH0CTRL_BASE + FLASH_O_ERA_PUL) =
                     HWREG(FLASH0CTRL_BASE + FLASH_O_ERA_PUL) &
                     ~(uint32_t)FLASH_ERA_PUL_MAX_ERA_PUL_M;

             //
             // Disable Flash Optimization
             //
             HWREG(FLASH0CTRL_BASE + FLASH_O_OPT) = OPT_DISABLE;

             EDIS;
         }
    }