This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS320F28379D:内部闪存访问编程,无法理解 Fapi_doVerify API,请检查下面的代码并对我的查询进行响应

Guru**** 2239510 points
Other Parts Discussed in Thread: C2000WARE
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1220818/tms320f28379d-internal-flash-access-programming-unable-to-understand-fapi_doverify-api-please-check-my-below-code-and-give-response-on-my-query

器件型号:TMS320F28379D
主题中讨论的其他器件:C2000WARE

您好!

       此代码片段来自以下示例路径:C:\ti\cc2000\C2000Ware_4_02_00_00\device_support\f2837xd\examples\dual\flash_programming\cpu01

Buffer[0]=''A';
对于(I=0、u32Index = Bzero_SectorJ_start;
(u32Index <= Bzero_SectorJ_end)&&
(oReturnCheck == Fapi_Status_Success);I+= 1、u32Index+= 1)
{//发出程序命令
oReturnCheck = Fapi_issueProgrammingCommand ((Uint32 *) u32Index、
缓冲器、1、0、0、Fapi_DataOnly);

//等待闪存程序操作结束
while (Fapi_checkFsmForReady ()== Fapi_Status_FsmBusy);

if (oReturnCheck!= Fapi_Status_Success)

Example_Error (oReturnCheck);
}
//读取 FMSTAT 寄存器内容以了解之后的 FSM 状态
//编程命令以查看是否存在与编程操作相关的错误
oFlashStatus = Fapi_getFsmStatus ();
if (oFlashStatus!= 0)

//查看闪存 API 文档以了解可能的错误
Example_Error (oReturnCheck);
}

//验证编程的值
oReturnCheck = Fapi_doVerify ((Uint32 *) u32Index、
0、(UINT32*)(缓冲器),
&oFlashStatusWord);


if (oReturnCheck!= Fapi_Status_Success)

Example_Error (oReturnCheck);
}
}

我的查询:
1.数据'A'被刷写到扇区 J 的所有地址中、即使我从微控制器上电、我也能够读取数据。

2.这行声明  Fapi_doVerify ((Uint32 *) u32Index、0、(Uint32*)(缓冲区)、 &oFlashStatusWord);   我  通过跟踪和错误方法传递参数、因此当我把这些参数传递为时 0  和 (UINT32*)(缓冲器)  然后我安装了 Fapi_Status_Pass、并且还将数据"A"编程到闪存中。

我想知道计算或分析,这是怎么发生的,即使我跟了闪存 API 文档( https://www.ti.com/lit/ug/spnu629a/spnu629a.pdf?ts=1681972192498&ref_url=https%253A%252F%252Fwww.ti.com%252Fproduct%252FTMS320F28379D ),但我仍然无法理解它。

3. Fapi_StatusType Fapi_doVerify (Uint32 *pu32StartAddress、Uint32 u32Length、Uint32 *pu32CheckValueBuffer、Fapi_FlashStatusWordType *poFlashStatusWord)这是什么  UINT32 u32Length、UINT32 * pu32CheckValueBuffer  这意味着、请提供一些在闪存地址中写入单个字/多个字的示例。

谢谢。

 SID C

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    SID、

    Unknown 说:
    1. 数据'A'闪存在扇区 J 的所有地址中、即使我关闭微控制器电源到开、我也能够读取数据。

    是的、一旦程序完成、内容将从下电上电一直保留到下电上电。  为明确起见、应避免在编程期间断开器件电源、刷写过程的任何中断(XRSn 或功率损耗)都将导致闪存状态未定义且可能无法恢复。

    Unknown 说:
    2. 这行语句  Fapi_doVerify ((Uint32 *) u32Index、0、(Uint32*)(缓冲区)、 &oFlashStatusWord);   我  通过跟踪和错误方法传递参数、因此当我把这些参数传递为时 0  和 (UINT32*)(缓冲器)  然后我获得了 Fapi_Status_Pass、并且数据"A"也已编程到闪存中。

    我认为、由于传递了"0"值、因为要检查的区域长度将始终如此、因为函数没有要检查的内容。  实际上、传递的值0实际上是无效的

    Unknown 说:
    3. Fapi_StatusType Fapi_doVerify (Uint32 * pu32StartAddress、Uint32 u32Length、Uint32 * pu32CheckValueBuffer、Fapi_FlashStatusWordType * poFlashStatusWord)这是什么  UINT32 u32Length、UINT32 * pu32CheckValueBuffer  这意味着、请提供一些在闪存地址中写入单个字/多个字的示例。

    因此、u32Length 是您要检查的闪存中的32位字的数量。  请回忆一下、C2000是一个16位字 MCU、因此1个32位字在这里相当于一个"long"字。  * pu32CheckValueBuffer 是用于验证闪存内容的缓冲区(可能在 RAM 或 ROM 中)的地址。

    如果该函数不返回通过、* poFlashStatusWord 将包含在缓冲区匹配失败的位置读取的内容。

    此致!
    Matthew