以下内容参考于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失败,退出程序。