Nand Flash驱动, ECC, MTD, FTL, 文件系统
2011-05-23 20:03
特点 Nand flash存储结构为chip->(plane)->block->page>byte。 page分为数据区和oob(out of band),oob用于存放ecc码、标记坏块和文件系统备用等。 Nand flash的物理特性决定了每一个bit只能从1变为0,不能从0变为1。 Nand flash在出厂和使用过程中可能出现某些bit错误,所以采用了ecc的纠错和检错方法。 在读写过程中Nand flash状态寄存器返回错误或者发现多个bit发生不能纠错的错误,则可以标记该block为坏块,将该block的第一第二page的oob的相应byte置为非0xff,文件系统/操作系统需要管理坏块。
Nand flash的命令包括擦除、读、写,擦除针对block进行,将整个block全部置为1;读和写都针对page进行。因为每个bit只能从1到0,所以每次写之前,要进行擦除。基本三个阶段:命令->地址->数据,不同阶段根据引脚(片选、读\写使能、命令\地址锁存引脚等)决定。
对每个block中的page访问必须是顺序的,不能是随机的。 擦除和写次数是有寿命的,通常可达10万次。所以不能频繁对某个block进行擦除和写,所以软件需要将擦除和写平摊到每个block上,这种操作叫做负载均衡wear leveling。
Nand flash的IO是复用的,这样的好处就是pin少,可扩展性好。



ecc ecc有软件和硬件之分。 对于硬件ecc来说,在写page的时候,硬件自动产生ecc,将其存入oob的某些byte。在读page的时候,硬件也自动产生一个ecc,并和oob比较,通过比较可以实现纠错和检错。 详见: http://dev.firnow.com/course/3_program/c/c_js/20100710/397316.html
Nand flash controller Nand flash只是相当于cpu的一个外设,并不位于内存地址区。cpu内部有Nand flash controller与Nand flash打交道。
驱动程序 所谓Nand flash的驱动也就是对Nand flash controller编程(发送命令/写寄存器都是同样的意思)。驱动程序的结构大同小异,区别在于每家芯片的Nand flash controller的设计不同,所以对controller的编程的部分是不同的,还有不同的在于数据传输(比如,数据是拷贝或是DMA等)。
对于硬件ecc来说,基本的驱动包括下述功能:擦除block、读写page、ecc判断、坏块标识、读取Nand状态、等待Nand、复位Nand、初始化等;
初始化中要开辟驱动程序需要的memory,设置工作模式(page大小、block大小、时钟频率、ecc模式等),和对函数指针赋值:


驱动是分层的,以上是最底层的chip的驱动,是为了上层MTD服务的。 以读page为例: chip->cmdfunc(MTD, NAND_CMD_READ0, 0x00, page);//先发读命令,由controller将读命令发给nand flash chip->ecc.read_page(MTD, chip, buf);//然后读取数据(拷贝或者DMA方式),其中还有ecc校验

关于MTD的驱动架构详见: 《如何编写Linux下Nand Flash驱动》
MTD linux下的设备分成block device和character device,flash两者都不是属于MTD(Memory Technology Device)。但这个只是指代的是原始的Nand flash和Nor flash芯片,衍生产品如SSD, MMC, eMMC, RS-MMC, SD, mini-SD, micro-SD, USB flash都属于block device。
block device和mtd device的区别如下:

像传统的文件系统,如FAT、ntfs、ext2、ext3等,都是建立在block device上的。MTD有自己的文件系统。
SSD, MMC, eMMC, RS-MMC, SD, mini-SD, micro-SD, USB flash这些设备里面的储存媒介当然还是flash,但是拆开它们还会发现一块MCU,它的firmware实现了FTL。所谓FTL是Flash Translation Layers,从软件上将flash“模拟”为block device了。
FTL的重要功能包括负载均衡、逻辑地址与物理地址映射、提供与block device相同的访问界面(512 bytes/sector)。FTL建立在MTD之上,传统的文件系统再建立在FTL之上。但每家厂家的FTL是不公开的,所以不知道好坏真的如何。遇到使用不好的FTL的U盘,可能马上出现“IO读写错误”了!
详见: http://www.linux-mtd.infradead.org/index.html
文件系统 常见的有JFFS2、YAFFS、TrueFFS文件系统都提供了坏块管理、负载均衡,ecc纠错检错等功能。 有UBIFS,UBIFS建立在UBI层上,UBI层建立在MTD上,而上述的两个文件系统是直接建立在MTD上的。 UBI要的工作就是实现更好的负载均衡和坏块管理,减轻文件系统的工作。 详见: http://www.linux-mtd.infradead.org/doc/ubifs.html 一般系统启动流程 Nor flash类似ram,地址线和数据线分开,一般位于内存地址区,支持代码片上执行。嵌入式芯片内部一般还有rom,从rom跳转到nor flash中执行代码,该代码称为bootloader,它初始化外设,串口、dram、nand flash等。之后bootloader把Nand flash中的main code拷贝到dram中去,接着跳转到main code入口。 当然启动有多种方式,main code较小的也有直接放在nor flash中,bootloader较大可能还会把自己也拷贝到dram中去。

|
分享到:
相关推荐
Java 项目, Java 毕业设计,Java 课程设计,基于 SpringBoot 开发的,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行! 1. 技术组成 前端:html、javascript、Vue 后台框架:SpringBoot 开发环境:idea 数据库:MySql(建议用 5.7 版本,8.0 有时候会有坑) 数据库工具:navicat 部署环境:Tomcat(建议用 7.x 或者 8.x 版本), maven 2. 部署 如果部署有疑问的话,可以找我咨询 Java工具包下载地址: https://pan.quark.cn/s/eb24351ebac4 后台路径地址:localhost:8080/项目名称/admin/dist/index.html 前台路径地址:localhost:8080/项目名称/front/index.html (无前台不需要输入)
本次分享的数据为1896年-2024年(从雅典到巴黎)间奥运会奖牌数据,包括年份、届次、国家地区、名次、金牌、银牌、铜牌等数据,含免费下载链接 ## 一、数据介绍 数据名称:历届奥运会奖牌数据 数据范围:世界各国 样本数量:1877条 数据年份:1896年-2024年 数据说明:包括届次、国家、名次等数据
Java 项目, Java 毕业设计,Java 课程设计,基于 SpringBoot 开发的,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行! 1. 技术组成 前端:html、javascript、Vue 后台框架:SpringBoot 开发环境:idea 数据库:MySql(建议用 5.7 版本,8.0 有时候会有坑) 数据库工具:navicat 部署环境:Tomcat(建议用 7.x 或者 8.x 版本), maven 2. 部署 如果部署有疑问的话,可以找我咨询 Java工具包下载地址: https://pan.quark.cn/s/eb24351ebac4 后台路径地址:localhost:8080/项目名称/admin/dist/index.html 前台路径地址:localhost:8080/项目名称/front/index.html (无前台不需要输入)
【人机交互】MATLAB直车道线检测
Java 项目, Java 毕业设计,Java 课程设计,基于 SpringBoot 开发的,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行! 1. 技术组成 前端:jsp 后台框架:SSM 开发环境:idea 数据库:MySql(建议用 5.7 版本,8.0 有时候会有坑) 数据库工具:navicat 部署环境:Tomcat(建议用 7.x 或者 8.x 版本), maven 2. 部署 如果部署有疑问的话,可以找我咨询 Java工具包下载地址: https://pan.quark.cn/s/eb24351ebac4
Java 项目, Java 毕业设计,Java 课程设计,基于 SpringBoot 开发的,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行! 1. 技术组成 前端:jsp 后台框架:SSM 开发环境:idea 数据库:MySql(建议用 5.7 版本,8.0 有时候会有坑) 数据库工具:navicat 部署环境:Tomcat(建议用 7.x 或者 8.x 版本), maven 2. 部署 如果部署有疑问的话,可以找我咨询 Java工具包下载地址: https://pan.quark.cn/s/eb24351ebac4
2023年计算机硬件的组装实验报告.pdf
ava项目springboot基于springboot的课程设计,包含源码+数据库+毕业论文
内容概要:本文档主要针对含有质量平衡段(即弹性轴和重心重合点xa=0)的硬翼Flutter问题提供了MATLAB解决方案。文档通过迭代的方式对一系列参数(如频率比(fr)、弹性轴(E)和半径(r)等)进行操作,并利用贝塞尔函数(Kn)来评估flutter速度(UFhat),从而预测了不同质比(mu)下flutter的缩减速度变化情况。同时,文档包含了绘图命令以视觉展示减小颤振速度随质量比变化的趋势以及相应的MATLAB代码。 适合人群:航空工程、飞行器动力学领域的科研工作者,工程师及研究生。尤其是那些从事飞行安全性和稳定性研究的专业人士。 使用场景及目标:主要用于解决飞行器设计过程中遇到的具体颤振问题,能够为设计新型飞机或其他有翼飞行物体提供科学依据和技术支持。它还能够辅助教育,帮助相关专业的学生理解flutter现象及其预防措施。 其他说明:此文件是以数值方法探讨带质量平衡的翅膀颤振特性的实例,在工程上有着重要意义。对于希望深入学习此类问题的人来说,这是一个极好的参考资料和实验平台。然而,实际应用还需要进一步考虑真实条件下的复杂因素,因此需要更多的专业知识和背景资料的支持。
本次项目是设计一个基于JAVA的机场航班起降与协调管理系统。 (1)在经济可行性上来分析的话,该软件是机场内部使用的一个指挥协调软件,属于航空安全投资,本软件开发成本并不高,软件和服务器数据库可以用机场原有的数据库进行开发,比起空难给航空公司造成的损失来说九牛一毛。 (2)在技术可行性上来分析的话,该软件主要运用了Java技术、jQuery-easyui和Mysql数据库技术。Java是到目前来说最稳定的、最可靠的软件开发工具;jQuery-easyui虽然是比较新的前台开发技术,但是他的界面新颖整洁,适合于功能性软件的开发;Mysql数据库也是许多大公司都采用的软件项目开发数据库,不仅稳定而且性能可靠,可以用作本次软件的开发。 (3)在法律可行性上来分析的话,该软件使用的技术都为开源的软件开发工具和语言,虽然Java等开发技术都存在Sun公司的版权问题,但是Java技术是可以免费使用的,没有涉及到法律上的侵权。 (4)在方案可行性上来分析的话,此次软件开发的很大一部分精力都放在了软件的需求分析和设计方面,设计出来的软件可以很好地去实现我们所要完成的软件预先设计的功能。
2023年计算机与通信网络实验报告.pdf
2023年四川省德阳市统招专升本计算机自考真题(含答案).pdf
Java 项目, Java 毕业设计,Java 课程设计,基于 SpringBoot 开发的,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行! 1. 技术组成 前端:jsp 后台框架:SSM 开发环境:idea 数据库:MySql(建议用 5.7 版本,8.0 有时候会有坑) 数据库工具:navicat 部署环境:Tomcat(建议用 7.x 或者 8.x 版本), maven 2. 部署 如果部署有疑问的话,可以找我咨询 Java工具包下载地址: https://pan.quark.cn/s/eb24351ebac4
Java项目基于springboot的课程设计,包含源码+数据库+毕业论文
Java 项目,仅供学习参考。 Java 毕业设计,Java 课程设计,基于 SpringBoot 开发的,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行! 1. 技术组成 前端:html、javascript、Vue 后台框架:SpringBoot 开发环境:idea 数据库:MySql(建议用 5.7 版本,8.0 有时候会有坑) 数据库工具:navicat 部署环境:Tomcat(建议用 7.x 或者 8.x 版本), maven 2. 部署 如果部署有疑问的话,可以找我咨询 Java工具包下载地址: https://pan.quark.cn/s/eb24351ebac4 后台路径地址:localhost:8080/项目名称/admin/dist/index.html 前台路径地址:localhost:8080/项目名称/front/index.html (无前台不需要输入)
GUI面板MATLAB答题纸试卷自动识别
Java 项目, Java 毕业设计,Java 课程设计,基于 SpringBoot 开发的,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行! 1. 技术组成 前端:html、javascript、Vue 后台框架:SpringBoot 开发环境:idea 数据库:MySql(建议用 5.7 版本,8.0 有时候会有坑) 数据库工具:navicat 部署环境:Tomcat(建议用 7.x 或者 8.x 版本), maven 2. 部署 如果部署有疑问的话,可以找我咨询 Java工具包下载地址: https://pan.quark.cn/s/eb24351ebac4 后台路径地址:localhost:8080/项目名称/admin/dist/index.html 前台路径地址:localhost:8080/项目名称/front/index.html (无前台不需要输入)
ava项目springboot基于springboot的课程设计,包含源码+数据库+毕业论文
美国工业机器人渗透度是衡量自动化技术在制造业和其他工业领域应用程度的重要指标,可帮助研究制造业自动化趋势、劳动力市场变化,以及智能制造对经济的影响,同时,本分享数据也可用作工业机器人工具变量 ## 一、美国工业机器人渗透度数据的介绍 数据年份:2011-2019年 数据范围:美国各行业 数据格式:excel、dta
编织复合材料模型,已经画好周期性网格,可直接运行easy_pbc插件计算均质化属性,可修改材料属性,关于周期性网格画法可讨论