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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值