ZHDU167 August   2026 TMS320F28P551SG

 

  1.   1
  2.   摘要
  3.   商标
  4. 1简介
    1. 1.1 参考资料
    2. 1.2 函数清单格式
  5. 2 TMS320F28P551x 闪存 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 闪存封装器和闪存组设置
        3. 2.3.1.3 关于系统频率变化
      2. 2.3.2 使用 API 进行构建
        1. 2.3.2.1 目标库文件
        2. 2.3.2.2 分布文件
        3. 2.3.2.3 闪存 API 使用的关键事实
  6. 3API 功能
    1. 3.1 初始化函数
      1. 3.1.1 Fapi_initializeAPI()
    2. 3.2 闪存状态机函数
      1. 3.2.1  Fapi_setActiveFlashBank()
      2. 3.2.2  Fapi_setupBankSectorEnable()
      3. 3.2.3  Fapi_issueAsyncCommandWithAddress()
      4. 3.2.4  Fapi_issueBankEraseCommand()
      5. 3.2.5  Fapi_issueProgrammingCommand()
      6. 3.2.6  Fapi_issueProgrammingCommandForEccAddresses()
      7. 3.2.7  Fapi_issueAutoEcc512ProgrammingCommand()
      8. 3.2.8  Fapi_issueDataAndEcc512ProgrammingCommand()
      9. 3.2.9  Fapi_issueDataOnly512ProgrammingCommand()
      10. 3.2.10 Fapi_issueEccOnly64ProgrammingCommand()
      11. 3.2.11 Fapi_issueAsyncCommand()
      12. 3.2.12 Fapi_checkFsmForReady()
      13. 3.2.13 Fapi_getFsmStatus()
    3. 3.3 读取函数
      1. 3.3.1 Fapi_doBlankCheck()
      2. 3.3.2 Fapi_doVerify()
    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()
  7. 4推荐的 FSM 流程
    1. 4.1 新出厂器件
    2. 4.2 推荐的擦除流程
    3. 4.3 推荐的闪存组擦除流程
    4. 4.4 推荐的编程流程
  8. 5与安全相关的软件应用程序使用假设
  9.   A 闪存状态机命令
  10.   B typedef、定义、枚举和结构
    1.     B.1 类型定义
    2.     B.2 定义
    3.     B.3 枚举
      1.      B.3.1 Fapi_FlashProgrammingCommandsType
      2.      B.3.2 Fapi_FlashBankType
      3.      B.3.3 Fapi_FlashStateCommandsType
      4.      B.3.4 Fapi_StatusType
      5.      B.3.5 Fapi_ApiProductionStatusType
    4.     B.4 结构
      1.      B.4.1 Fapi_FlashStatusWordType
      2.      B.4.2 Fapi_LibraryInfoType
  11.   参考

闪存 API 使用的关键事实

以下是有关 API 使用的一些重要事实:

  • 闪存 API 函数的名称以前缀:Fapi_ 开头。
  • 闪存 API 不配置 PLL。用户应用程序必须根据需要配置锁相环 (PLL),并将配置的中央处理单元时钟 (CPUCLK) 值传递给 Fapi_initializeAPI() 函数(本文档稍后给出此函数的详细信息)。
    注: 当系统频率小于或等于 20MHz 时,闪存 API 库不支持闪存擦除/编程操作。

  • 闪存 API 不会检查 PLL 配置来确认用户输入频率。该检查由系统集成商负责 — TI 建议使用双时钟比较器 (DCC) 模块检查系统频率。有关实现示例,请参阅 C2000Ware driverlib 时钟配置函数。
  • 在调用闪存 API 函数之前,请始终根据器件特定数据手册配置等待状态。如果应用程序配置的等待状态不适合应用程序的工作频率,闪存 API 会发出错误。
  • 闪存 API 执行可中断。但是,在进行擦除或编程操作时,不允许从闪存存储体进行读取和获取访问。因此,闪存 API 函数、调用闪存 API 函数的用户应用程序函数以及任何中断服务例程 (ISR) 必须从 RAM 执行。例如,除了闪存 API 函数之外,上述条件还适用于下面显示的整个代码片段。这些条件适用于整个代码段的原因是,Fapi_issueAsyncCommandWithAddress() 函数向 FSM 发出擦除命令,但 FSM 不会等到擦除操作结束。只要 FSM 忙于进行当前操作,就不访问正在擦除的闪存组。
       //
       // Erase a Sector
       //
       oReturnCheck = Fapi_issueAsyncCommandWithAddress(Fapi_EraseSector,(uint32*)0x0080000);
       //
       // Wait until the erase operation is over
       //
       while (Fapi_checkFsmForReady() != Fapi_Status_FsmReady){}
  • 闪存 API 不配置(启用或禁用)看门狗计时器。用户应用程序可以配置看门狗计时器并且根据需要对看门狗计时器进行维护。因此,不再提供 Fapi_ServiceWatchdogTimer() 函数。
  • 闪存 API 根据需要在内部使用 EALLOW 和 EDIS 来允许或禁止对受保护的寄存器进行写入。
  • 主阵列闪存编程必须与 64 位地址边界对齐(建议在 128 位地址边界上对齐),并且每个 64 位字在每个写或擦除周期只能编程一次。
  • 数据和 ECC 可单独编程。但是,每个 64 位数据字和相应的 ECC 字在每个写入或擦除周期中只能编程一次。
  • TMS320F28P551x 器件中没有泵信标。
  • 不得针对链路指针位置对 ECC 进行编程。当为编程操作提供的起始地址是三个链路指针地址中的任何一个时,API 将跳过对 ECC 的编程。即使用户将 Fapi_AutoEccGeneration 或 Fapi_DataAndEcc 模式作为编程模式参数传递,API 也会使用 Fapi_DataOnly 模式对此类位置进行编程。Fapi_EccOnly 模式不支持对此类位置进行编程。在这些情况下,用户应用程序应谨慎操作。必须注意为应用程序中的链路指针位置维护一个单独的结构或段。请勿将这些字段与其他双代码安全模块 (DCSM) OTP 设置混合使用。如果其他字段与链路指针混合,API 也会跳过对非链路指针位置的 ECC 编程。这会导致应用程序中出现 ECC 错误。
  • 使用 128 位 DCSM OTP 编程时,DCSM OTP 地址必须与 128 位地址边界对齐,并且每个 128 位字只能编程一次。例外包括:
    • DCSM OTP 中的 DCSM Zx-LINKPOINTER1 和 Zx-LINKPOINTER2 值必须一起编程,并且可以按照 DCSM 操作的要求一次编程 1 位。
    • DCSM OTP 中的 DCSM Zx-LINKPOINTER3 值必须按照 DCSM 操作的要求,一次编程 1 位。
    • 如果需要,用户可以单独对 JLM_Enable 进行编程。如果用户要同时对所有 64 位进行编程,则必须读取链路指针(ZxOTP_LINKPOINTER1、ZxOTP_LINKPOINTER2 和 ZxOTP_LINKPOINTER3),并将该值与 JLM_Enable 值一起编程。
    • 在给定对齐的 128 位字中,当对齐的 64 位被保留时,可以对其他 64 位进行编程。
注: 除链路指针范围(0x00078000 至 0x00078005 和 0x00078200 至 0x00078205)外,在一些 512 位编程模式下允许对 DCSM OTP 进行编程。要对链路指针位置进行编程,可将 Fapi_issueProgrammingCommand() 函数与 AutoECCGeneration 模式配合使用。如需了解更多详细信息,请参阅表 2-6。
表 2-6 编程函数功能:DCSM OTP 和链路指针限制
512 位编程功能对 DCSM OTP 和链路指针范围进行编程
Fapi_issueAutoEcc512ProgrammingCommand()允许 DCSM OTP,禁止链路指针。
Fapi_issueDataAndEcc512ProgrammingCommand()允许 DCSM OTP,禁止链路指针。
Fapi_issueDataOnly512ProgrammingCommand()禁止 DCSM OTP 和链路指针。
Fapi_issueEccOnly64ProgrammingCommand()允许 ECC DCSM OTP,禁止 ECC 链路指针。
  • 为了避免 zone1 和 zone2 之间的冲突,DCSM 寄存器中提供了闪存信标 (FLSEM) 来配置闪存寄存器。在对闪存进行初始化和调用闪存 API 函数之前,用户应用程序必须配置该信标寄存器。有关该寄存器的更多详细信息,请参阅 TMS320F28P551/2/8 实时微控制器技术参考手册(对于 TMS320F28P551x)。
  • 闪存 API 函数不配置任何 DCSM 寄存器。用户应用程序必须配置所需的 DCSM 设置。例如,如果某个区域受到保护,则必须从同一区域执行闪存 API,以便能够擦除或编程该区域的闪存扇区。或者必须解锁该区域。否则,闪存 API 对闪存寄存器的写入不会成功。闪存 API 不会检查对闪存寄存器的写入是否正在进行。闪存 API 根据擦除或程序序列的要求写入寄存器,并返回状态,前提是假设写入已通过。这会导致闪存 API 返回错误的成功状态。例如,调用 Fapi_issueAsyncCommandWithAddress(Fapi_EraseSector, Address) 时,可以返回成功状态,但这并不意味着扇区擦除成功。必须使用 Fapi_getFSMStatus() 和 Fapi_doBlankCheck() 函数检查擦除状态。
  • 不得对正在进行闪存擦除或编程操作的闪存组或 OTP 存储器进行任何访问。