专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

NorFlash程序烧死的解锁

作者:佚名   来源:不详   点击数:  更新时间:2014年08月10日   【字体:

我们的某位客户,在使用K9仿真器烧写cavium的CNW5602芯片外接的NorFlash时出现因烧写非法代码导致仿真器无法停止内核的问题。所用的Flash器件为一块普通的并行NorFlash器件。问题现像描述如下:

 

一块空板子(flash是空的)是可以通过K9正常读写flash的,但当flash中已经写入程序后,在测试过程中很容易出现不能通过K9重新烧写flash。

我做了一下实验,在一块可以正常读写的板子上向flash中正常启动地址写入一个文本文件,让板子不能正常启动,这时候再用K9擦除flash时会报“无法停止目标板上的器件”,在设置中选用“特殊停止”可以清除“无法停止目标板器件”的错误,但K9会一直停在“初始化flash"状态,尝试K9各种配置组合都不能再继续下去了。再焊一片空flash到板子上,K9又可以继续烧写flash。我做了几次这样的试验,可以确定当flash非空而程序又不正确时,会重现上述过程。

这位客户其实发现了问题的原因,并且给出了解决方法:换块空的Flash。呵呵,不过这种方法太麻烦,而且搞不好会弄坏板子。那是否有更好的办法?

分析上述现像,不难发现是因为向片内烧写了非法的代码,导致芯片上电运行后异常,影响仿真器连接。问题的根本是无法停止内核,如果能停止内核,那一切都好办的多。通常情况下,CNW5602这种比较高性能ARM芯片支持比较多的启动模式。于是我建议这位客户切换芯片的启动模式,不过这位用户告诉我,板上只设计了从NorFlash启动;并且由于是BGA的片子,也没法设置跳线。没有什么别的好办法,难道说必须再次把Flash芯片取下然后换块空的?

后面实在没什么办法,他把板寄给了我,要我帮忙弄。

既然无法切换启动模式,那是否可以从源头解决问题,让NorFlash中数据不能被芯片读取出来?

于是就有了如下的方法:

我这边又试了下,之前发的方式有些时候不行。下面是比较稳定的操作方法:

  1. 加载附件中的初始化宏。这个文件我有改动,在最开始加了个5秒的延时,最后加了擦除整个Flash的命令序列。
  2. 短接Flash的RESET引脚到地,重新上电;
  3. 进入仿真器自检界面,点击自检,在弹出第一个延时5秒时,断开RESET接地设置,然后进行后续的自检。执行初始化宏的最后操作时,会执行擦除Flash的命令。(如果能出现第1个5秒的延时,说明器件已经停下来了)。
  4. 执行完成后,重新上电,基本就能正常连接了。

可能在第3步操作时,成功的次数比较小,多试几次。我这边烧了这个随机数文件,出现无法停止的问题。最后是用此方法解决的。

正常烧时,请用原来的初始化文件。

上述方法其实有点复杂,并不需要在初始化宏中插入擦除序列。可以直接点击擦除按钮,要在第1个5秒延时,断开RESET引脚即可,因为此时芯片已经停下,后续就可以调用算法擦除芯片

第一个5秒延时的作用是预留时间断开NorFlash的RESET引脚,恢复Flash正常工作。这样仿真器才能正常的执行后续的初始化序列和擦除算法。

这个方法的原理是先让Flash芯片一直处于复位状态,芯片不能读取代码,自然就不能从NorFlash启动。待芯片启动完成后,仿真器再去连接,此时就可以连接并停止内核,可以执行各种读取Memory的操作。在停止内核后,可以让Flash恢复正常工作,此时仿真器再去擦除Flash

用户在调试其它芯片时遇到类似问题,也可以照类似的方法解决:1、切换启动模式;2、启动时禁用Flash(NorFlash/NandFlash/SPI Flash),等停止内核后再擦除。

最近这位用户没再反馈这方面的问题,应该是这方法有效。另一方面也可能是因为他不敢再往里面任意写数据了:)

关闭窗口

相关文章