TI中文支持网
TI专业的中文技术问题搜集分享网站

F28M35H52C: f021 flash擦除问题

Part Number:F28M35H52COther Parts Discussed in Thread: CONTROLSUITE

大家好:

    问个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执行问题。

请问大家是否遇到过

Green Deng:

你好,工程师将在工作时间为你解答。

,

Cherry Zhou:

您好我们已收到您的问题并升级到英文论坛,如有答复将尽快回复您。谢谢!

,

Cherry Zhou:

anvaya 说:然后在CCS 6.2 DEBUG界面下用reset和restart按钮进行复位,重复下载重新烧写功能失败,打断点发现Fapi_issueAsyncCommandWithAddress运行返回成功,但是对应的区域并未擦除成功。

您好,重复下载和重新烧写过程是什么? F28M35H52C 器件是运行引导加载程序,还是通过 xds560v2 仿真器接口完成所有操作?

anvaya 说:下载程序后直接断电拔仿真器运行,芯片也是擦除失败。怀疑也是Fapi_issueAsyncCommandWithAddress执行问题。

同时能否请您再解释一下这个过程?什么是断电拔仿真器运行?

,

anvaya:

重复下载烧写就是说,在完成第一次烧写后,不移除仿真器,直接用CCS debug界面上的reset和restart按钮进行复位,再次通过网络下载固件,烧写。

,

anvaya:

断电拔仿真器就是说,我把电路板用仿真器烧好程序后,脱离仿真器运行。再进行网络下载固件,烧写的步骤

,

anvaya:

再提供个线索,在运行Fapi_issueAsyncCommandWithAddress()失败后,检查了一下FSM_STAT寄存器,发现报错,报的是SLOCK error,大概意思就是sector锁定或是OTP锁定。那么问题来了,怎么解锁呢?文档上好像没有提及锁定的事

,

Cherry Zhou:

好的感谢您提供的信息,预计1-2天内给到您答复。

,

Cherry Zhou:

您好,您参考下以下FAQ:3. What are the common debug tips that we can consider when Flash API fails to erase or program?" 

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/951668/faq-faq-on-flash-api-usage-for-c2000-devices 

请问您是怎样调用擦除功能的?

,

anvaya:

我参考了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){}         //////////////////////擦除成功时跳到这里

,

anvaya:

看了FAQ,我对照了一下例程,发现例程里没有

d. Initialize Flash wait-states, fall back power mode, performance features and ECC

f.  EALLOW (C28x) or MWRALLOW (ARM) should be executed before calling Flash API functions to allow writes to protected registers.

有没有影响?

,

Cherry Zhou:

抱歉回复晚了。

在使用闪存 API 之前,必须包括闪存初始化例程 (用于wait-state配置) 和 EALLOW (C28x) 或 MWRALLOW (ARM)。 您试下实施这些。

,

anvaya:

闪存如何初始化?请给个实例。MWRALLOW (ARM)我只是在Example_CallFlashAPI()中没找到,是不是封装在Flash API functions里面了。

因为我的程序在某些条件下也是能运行成功的,是不是可以不用考虑这些地方

我主要是怀疑sector的擦写在特定条件下被锁了,有没有解锁方法?

,

Cherry Zhou:

再帮您跟进给工程师问下哈,有新的进展会尽快给到您。

,

Cherry Zhou:

您好,关于锁,发生故障时,在内存窗口中的值是多少?请您确认下。

以及有没有对任何密码进行编程?

请参阅以下代码中的 MWRALLOW : \controlSUITE\device_support\f28m35x\v220\F28M35x_examples_Dual\flash_prog\m3\flash_programming_m3.c

在同一文件中,您可以看到闪存初始化函数调用,如下所示:

,

anvaya:

没有对密码区编程,内存窗口中值没变化,因为擦除失败了,凡是例程中有的操作都被保留下来了

,

Cherry Zhou:

好的感谢您提供的信息,已经跟进给工程师了,有答复会尽快给到您哈。

,

Cherry Zhou:

您好,请问在进行了 MWRALLOW 和闪存初始化后,问题仍然存在是吗?

,

anvaya:

是的

,

Cherry Zhou:

好的收到,再帮您问下哈。

,

Cherry Zhou:

您好,现在您已经确认了检查过闪存 API FAQ中提供的调试提示,那您能否提供一个没有任何专有代码并包含编译错误的project?这样工程师可以试下重现您的问题。

赞(0)
未经允许不得转载:TI中文支持网 » F28M35H52C: f021 flash擦除问题
分享到: 更多 (0)

© 2024 TI中文支持网   网站地图 鲁ICP备2022002796号-1