以下内容参考于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失败,退出程序。
理解NAND闪存的最小I/O单元及子页特性
本文深入探讨了NAND闪存的最小I/O单元概念,包括NOR与NAND的区别,以及在实际应用中如何处理NAND闪存的子页。解释了为何在UBIFTL中使用子页来存放UBI头部,并说明了子页在提高数据校验效率方面的作用。同时,文章阐述了在操作MTD设备时遇到坏块的情况及其处理方式。
83

被折叠的 条评论
为什么被折叠?



