从物理层,逻辑层和驱动文件系统接口层分析NAND FLASH驱动程序的实现

2019-01-28 13:50:49 来源:网络
标签:

 

1 引言

随着U盘、数码相机、mp3音乐播放器等移动设备的广泛应用,FLASH存储器已经逐步取代其它半导体存储元件,成为嵌入式系统中主要数据和程序的载体。NAND FLASH是一种可在线多次擦除的非易失性存储器,其结构提供了极高的单元密度,可以达到数据的高密度存储,并且写入和擦除的速度也很快,所以 NAND FLASH是高密度数据存储的理想[2] 。本文主要从物理层逻辑层驱动文件系统接口层三个方面具体分析NAND FLASH驱动程序的实现。


2 物理层驱动实现

NAND芯片的存储空间是按照块和页的概念来组织的。现在市面上的NAND主要按大页和小页两种存储类型来进行数据管理。本文采用的NAND型号是K9F1G08X0A,该NAND为大页结构,即芯片每块()有64页(Page),每页有2K 的数据存储区和64的冗余数据区(用来存放ECC校验码)。2K 的数据存储区作为数据缓冲单元,用来实现I/0缓冲和存储器之间的数据传输。芯片的存储阵列组织如图1所示。

 

NAND FLASH的物理层驱动主要涉及到:NAND的初始化(ID以及相关属性信息的读取)、擦除(以块作为单位),数据读写(以页作为基本单位)。在这一系列的过程中,会涉及到NAND命令的发送以及NAND地址的发送。其中地址的发送会因NAND型号的不同而有所区别。一般来说,小页的NAND其地址周期通常为4个:1个列地址(Column Address)和3个行地址(Row Address),而对大页的NAND来说,列地址至少是2个周期,行地址会因芯片的容量大小而有所区别。本文采用的三星NAND芯片是2个列地址和2个行地址。对于NAND FLASH 来讲,地址和命令只能在I/O[7:0]上并行传递。NAND FLASH 以页为单位读写数据,而以块为单位擦除数据。NAND的数据传输方式有基本的I/O传输方式,即在I/O[7:0]数据线上进行的数据传输。这种操作的缺点是系统CPU要频繁参与控制数据的传输,会影响到数据传输速度。本文采用DMA传输方式,数据宽度是8/16/32bit,通过中断的形式通知CPU数据的传输情况,DMA传输主要涉及DMA 控制器的配置以及通道的选择。

 

3 逻辑层驱动实现以及坏块管理机制

3.1 逻辑基本读写操作

驱动逻辑层的主要任务是整合物理层的驱动,并为文件系统驱动层提供接口。在该层中主要涉及的操作包括NAND 的逻辑读、写以及擦除。逻辑层对NAND 的操作都是以块()作为单位来进行操作的。因此须在逻辑层中构建一个块缓存( Buffer)来临时存放读出/写入NAND 的数据。这样,NAND 的读取机制分为两种:页读取(Page )和块读取(Block)。在页读取时,通过坏块表进行索引指定块(Block)和页(Page)来进行数据读操作,而块读取时则是通过整合页读取时的缓存数据,把NAND 的数据以块的形式进行缓存(BlockBuffer)。NAND 的写入机制不像其它的FLASH 器件,NAND 要求在写入数据时,首先必须进行数据的擦除。因此我们在写数据的时候,先把将要被写入的数据块的内容读出到块缓存,然后再把要写入NAND 的数据以页为单位的形式写入块缓存(Block Buffer)中的对应地址。接着把以前存放数据的块进行擦除操作,最后把更新的数据写到NAND 去。经过这一系列的操作,实现了NAND 数据的逻辑写入。图2 说明了一次写操作的具体流程。

3.2 坏块管理机制的原理及实现

 

NAND 由于采用了高密集的存储单元,在使用过程中难免会损坏一些存储单元,这就是我们所说的坏块[3]。数据操作时应该避免对这些坏块进行操作,否则会引起数据的错误。

 

