ZHCUBW3 April   2024

 

  1.   1
  2.   摘要
  3.   商标
  4. 1简介
    1. 1.1 参考书籍
    2. 1.2 函数清单格式
  5. 2TMS320F28P65x 闪存 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.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.   A 闪存状态机命令
  9.   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
  10.   C 从 v3.00.01 到 v3.00.02 的变更摘要

闪存 API 使用的关键事实

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

  • 闪存 API 函数的名称以前缀 "Fapi_" 开头。
  • 闪存 API 不配置 PLL。用户应用程序应根据需要配置 PLL 并将配置的 CPUCLK 值传递给 Fapi_initializeAPI() 函数(该函数的详细信息在本文档后面给出)。请注意,当系统频率小于或等于 20MHz 时,闪存 API 库不支持闪存擦除/编程操作。
  • 闪存 API 不会检查 PLL 配置来确认用户输入频率。这由系统集成商决定。TI 建议使用 DCC 模块来检查系统频率。有关实现示例,请参阅 C2000Ware driverlib 时钟配置函数。
  • 闪存 API 不会配置 BANKMUXSEL、FLASHCTLSEM (FLASHSEM) 和 CLKSEM(时钟配置控制信标)寄存器。用户应用程序应根据需要对其进行配置。有关这些寄存器的详细信息,请参阅 TMS320F28P65x 实时微控制器技术参考手册
  • 在调用闪存 API 函数之前,请始终根据器件特定数据手册配置等待状态。如果应用程序配置的等待状态不适合应用程序的工作频率,闪存 API 将发出错误。
  • 闪存 API 执行可中断。但是,不应从正在进行擦除/编程操作的闪存组进行任何读取/获取访问。因此,闪存 API 函数、调用闪存 API 函数的用户应用程序函数以及所有 ISR(中断服务例程)必须从 RAM 或没有正在进行的活动擦除/编程操作的闪存组中执行。例如,除了闪存 API 函数之外,上述条件还适用于下面显示的整个代码片段。之所以会这样,是因为 Fapi_issueAsyncCommandWithAddress() 函数向 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 不配置(启用/禁用)看门狗。用户应用程序可以配置看门狗并根据需要对其进行维护。
  • 主阵列闪存编程必须与 64 位地址边界对齐(建议在 128 位地址边界上对齐),并且每个 64 位字在每个写/擦除周期只能编程一次。
  • 允许单独对数据和 ECC 进行编程。但是,每个 64 位数据字和相应的 ECC 字在每个写入/擦除周期只能编程一次。
  • 不应针对链路指针位置对 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 值一起编程。
    • 当其他对齐的 64 位被保留时,可以在给定的对齐 128 位字中对 64 位进行编程。
    注: 除链路指针范围(0x00078000 至 0x00078008 和 0x00078200 至 0x00078208)外,在一些 512 位编程模式下允许对 DCSM OTP 进行编程。表 2-6 展示了要对链路指针位置进行编程,您应将 Fapi_issueProgrammingCommand() 与 AutoECCGeneration 模式配合使用。
表 2-6 编程指针位置
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 函数之前,用户应用程序应该配置该信标寄存器。有关该寄存器的更多详细信息,请参阅 TMS320F28P65x 微控制器技术参考手册
  • 请注意,闪存 API 函数不配置任何 DCSM 寄存器。用户应用程序应确保配置所需的 DCSM 设置。例如,如果某个区域受到保护,则应从同一区域执行闪存 API,以便能够擦除或编程该区域的闪存扇区。或者应解锁该区域。否则,闪存 API 对闪存寄存器的写入将不会成功。闪存 API 不会检查对闪存寄存器的写入是否正在进行。其按照擦除/编程序列的要求向它们写入数据,并在假设写入完成后就返回。这将导致闪存 API 返回错误的成功状态。例如,调用 Fapi_issueAsyncCommandWithAddress(Fapi_EraseSector, Address) 时,可以返回成功状态,但这并不意味着扇区擦除成功。应使用 Fapi_getFSMStatus() 和 Fapi_doBlankCheck() 来检查擦除状态。
  • 请注意,不应对正在进行闪存擦除/编程操作的闪存组/OTP 进行任何访问。