遇到这样的现象,就是系统启动的时候停住了,发现是eboot的TOC_Read函数调用VALID_TOC(g_pTOC)函数来判断(ptoc)->dwSignature的时候出错了,根据打印信息,(ptoc)->dwSignature=0xFFFFFFFF,正常情况下这个值是0x434F544E (表示NAND TOC)才对,而这之前是调用flash的read函数来从TOC的所在的block中读取的内容给g_pTOC,所以这个问题的根源就是MLC nand flash中保存TOC所在的块的页内容出错了,所以就导致了读取出来的(ptoc)->dwSignature=0xFFFFFFFF,对于这个问题产生的原因,想麻烦大家谈谈自己的理解和解决这个问题的思路与建议,先谢谢了
应该是你的flash损坏了,或者是其他硬件原因引起读错误吧。烧写正常吗?你有改TOC结构体里的内容吗?
现在我也遇到了这个问题,TOC所在的块恰好是物理上的坏块。楼主怎么解决? 思路上是如果遇到了定义的TOC块是坏块就往下一个block写。是不是只要修改toc_read , toc_write两个函数?
今天试了下。 的确是修改了这两个函数就OK了。 我的是由于nandflash物理坏块引起。就是增加下判断是否TOC_BLOCK是坏块。如果是坏块就将TOC_BLOCK向后移。。当然修改了下loader.h中关于NBOOT EBOOT TOC LOGO块的分配 哈哈