您的位置:首页 > 其它

Flash的一些基本概念以及MTD操作注意点

2013-11-02 22:56 429 查看
以下内容参考于www.linux-mtd.infradead.org以及mtd-utils的code:

1)Minimum flash I/O unit:

NOR一般是1byte,有时也可以是1bit;

NAND一般是1page;

2)nand flash sub-pages:

一般SLC Nand和SLC OneNAND会有subpage,但是一般来讲写subpage会比较的慢,可以refer to www.linux-mtd.infradead.org/doc/ubi.htm,所以现实中还是会使用page进行操作,在UBI FTL(Flash Translation Layer,UBI建立在MTD上)内使用sub-page存放UBI header,是为了减少UBI Header的开销;

一般在NAND中,会一个page使用一个ECC用来纠正位翻转或者检验是否是坏块,有了sub-page后,可以一个sub-page使用一个ECC

3)从mtd-utils中得知,在操作MTD设备时,read和write失败会产生EIO的errno,所以如果遇到坏块,根本没有机会让你write成功(会返回-1);

有一些code会在write erase block后再回读比较erase block,看写进去的数据是否正确,这个是没有必要的,这种write erase block返回成功却写入错误数据的几率极其小,在mtd-utils内是忽略这种情况的,他处理使用时产生坏块的方式是先检查errno,然后确定是EIO时再用相关的函数判读是否真的是坏快,libmtd中使用的是mtd_torture(),如果errno不是EIO则判定整个程序操作flash失败,退出程序。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: