pxa255+wce4.2系统,nand flash一共8192个block,开机检测坏块时,前面1000个左右非常慢,后面的非常快,不知道什么原因?我把FMD_GetBlockStatus设置为固定值还是同样的结果...是不是FAL层对不同的block处理过程不一样,导致检测时间不同呢?
没有,现在发现,每次开机系统(wce4.2)都会去循环调用FMD_ReadSector去读取每个sector的信息,同时还会去调用FMD_GetBlockStatus去读取坏块,也就是同时做两件事情,导致前面部分检测比较慢,后面检测比较快!
系统为什么要循环读取每个sector的信息?1GB的nand flash一共有8192个block,每个block有256个sector,这样读下去太浪费时间了吧?而且同时还要去读取坏块的信息,能不能有方法不让它去读这些信息啊?
没有办法,系统得知道你每个sector的状态,否则它怎么知道你的磁盘信息和上面已经存在的文件信息?
通过调试发现,系统也不是每个sector都去读,nand flash一共有290万个sector,只读到大概160万个的时候,就不再读了。
而且读的时候,也不是连续的读,而是跳跃式的,如下所示(第一个数字表示sector序号):
FMD_ReadSector(50000,0,40AEE54,1)
FMD_ReadSector(100000,0,40AEE54,1)
FMD_ReadSector(150000,0,40AEE54,1)
FMD_ReadSector(200000,0,40AEE54,1)
FMD_ReadSector(250000,0,40AEE54,1)
FMD_ReadSector(300000,0,40AEE54,1)
FMD_ReadSector(350000,0,40AEE54,1)
FMD_ReadSector(800000,0,40AEE54,1)
FMD_ReadSector(1600000,0,40AEE54,1)
我每隔50000打印一次信息,但是到了350000的时候,就直接跳到800000,然后就1600000,接着就不读了。
系统读sector时为什么不是连续的?而且也不是读到最后一个sector?是不是因为后续的sector没有存放数据,所以不读了?中间不连续的部分也是因为没有有效数据?
另外,系统要知道当前nand flash上存放了什么数据,可以通过读取FAT表什么的(FAT文件系统提供的),肯定比读那么多sector要来得快吧?
googleman英雄,你的也是wce4.2平台吗?你是不读sector的状态还是不检测坏块啊?
我的系统开机后不光是读sector的状态,还要读每个块的好块状态的。
能不能给我看看你的platform.reg中关于nand flash的部分?我看看跟我的有什么区别?谢谢了!