Thread 中讨论的其他器件:C2000WARE
工具与软件:
hi champs、
我是为我们的客户提出这个问题。
参考的文档
C:\ti\c2000\C2000Ware_5_04_00_00\driverlib\f28004x\examples\flash\flashapi_ex1_program_autoecc.c
用户在其应用代码中专门引用了该器件。
PS。 用户确认 u32Index 在闪存0x90000上为128位对齐、而 Buffer 在用户代码中的 RAM 上也为128位对齐。
void Example_Call API(void)
{
...
oReturnCheck = Fapi_issueProgrammingCommand ((UINT32 *) u32Index、Buffer+I、8、
0、0、Fapi_Auto EccGeneration);
//等待闪存编程操作结束
while (Fapi_checkFsmForReady()== Fapi_Status_Fsm y);
if (oReturnCheck!= Fapi_Status_Success)
{
//检查闪存 API 文档以了解可能的错误
Example_Error (oReturnCheck);
}
//读取 FMSTAT 寄存器内容以了解 FSM 的状态
//编程命令以查看是否存在与编程操作相关的错误
oFlashStatus = Fapi_getFsmStatus ();
...
}
用户在 RAM/bank0上运行所有闪存 API、在这种情况下、将对 bank1进行擦除/编程、从而在复位后进行实时固件更新。
当问题发生时、用户发现他们的代码始终卡在"oFlashStatus = Fapi_getFsmStatus ();"。
在查看它的汇编代码后,用户发现它卡在 "oFlashStatus = Fapi_getFsmStatus ();"时,它卡在 Estop 处。
在查看 CCS 监视窗口后、用户会在以下情况下发现闪存错误(当它卡在 Estop 上时)。
FMSTAT。 PGV = 1
FMSTAT。 CSTAT = 1
不过、在查看"Memory Browser"之后、128位数据按照预期正确地编程在闪存位置0x90000中。
因此、用户感到困惑。
编程的数据看起来不错、但 PGV 和 CSTAT 中存在错误、这会导致代码卡在"oFlashStatus = Fapi_getFsmStatus ();"中的 Estop 处。
通过注释掉"oFlashStatus = Fapi_getFsmStatus ();"、用户发现代码可以正常工作。
问题:
1.为什么即使数据编程正确, PGV 和 Cstat 也有错误?
2.在这种情况下、如何建议用户进行调试?
3.与闪存 API 相关的代码最初在 F28003x 上运行良好。 然后、用户通过更改闪存 API 库/相关 driverlib、将代码从 F28003x 迁移到 F28004x 上。 F28003x 和 F28004x 有什么主要区别?