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.
您好!
此代码片段来自以下示例路径: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