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.
大家好:
问个Flash擦除有关的问题。
我做了段M3核程序prog.bin(C2000没有启动),程序功能是擦除所有flash,然后通过网络重新下载prog.bin,然后后重新烧回flash。现在遇到以下问题:
1.连接仿真器(xds560v2)运行程序,然后下载,擦除,重新写入都正常完成(通过memory browser观察),完成后的数据也导出来与prog.bin比对过,没有区别。然后在CCS 6.2 DEBUG界面下用reset和restart按钮进行复位,重复下载重新烧写功能失败,打断点发现Fapi_issueAsyncCommandWithAddress运行返回成功,但是对应的区域并未擦除成功。
2.下载程序后直接断电拔仿真器运行,芯片也是擦除失败。怀疑也是Fapi_issueAsyncCommandWithAddress执行问题。
请问大家是否遇到过
您好,您参考下以下FAQ:3. What are the common debug tips that we can consider when Flash API fails to erase or program?"
请问您是怎样调用擦除功能的?
我参考了flash_programming_m3工程的写法,用Example_CallFlashAPI()的流程来执行擦除操作,擦除代码、FLASH的lib文件都指定到ram里并检查了map文件确保没有遗漏。网络下载的固件被保存在shared ram里。
跳过前面的设置阶段,擦除部分代码如下
for(i=0;i<14;1++) //14个sector,逐个擦除
{
oReturnCheck = Fapi_issueAsyncCommandWithAddress(Fapi_EraseSector,
(uint32 *)&Bzero_SectorL_start_addr[i]);
// Wait until FSM is done with erase sector operation
while (Fapi_checkFsmForReady() != Fapi_Status_FsmReady){}
if(oReturnCheck != Fapi_Status_Success)
{
while(1){}
}
///////////////test
oFlashStatus = Fapi_getFsmStatus();
if(oFlashStatus != 0)
{
while(1){}
}
////////////////test
oReturnCheck = Fapi_doBlankCheck((uint32 *)Bzero_SectorL_start,
Bzero_16KSector_u32length,
&oFlashStatusWord);
if(oReturnCheck != Fapi_Status_Success)
{
whiel(1){} //////////////////////擦除失败时跳到这里,然后添加了test程序段检查FSMSTAT寄存器,发现sector被锁,故障代码是0x0011(17)
}
}
whiel(1){} //////////////////////擦除成功时跳到这里
抱歉回复晚了。
在使用闪存 API 之前,必须包括闪存初始化例程 (用于wait-state配置) 和 EALLOW (C28x) 或 MWRALLOW (ARM)。 您试下实施这些。
闪存如何初始化?请给个实例。MWRALLOW (ARM)我只是在Example_CallFlashAPI()中没找到,是不是封装在Flash API functions里面了。
因为我的程序在某些条件下也是能运行成功的,是不是可以不用考虑这些地方
我主要是怀疑sector的擦写在特定条件下被锁了,有没有解锁方法?
您好,关于锁,发生故障时,在内存窗口中的值是多少?请您确认下。
以及有没有对任何密码进行编程?
请参阅以下代码中的 MWRALLOW : \controlSUITE\device_support\f28m35x\v220\F28M35x_examples_Dual\flash_prog\m3\flash_programming_m3.c
在同一文件中,您可以看到闪存初始化函数调用,如下所示:
您好,现在您已经确认了检查过闪存 API FAQ中提供的调试提示,那您能否提供一个没有任何专有代码并包含编译错误的project?这样工程师可以试下重现您的问题。