启动问题 NAND擦写问题

iar_  问题现象1:程序进行连接设置的时候,只能设置很小的范围,查看MAP文件,以及可执行文件大小,整个程序在4K范围内,由于这个凡是在是STEPPING STONE中,所以烧写进NAND,跑起来没有问题。 尝试将RW和ZI段放在SDRAM地址进行连接,烧写到NAND,没有反应。

用JTAG查看寄存器信息,看出一些端倪,初始化硬件的代码并没有起作用,可能有2种情况:跑到这些代码了,但是有问题,没有初始化成功;根本就没有跑到这些代码就出问题了。回到调试状态,以.mac文件先进行初始化,程序中硬件初始化部分单步观察,中间通过JTAG手动修改有关寄存器,得到程序初始化功能没问题。那么很基本就是原来没有跑到这部分代码的原因了。

回想启动过程,从CTARTUP.s开始,到low_level_init(),到data init部分,呵呵问题就找到了:这里主要的操作是根据连接地址搬移相应的代码段,初始化相应的数据段,而连接文件中将其中的部分段连接到了SDRAM中,那么在这之前就需要将SDRAM CONTROLLER初始化好。

而在调试的时候由于使用了.mac文件已经在最前面做了这个工作,所有后面做这个工作没有问题,而实际的程序中,将这部分代码防在了这个工作的后面,搬移代码和初始化数据都没办法做。情景跟基本的BOOTLOADER操作都一样。

   按照这样分析修改程序后没问题。

 

问题现象2:NAND 无法进行烧写和擦除。马上想到的是FLASH芯片有问题,测试其相应引脚电压,写保护电压,通过指令检查其坏块信息等,发现没有问题;不依赖烧写工具操作,自己写擦写程序,也不能实现,排除是工具支持不好的问题;进一步单步执行擦写程序,观察相应NAND控制模块寄存器状态,有问题:FLASH被LOCK了,仔细阅读DATASHEET,与分析基本符合,所以问题出在ARM芯片上。被锁住的原因是原来NAND中的程序上电后立即执行可能有代码做了这个事情。

解决办法,RESET,复位后保证不执行原始在NAND中上来的程序,进行擦除或者覆盖原来的程序。可以通过WATCH DOG TIMER触发中断进行复位,复位后将新程序烧写进NAND或者擦除NAND中原来的程序。

主要是对NAND CONTROLLER中LOCK这个功能没有注意过,这个寄存器位一旦被置位将无法通过软件的办法进行清除,只能通过RESET。当然另外一种办法就是通过JTAG来直接烧写NAND FLASH,需要利用特定的扫描链,SJF是否可以值得一试, 呵呵。而不是象H-JTAG那样通过程序在CPU中运行,实现烧写,因为这样必须用到自己的NAND CONTROLLER。

遇到这类问题主要还是要通过观察响应寄存器的信息来进行细致分析。

 

 

 

 

你可能感兴趣的:(timer,工作,测试,Flash,工具)