一般而言,NAND 的第0 块常被用来作为程序的引导区,因此NAND 芯片厂商会保证第0块不会成为坏区。而作为0 块以后的数据存储块,当坏块产生时,系统级的设计必须能够用地址映射把这些坏块屏蔽掉。芯片在出厂时,除保存坏块信息的区域外,部分一律被擦除(值为0xFF),对坏块的读操作是允许的,但不推荐进行写和擦除操作,以免由于结构方面的原因使邻近的块也失效。系统设计时必须根据初始的坏块信息识别出坏块,并建立坏块列表。进行写或擦除操作时将欲操作块的地址与坏块地址表的地址相比较,若是坏块则应跳过。芯片在使用过程中,可能有新坏块的产生,为了系统的可靠性,必须对此情况加以考虑。

 

在数据写入或块擦除操作后,如果读状态寄存器出现错误,则表示块内有坏页存在,也即表明此块已坏,因为块内坏页的存在并不影响页的读写,这时可采用块操作来把页内有用数据转移到空闲块内,并把坏块信息存入坏块表中。因此,当我们在格式化NAND的时候,要给出一定的区域用来存放坏块索引表和坏块表。考虑到一个块(Block)的大小为128KB,而现在市面上的一般的NAND的容量大小为128MB-2GB不等。故分配10 个块(Block)来进行存储。由于第0 块为用户不可见块,实际要求为1-11 块作为存储空间。图 3 表明了如何建立坏块索引表和坏块表的流程。

 

其中,在坏块索引(BBTINDEX)中,整型变量biTIsBadBlock 中的每一个bit,标记一个块的状态(1 表示坏块,0 表示好块),在ARM 体系中,可以标记32 个块。该区域被称为一个索引区域。整型变量mPosInBBT 表示如果有坏块,则表示索引区域在坏块表中的偏移。

 

这样通过定义一个索引tableTopPos 变量,来指示下一个坏块在数组中的位置。同样在坏块表(BBTENTRY)中,整型变量mBadBlock 标志块是坏块,而mReplaceBlock 变量则表示该坏块在备份区中对应的可以的好块。这样通过定义一个索引bakupTopPos 变量,来指示下一个坏块在备用区的位置。通过结合坏块索引和坏块表,可以对数据进行准确的操作,而每次对NAND 操作完成后,及时地更新坏块索引和坏块表。

 

4 文件系统层的接口实现

现在一般对NAND 支持的文件系统用的最多的是YAFFS 文件系统。本文由于基于的操作系统平台是uC/OS,故采用了uC/FS 文件系统作为NAND 的文件驱动接口,uC/FS 文件系统进行的操作都是基于FAT 文件格式的。对用户来说,所用对NAND 的操作,都是通过文件接口层来完成的。文件接口层对数据的操作都是以扇区(Sector)来进行的。因此,文件接口层的主要任务是把从逻辑层的逻辑操作转化为以扇区(Sector)为单位的操作,文件系统的接口函数主要通过一个结构体 (FS___)来进行描述[4],该结构体包含了驱动设备的名称以及4 个基本的驱动设备挂接函数的函数指针。

 

在这几个函数中,dev_status()函数主要实现FAT 表状态信息的读取,并表明该NAND 设备可以使用;dev_()函数实现对NAND 进行文件系统块数据的读取;dev_write()函数实现对NAND 进行文件系统块数据的写入;dev_()函数则主要实现文件操作的相关指令,包括文件格式化,数据cache 回写等操作。通过这几个文件接口函数,用户可以实现对NAND 进行的数据基本操作。

 

其中,mCache 数组大小为数据读取时的存储大小,由NAND 的文件系统遵循 标准决定,大小为512Byte;mTImes 表示被Cache 的块(Sector)的命中次数,反映了数据块的存取几率;mSectorId 表示被Cache 块(Sector)的序号,通过该序号来对Cache 的数据块进行索引。

 

5 总结

对大容量的 NAND FLASH 进行数据操作,坏块处理机制是很重要的,通过建立坏块处理表,避免了对无效块进行的操作,提高了数据的准确性。另外,ECC 作为NAND 纠错机制,在NAND 驱动中也广泛运用,本文的NAND 驱动中也加入了ECC 机制,由于篇幅有限,不对其进行深入探讨。

 
关注与非网微信 ( ee-focus )
限量版产业观察、行业动态、技术大餐每日推荐
享受快时代的精品慢阅读
 

 

