|
我发现在2410init.s中的“拷贝nand中内容到SDRAM”的这个代码是有问题的。理由如下:
我们知道nand中存在坏块的,但是第一个block肯定是好块,这个可以确认。
如果我我烧录的bin文件是低于steppingstone 4KB大小,那么上电后程序执行肯定是没有问题的,因为2410内部固化的程序把从nandflash x0开始的4KB内容先拷贝到SRAM中,
之后boot启动运行,会把nand中的RO,RW,代码和数据拷贝的运行域,0x30000000的SDRAM位置,之后PC指到其位置运行。
但如果我的bin文件为27KB,已经大于单个blocksize了,而正好我的nand的第二个block为badblock,那么boot在SRAM 中执行nandcopy时没有先检查坏块(注:烧录时肯定是做了坏块检查的了),这导致nand_read_ll( )函数仅仅是从指定读出数据,但不管读数据的地方是不是有效的,这样的话,拷贝到SDRAM中的内容可能是无效的代码或数据,程序肯定也执行不了啦。。。
注:昨晚发现的,今晚回去试一下,加个坏块处理,嘿嘿。。。到时汇报战果
另外我是在ULINK2 + MDK + 阳初2410开发板上玩的。。。
|
|