ZHCUBW3 April 2024
设置使用用户提供的 ECC 数据进行 64 位(4 个 16 位字)编程的闪存状态机寄存器,并向有效闪存和 OTP 存储器发出编程命令。
Fapi_StatusType Fapi_issueEccOnly64ProgrammingCommand(
uint32 *pu32StartAddress,
uint16 *pu16EccBuffer,
uint16 u16EccBufferSizeInBytes
)
pu32StartAddress [in] | 用于对提供的 ECC 数据进行编程的 512 位对齐闪存地址。 |
pu16EccBuffer [in] | 指向 ECC 缓冲区地址的指针 |
u16EccBufferSizeInBytes [in] | ECC 缓冲区中的 8 位字节数。最大 Eccbuffer 大小(以字为单位)不应超过 8。 |
此函数将仅在指定的地址处(应为该函数提供闪存主阵列地址,而不是相应的 ECC 地址)对闪存 ECC 存储空间中的 ECC 部分进行编程。它可以在与用户提供的 512 位对齐闪存地址相对应的 ECC 地址处对 64 位 ECC 数据(第二个参数)进行编程。64 位 ECC 数据可以拆分为与 512 位对齐数据相关的 8 字节 ECC 数据(4 * 128,每 2 字节对应每 128 个数据)。
请参阅下面的表 3-6
512 位数据(4 * 128 位) | |||
---|---|---|---|
第 1 个 128 位数据 | 第 2 个 128 位数据 | 第 3 个 128 位数据 | 第 4 个 128 位数据 |
pu16EccBuffer[0] 的 LSB | pu16EccBuffer[1] 的 LSB | pu16EccBuffer[2] 的 LSB | pu16EccBuffer[3] 的 LSB |
pu16EccBuffer[0] 的 MSB | pu16EccBuffer[1] 的 MSB | pu16EccBuffer[2] 的 MSB | pu16EccBuffer[3] 的 MSB |
闪存 API | 主阵列 | DCSM OTP | ECC | 链路指针 |
---|---|---|---|---|
Fapi_issueEccOnly64Prog rammingCommand() | 不允许 | 不允许 | 允许 | 不允许 |
如上所述,该函数一次最多只能对 64 位 ECC 进行编程。如果用户想对更多位进行编程,则应循环调用该函数,从而一次对 64 位进行编程。
主阵列闪存编程必须与 512 位地址边界对齐,并且 64 位 ECC 字在每个写入或擦除周期只能编程一次。
不应针对链路指针位置对 ECC 进行编程。以链路指针地址开头的 512 位地址范围应始终使用 128 位 Fapi_issueProgrammingCommand() 进行编程。
Fapi_Status_Success(成功)• Fapi_Status_FsmBusy(FSM 处于繁忙状态)
Fapi_Error_AsyncDataEccBufferLengthMismatch(失败:数据缓冲区大小不是 64 位对齐的,或者数据长度跨越了 128 位对齐的存储器边界)
Fapi_Error_FlashRegsNotWritable(失败:闪存寄存器写入失败。用户应确保 API 从与闪存操作的目标地址相同的区域执行,或者用户应在闪存操作之前解锁。)
Fapi_Error_FeatureNotAvailable(失败:用户传递了不受支持的模式)
Fapi_Error_InvalidAddress(失败:用户提供的地址无效。有关有效地址范围的信息,请参阅 TMS320F28P65x 微控制器数据手册。)
(请参阅 C2000Ware 中提供的闪存编程示例,该示例位于“C2000Ware_.....\driverlib\F28P65x\examples\....\flash\flashapi_512bit_programming\flashapi_cpu1_512bitprogramming.c”)