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失败,退出程序。
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失败,退出程序。
相关文章推荐
- 动态规划_矩阵连乘的空间复杂度优化
- Oracle数据的导入导出
- HTML标签
- iOS新浪微博客户端项目:1,客户端开发流程
- Opencv内存jpg图像解码和编码[转]
- 第四章 HTML与JavaScript
- Android SDK manager无法启动原因
- java中的io流
- [jobdu]包含min函数的栈
- Oracle - SGA 结构
- 黑马程序员-----简单理解 浏览器与服务器
- ORA-01017 invalid username/password;logon denied (密码丢失解决方案)
- 表达式求值
- struts2的防止表单重复提交
- Github 使用
- Redis集群方案
- 简单工厂设计模式
- 范式
- 深入剖析MongoDB架构
- hdu-1575矩阵快速幂