当前位置:首页 > 嵌入式 > 嵌入式硬件

  摘要:本文简明阐述了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 机制,由于篇幅有限,不对其进行深入探讨。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

虽然嵌入式芯片架构市场上有明确的引领者,但该行业正在快速扩张,预计未来几年将出现许多新的机会。当然,在这样的热门行业中,永远有创新技术和新产品的一席之地。

关键字: 嵌入式 处理器 RISC-V

西班牙塞维利亚,2024年3月12日 — Teledyne Technologies旗下公司、全球成像解决方案创新者Teledyne e2v宣布扩展其Flash™ CMOS图像传感器系列,推出Flash 2K LSA,该...

关键字: 图像传感器 Flash 摄像机

2024年3月8日 – 专注于引入新品的全球电子元器件和工业自动化产品授权代理商贸泽电子 (Mouser Electronics) 即日起供货Advantech的VEGA-P110 PCIe Intel® Arc A37...

关键字: 嵌入式 GPU卡 边缘AI

康佳特采用博世力士乐的 ctrlX OS 操作系统

关键字: 计算机模块 嵌入式 机器人

先楫新一代的仪表显示产品具有高画质、低功耗等特点。

关键字: 嵌入式 GPU 图形处理器

在这篇文章中,小编将为大家带来嵌入式开发的相关报道。如果你对本文即将要讲解的内容存在一定兴趣,不妨继续往下阅读哦。

关键字: 嵌入式 嵌入式开发

以下内容中,小编将对嵌入式开发的相关内容进行着重介绍和阐述,希望本文能帮您增进对嵌入式开发的了解,和小编一起来看看吧。

关键字: 嵌入式 嵌入式开发 嵌入式系统

本文中,小编将对嵌入式开发予以介绍,如果你想对它的详细情况有所认识,或者想要增进对嵌入式的了解程度,不妨请看以下内容哦。

关键字: 嵌入式 嵌入式开发

在这篇文章中,小编将为大家带来嵌入式开发的相关报道。如果你对本文即将要讲解的内容存在一定兴趣,不妨继续往下阅读哦。

关键字: 嵌入式 嵌入式开发
关闭
关闭