继续阅读
存储芯片需求触底反弹,降价潮即将过去,国产存储产业将迎来春天?
存储芯片需求触底反弹,降价潮即将过去,国产存储产业将迎来春天?

2018年二季度以来,存储芯片迎来一波降价潮,根据市调公司DRAMeXchange公布的数据显示,DRAM平均交易价格(ASP)在去年第四季就下降了11%以上,NAND闪存价格2018年下跌了至少50%。

美光的3D XPoint技术究竟进展如何了
美光的3D XPoint技术究竟进展如何了

QuantX的首次亮相是在2016年的闪存峰会上,三年之后,美光最终将要在2019年底发布第一款基于3D XPoint技术的产品。在合作了两代技术之后,英特尔和美光正在结束他们在3D XPoint上的合作关系。虽然可能至少在2020年之前,3D XPoint都会让美光有赔无赚,但是,到2024年时,它将给美光带来约30亿美元的市场增长

NAND价格将在今年下半年回稳,慧荣预计2019年营收与18年持平
NAND价格将在今年下半年回稳,慧荣预计2019年营收与18年持平

慧荣科技(SIMO) 30日公布2018年财报,全年度营收5.3亿美元,年增1%,毛利率49.3%,税后净利1.23亿美元,每单位稀释之美国存托凭证(ADS)盈余3.41美元(约新台币105元)。

存储级内存取代NAND闪存的可能性分析

存储级内存(SCM)这种RAM能够像NAND闪存那样保保存其内容,但兼具DRAM的速度,最终将会取代闪存成为首选的高速存储介质。

我国集成电路产业发展情况如何?中芯国际/长江存储/合肥长鑫告诉你答案
我国集成电路产业发展情况如何?中芯国际/长江存储/合肥长鑫告诉你答案

近日,华信研究院发布了《集成电路产业投融资白皮书(2018)》涉及集成电路产业发展和技术动态,例如在制造方面,介绍了中芯国际、华虹、长江存储、合肥长鑫的最新技术进展。

更多资讯
80年历史看三星半导体超越英特尔绝非偶然?(下篇)
80年历史看三星半导体超越英特尔绝非偶然?(下篇)

在上篇中我们回顾了三星半导体的诞生以及它对手机和存储芯片的倾力投入和一段艰苦岁月。本文我们继续看这家公司怎么成长为芯片产业的一哥。

IBM如何从一个落伍者重回数字计算第一梯队
IBM如何从一个落伍者重回数字计算第一梯队

IBM在上世纪80年代的信息革命中,不情愿地成为了落伍者——虽然IBM最早推出了个人电脑,但是由于IBM的保守性,最终没能成为个人电脑之王。反而是微软和Intel借助个人电脑市场逐渐做大,并逐步侵蚀IBM的传统市场。IBM随即出现了严重的亏损,并打破了IBM从不裁员的神话。这段时期,是IBM历史上最艰难的时期。当时有人甚至质疑IBM公司是

2018年十件FPGA大事,哪件牵动你的心(上)
2018年十件FPGA大事,哪件牵动你的心(上)

在科技领域里,FPGA向来都不是最吸引眼球的。可是就在刚刚过去的2018年,就发生了很多FPGA相关的大事。在这些大事中,很多都会对FPGA甚至整个芯片行业未来的发展产生重大影响。

集成和独立USB解决方案的优缺点分析

随着串口从台式机和笔记本电脑中消失,通用串行总线(USB)现在成为需要连接到PC的各种外围设备的通用接口,无论是作为开发平台还是商用产品。在这个由两部分组成的系列文章的第一部分中,我们快速介绍了USB接口标准及其在嵌入式系统中不断发展的作用。

情人节不只有口红和包包
情人节不只有口红和包包

对男人來說,情人节要送什么给女友是最苦恼的! 每个人都有不同的表达爱的方式,除了口红和包包,你还可以加上一些有特别的东西,例如一个LED项链。

电路方案