ZHCUCQ7A January   2025  – July 2025 F29H850TU , F29H859TU-Q1

 

  1.   1
  2.   摘要
  3.   商标
  4. 1简介
    1. 1.1 与 C28x 的区别
    2. 1.2 函数清单格式
  5. 2F29H85x 闪存 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 关于系统频率变化
      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_issueAutoEcc512ProgrammingCommand()
      7. 3.2.7  Fapi_issueDataAndEcc512ProgrammingCommand()
      8. 3.2.8  Fapi_issueDataOnly512ProgrammingCommand()
      9. 3.2.9  Fapi_issueEccOnly64ProgrammingCommand()
      10. 3.2.10 Fapi_issueAsyncCommand()
      11. 3.2.11 Fapi_checkFsmForReady()
      12. 3.2.12 Fapi_getFsmStatus()
    3. 3.3 读取函数
      1. 3.3.1 Fapi_doBlankCheck()
      2. 3.3.2 Fapi_doVerify()
      3. 3.3.3 Fapi_doVerifyByByte()
    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_getUserConfiguration()
      5. 3.5.5 Fapi_setFlashCPUConfiguration()
      6. 3.5.6 Fapi_issueProgBankMode()
  7. 4使用闪存 API 对 SECCFG 和 BANKMGMT 编程
    1. 4.1 BANKMGMT 编程
    2. 4.2 SECCFG 编程
  8. 5所有模式允许的编程范围
  9. 6推荐的 FSM 流程
    1. 6.1 新出厂器件
    2. 6.2 推荐的擦除流程
    3. 6.3 推荐的存储组擦除流程
    4. 6.4 推荐的编程流程
  10. 7参考资料
  11.   A 闪存状态机命令
  12.   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
      6.      B.3.6 Fapi_BankID
      7.      B.3.7 Fapi_FLCID
      8.      B.3.8 Fapi_BankMode
      9.      B.3.9 Fapi_CPU1BankSwap
      10.      B.3.10 Fapi_CPU3BankSwap
      11.      B.3.11 Fapi_FOTAStatus
      12.      B.3.12 Fapi_SECVALID
      13.      B.3.13 Fapi_BankMgmtAddress
    4.     B.4 结构
      1.      B.4.1 Fapi_FlashStatusWordType
      2.      B.4.2 Fapi_LibraryInfoType
  13.   修订历史记录

Fapi_issueDataAndEcc512ProgrammingCommand()

设置使用用户提供的闪存数据和 ECC 数据进行 512 位(64 个字节)编程的闪存状态机寄存器,并向有效的闪存存储器发出编程命令。

概要

Fapi_StatusType Fapi_issueDataAndEcc512ProgrammingCommand(
                                    uint32_t *pu32StartAddress,
                                    uint8_t  *pu8DataBuffer,
                                    uint8_t  u8DataBufferSizeInWords,
                                    uint8_t  *pu8EccBuffer,
                                    uint8_t  u8EccBufferSizeInBytes,
                                    uint32_t u32UserFlashConfig,
                                    uint8_t  u8Iterator
                                    )

参数

pu32StartAddress [in] 用于对提供的数据和 ECC 进行编程的 1024 位对齐闪存地址
pu8DataBuffer [in] 指向数据缓冲区地址的指针。数据缓冲区的地址可按 1024 位对齐。
u8DataBufferSizeInWords [in] 数据缓冲区中的字节数。最大 Databuffer 大小(以字为单位)不能超过 64。
pu8EccBuffer [in] 指向 ECC 缓冲区地址的指针
u8EccBufferSizeInBytes [in] ECC 缓冲区中的字节数。最大 Eccbuffer 大小(以字为单位)不能超过 16。
u32UserFlashConfig [in] 用户闪存配置位域
u8Iterator [in] 用于对交错组执行编程和擦除操作的迭代器
0:数据闪存/非交错
1:B0 或 B2(取决于提供的地址)
2:B1 或 B3(取决于提供的地址)

说明

此函数在用户提供的 512 位对齐闪存地址处对用户提供的 512 位数据(第二个参数)和 8 字节的 ECC 数据(第四个参数)进行编程。所提供数据的地址必须在 512 位存储器边界上对齐,并且数据长度必须与提供的 ECC 相关联。这意味着,如果数据缓冲区长度为 64 个字节,则 ECC 缓冲区必须为 8 个字节(1 个 ECC 字节对应于 64 位数据)。

pu8EccBuffer 的每个字节与 pu8DataBuffer 中提供的主阵列数据的每个 64 位相对应。如需了解更多详情,请参阅表 3-6

Fapi_calculateEcc() 函数可用于计算给定 64 位对齐地址和相应数据的 ECC。

有关该函数允许的编程范围,请参阅表 3-4

表 3-4 Fapi_issueDataAndEcc512ProgrammingCommand() 的允许编程范围
闪存 API 主阵列 ECC BANKMGMT 和 SECCFG
Fapi_issueDataAndEcc512ProgrammingCommand() 允许 允许 不允许

限制

  • 如上所述,该函数一次最多只能对 512 位进行编程(鉴于提供的地址进行了 512 位对齐)。如果用户需要编程更多位,可以循环调用该函数,每次编程 512 位。
  • 主阵列闪存编程必须与 512 位地址边界对齐,且每次写入或擦除周期中仅能编程 64 字节。
  • 以 BANKMGMT 或 SECCFG 地址开头的 512 位地址范围将始终使用 128 位 Fapi_issueProgrammingCommand() 进行编程。

返回值

  • Fapi_Status_Success(成功)
  • Fapi_Status_FsmBusy(FSM 处于繁忙状态)
  • Fapi_Error_AsyncIncorrectDataBufferLength(失败:指定的数据缓冲区大小不正确。此外,如果在对 BANKMGMT 或 SECCFG 空间进行编程时选择了 Fapi_EccOnly 模式,则会返回该错误。)
  • Fapi_Error_AsyncIncorrectEccBufferLength(失败:指定的 ECC 缓冲区大小不正确。)
  • Fapi_Error_AsyncDataEccBufferLengthMismatch(失败:数据缓冲区大小不是 64 位对齐的,或者数据长度跨越了 128 位对齐的存储器边界。)
  • Fapi_Error_FlashRegsNotWritable(失败:闪存寄存器写入失败。用户可确保使用正确的 CPU 执行 API。)
  • Fapi_Error_FeatureNotAvailable(失败:用户传递了不受支持的模式。)
  • Fapi_Error_InvalidAddress(失败:用户提供的地址无效。有关有效地址范围的信息,请参阅 F29H85x 和 F29P58x 实时微控制器数据表。)

实现示例

(有关更多信息,请参阅 F29H85x SDK 中提供的闪存编程示例“f29h85x-sdk > examples > driverlib > single_core > flash > flash_mode0_512_program”)。