免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2433 | 回复: 6

NAND flash的写操作问题 [复制链接]

论坛徽章:
0
发表于 2012-07-23 17:09 |显示全部楼层
以前写过vxworks下nor flash的驱动,对于写操作,我当时实现的大致过程是:
1、先读数据出来从要写入的区域。
2、将读入的数据跟要写入的数据进行对比,看是否需要擦除动作。(每个bit只能从1变化到0,所以不能保证直接写入是正确的,除非原有数据都是0xff)
3、如果需要擦除,就先构造好要写入的数据,然后擦除。
4、将构造好的要写入的数据写入。

现在在学习linux下的nand flash驱动,粗看了下nand_write_page()函数,没发现先读出来再擦除再写入的过程。。。

问题:
1、linux下的写操作也应当是类似的过程啊?难道不是这样?
2、如果有类似的过程,那是在哪里实现的?MTD?

请帮我指出来一下代码大概位置吧,多谢!

论坛徽章:
0
发表于 2012-07-24 10:07 |显示全部楼层
这里肯定有看过这部分实现的大侠,盼大侠出现!

论坛徽章:
0
发表于 2012-07-24 12:42 |显示全部楼层
据我所知,Nor Flash和Nand Flash操作肯定是不一样的。需要从二者的本质入手考虑。

论坛徽章:
0
发表于 2012-07-24 12:44 |显示全部楼层
本帖最后由 ToFindMyPuff 于 2012-07-24 12:45 编辑

NorFlash的写和擦除操作灰常慢,所以一般会读出数据确认是否要修改,如果需要的话再改。而NandFlash的读写速度很快,所以没必要进行这一步。
以上是我的理解,不知是否正确,仅做参考。

论坛徽章:
0
发表于 2012-07-24 18:06 |显示全部楼层
依稀记得好像是:
nand_write_page 指的是写入page的数据。
关于此page是否需要先擦除再写入,此处不需要考虑,因为此处既然调用到此函数了,就已经确保此(block中的该)page是可以被直接写入的。
因为擦除的动作,是erase block相关的函数去一次性擦除整个block的,而不是一个page一个page的擦除的。
对于哪些block需要被擦除,则是有对应的垃圾回收机制去决定的。
具体相关的垃圾回收,负载平衡等工作,都是由上层文件系统,比如yaffs2去做的,去决定用何种策略的。

总之,底层的nand_write_page只关心直接写入对应page的数据,因为该page已经是可以直接拿来写入数据的。
更多的其他的事情,都是上层需要考虑的。

如果上述理解有误,还请路过的指正。

论坛徽章:
0
发表于 2012-07-24 18:07 |显示全部楼层
具体代码位置,那去看mtd层,是如何一点点调用到该函数的。
再往上的逻辑,就需要找具体的文件系统,比如yaffs2,好好研究其代码,找到上层代码是如何调用到MTD的。

论坛徽章:
0
发表于 2012-07-25 09:28 |显示全部楼层
回复 6# crifan


嗯,这样看来,应当是上层做的处理,底层就是很单纯的操作了。

文件系统还是MTD,这个得再看了。。。

多谢大侠!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP