首页 > 嵌入式硬件 > 驱动开发

  摘要:本文简明阐述了NAND 驱动在嵌入式ARM平台的实现。分析了NAND 的数据存储结构,并从物理层,逻辑层和文件系统驱动接口层三个方面具体分析了NAND 驱动程序的实现。本文重点讨论了在驱动逻辑层中为了实现磨损均衡如何创建坏块处理表,并对基于uC/FS文件系统的驱动接口进行了分析。该嵌入式NAND FLASH驱动具有存取数据快,数据准确度高等特点。

  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所示。

图1 128M X NAND 的存储空间结构

  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 说明了一次写操作的具体流程。

图 2 NAND 块写数据的示意图

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

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

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

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

图 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 机制,由于篇幅有限,不对其进行深入探讨。

换一批

延伸阅读

[行业资讯] 感知一切,这是传感器的时代

感知一切,这是传感器的时代

人类步入21世纪,全面进入信息时代,从一定意义上讲,也就进入了传感器时代。在现代控制系统中,传感器处于连接被测对象和测试系统的接口位置,可直接或间接接触被测对象,是信息输入的“窗口”,是万物互联的眼睛。......

关键字:传感器 嵌入式 产品创新

[行业资讯] 多重因素影响下,传感器市场逐渐降温

多重因素影响下,传感器市场逐渐降温

由于全球经济疲软,IC Insights报告指出,2020年传感器和执行器全球销售额增长恐将放缓至3%。而在2021年至2023年间会逐渐恢复增长势头,2023年预计将达到211亿美元。......

关键字:传感器 嵌入式 执行器

[行业资讯] 闪存继续下跌, NAND厂商损失惨重

闪存继续下跌, NAND厂商损失惨重

NAND闪存价格已经连跌了6个季度,这让上游NAND厂商三星、东芝、美光等损失惨重,纷纷削减NAND产能。在群联台北电脑展上,群联公司董事长潘建成也预测NAND闪存价格已经跌破了成本,未来跌幅会收窄,需求则会升温。......

关键字:闪存 NAND 内存

[行业资讯] NAND Flash 和 DRAM 的价格将持续下滑将延续到第二季度

NAND Flash 和 DRAM 的价格将持续下滑将延续到第二季度

集邦科技记忆体储存研究(DRAMeXchange)表示,今年第一季除了受到传统淡季因素影响外,智能手机及伺服器OEM厂从去年第四季便因需求疲弱而开始调节库存,进一步使得各项产品的位元出货量表现均呈现衰退,导致整体NAND Flash的合约价......

关键字:储存器 NAND Flash DRAM

[行业资讯] RT-Thread启动嵌入式软件人才计划及开发者能力认证

RT-Thread启动嵌入式软件人才计划及开发者能力认证

睿赛德科技宣布全面启动嵌入式软件人才计划,并推出业内首个IoT OS工程师能力认证——RAC(RT-Thread开发者能力认证,RT-Thread Ability Certification),旨在推动嵌入式及物联网人才的培养和发展,为企业......

关键字:睿赛德科 嵌入式软件 物联网
条评论

我 要 评 论

网友评论

大家都爱看