6449|16

70

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

NAND FLASH驱动 [复制链接]

windows ce4.2里,Nandflash驱动分为2层,FAL层和FMD层,其中FAL层是以LIB文件形式提供,FMD层则实现一些接口函数,如FMD_GetBlockStatus等。
本人的平台每次开机的时候都会去检测nandflash的坏区情况,它有8192个block,依次掉用FMD_GetBlockStatus去检测很浪费时间。个人觉得已经存在的坏区不用再检测了,出现新的坏区后去更新坏区表而已;如果存在一个坏区表,比如在第0个block,第一次开机的时候先读取三星原有的坏区并更新第0个block,以后就不再读了;如果使用过程中发现坏区,再去更新第0个block;然后在擦除或者写入block的时候,先检测当前是否是坏区,如果是坏区,便转到下一个block。
现在想修改驱动程序,把开机自检部分去除,但上层FAL代码没有公开,无法避免FMD_GetBlockStatus函数被循坏调用8192次。我现在的驱动,写入或者擦除的时候没有去检测当前是否坏区。部分代码如下:

              NF_CMD(CMD_WRITE);

            //  Set up address
            NF_ADDR((unsigned char)(((SectorAddr%4)*512)&0xff));
            NF_ADDR((unsigned char)((((SectorAddr%4)*512)>>8)&0xff));
            NF_ADDR((unsigned char)((SectorAddr/4)&0xff));
            NF_ADDR((unsigned char)(((SectorAddr/4)>>8)&0xff));
            NF_ADDR((unsigned char)(((SectorAddr/4)>>16)&0xff));
            for(i=0; i             {
                 NF_DATA_W((UCHAR)pSectorBuff);
            }
            
            NF_CMD(0x85);
            NF_ADDR((unsigned char)((2048+((SectorAddr%4)*16))&0xff));
            NF_ADDR((unsigned char)(((2048+((SectorAddr%4)*16))>>8)&0xff));

            //  Write the bad block flag
            NF_DATA_W((unsigned char)(pSectorInfoBuff->bBadBlock));

问题:
1、pSectorInfoBuff->bBadBlock的信息从何而来?为什么不是写到第0或第1页的第2048个字节呢?而是NF_DATA_W((unsigned char)(pSectorInfoBuff->bBadBlock));写入呢?
2、怎样避免系统自动调用FMD_GetBlockStatus函数呢?
3、nandflash加载FAT文件系统后,第0个block是不是被文件系统占用(比如FAT表区)?还能使用第0个block记录坏块信息吗?

最新回复

终于找到党组织了,希望没有来晚,楼主这个问题怎么解决的阿????分享一下经验,分都给你!!  详情 回复 发表于 2008-12-18 15:20
点赞 关注

回复
举报

58

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
关注一下。
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
FMD的驱动我没有了解那么深入,不过我最近要移植,估计也会遇到问题,先留个脚印先。到时候我再花时间来看,
貌似楼主加我为好友,我拒绝了,不好意思,你是初来论坛,以前都没有见过,所以不敢加那么多人,我加你吧。
 
 
 

回复

90

帖子

0

TA的资源

一粒金砂(初级)

4
 
学习,帮顶!
 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(初级)

5
 
这个问题我曾经研究过的,等我过两天给你一个文档,方便的时候单独交流交流。
 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(初级)

6
 
引用 4 楼 Seven_zhangxw 的回复:
这个问题我曾经研究过的,等我过两天给你一个文档,方便的时候单独交流交流。

发给我,我给分你,哈哈
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

7
 
呵呵,自己发帖的历史不长,第一次有这么多回复,我高兴的笑出声来!我的联系方式:
qq:55142978
email:daigua04@hotmail.com
张开双手欢迎各位新朋友...
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

8
 
我当初研究EBOOT烧录和生产线烧录的问题,因此研究了一下NAND和文件系统。。。
谁要来取啊。
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

9
 
英雄,server_zhangxw,我来取了,上面有我的联系方式。
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

10
 
关注一下,其实我对ECC也是似懂非懂的,向大家请教。
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

11
 
给我发一分资料吧
mengren425@163.com
非常感谢~
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

12
 
引用 2 楼 gooogleman 的回复:
FMD的驱动我没有了解那么深入,不过我最近要移植,估计也会遇到问题,先留个脚印先。到时候我再花时间来看,
貌似楼主加我为好友,我拒绝了,不好意思,你是初来论坛,以前都没有见过,所以不敢加那么多人,我加你吧。


哈哈,刚才我开QQ发现你加我-----------我不知道是谁,所以就拒绝了。不过你在eeworld和我的群都可以经常看见我。不用加什么好友的。
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

13
 
引用 4 楼 Seven_zhangxw 的回复:
这个问题我曾经研究过的,等我过两天给你一个文档,方便的时候单独交流交流。


发给我flash 和文件系统的宝贝吧。我的邮箱:wogoyixikexie@163.com
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

14
 
1、pSectorInfoBuff->bBadBlock的信息从何而来?为什么不是写到第0或第1页的第2048个字节呢?而是NF_DATA_W((unsigned char)(pSectorInfoBuff->bBadBlock));写入呢?
怎么会写到0页的第2048个字节呢?我记得是通过宏操作的。
2、怎样避免系统自动调用FMD_GetBlockStatus函数呢?
应该是避免不了,你不导出这个函数肯定是不行,而且避免会有问题不让系统查坏区?,
3、nandflash加载FAT文件系统后,第0个block是不是被文件系统占用(比如FAT表区)?还能使用第0个block记录坏块信息吗?
这个不能啊。
 
 
 

回复

58

帖子

0

TA的资源

一粒金砂(初级)

15
 
我在微软技术论坛上看到一篇帖子,原文如下:


     他是在起动时要读取,在剩余空间里标注了扇区号的FLAH的页的INFO,对未标注的就只读取好坏块的INFO,
    也就是说你的文件或删掉的文件,只要曾使用过的页都会被标注扇区号,都会被读,即如国你的扇区越小越浪费时间!
    FMD这块,我认为微软做的很差径,卡卡!

   请问下,什么样的扇区标注了扇区号?标注在哪里?是不是使用过的扇区都会标明扇区号?那未标注的就是指空闲的扇区?

    我的系统基于wce4.2平台,nand flash为1GB,共8192个block,每个block256个扇区,系统每次开机时,都会去调用FMD_ReadSector函数读取每个扇区的状态,同时还会调用FMD_GetBlockStatus去读每个block的好坏。由于扇区数目庞大,导致开机很慢。奇怪的现象是,系统也不是每个扇区都会去读,而是跳跃式的,比如从第0个开始,读到第10万个的时候,直接就去读第80万了,而且读到大概160万个的时候就停止了,此时nand flash才能正常被识别。

    请问,为什么每次开机都会去读扇区的状态?是不是因为这些扇区保留有数据,系统需要验证这些数据的正确与否?空闲的扇区就跳过?如果nand flash接近饱和,可能导致开机速度越来越慢,有没有什么办法呢?



   因为上层FAL层代码不可见,导致分析起来捉襟见肘,恳请英雄指点迷津,不胜感激!
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

16
 
不检测坏块的话如果遇到坏块那以后就启动不了了。我没有看那么深入,没有办法跟你交流啊。现在又有别的事情做,跟不了了。
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

17
 
终于找到党组织了,希望没有来晚,楼主这个问题怎么解决的阿????分享一下经验,分都给你!!
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表