您的位置 首页 5G

嵌入式体系中各种形式闪存的选用

嵌入式系统中各种形式闪存的选用-Linux系统自诞生以来,不断发展壮大,支持越来越多的硬件体系,获得了日益广泛的应用,从服务器、桌面计算,到机顶盒、手机、路由器等,可以说无处不在。虽然都是Linux系统,但是嵌入式环境和通用计算环境中的软件/硬件配置大不相同。

0 导言

Linux体系自诞生以来,不断发展壮大,支撑越来越多的硬件体系,获得了日益广泛的运用,从服务器、桌面核算,到机顶盒、手机、路由器等,能够说无处不在。尽管都是Linux体系,可是嵌入式环境和通用核算环境中的软件/硬件装备大不相同。这是因为嵌入式体系大多都是为某一专门运用而特别规划的,有或许需求耐受各种恶劣环境(比方意外断电、极点温度、强冲击/振荡/辐射等),还遭到体积、功耗、本钱等许多要素的约束,功用针对性强,需求酌情增加一些专用的硬件(如各种传感器和专用接口),而许多通用核算机上常用的外设在嵌入式体系中不那么常见,典型的比方是硬盘、CD/DVD-ROM等大容量的非易失存储设备,在嵌入式体系中,它们一般被各种方法的闪存所替代。闪存的存储特性与硬盘等存储设备的巨大差异,导致它有必要运用专用存储操控器、驱动程序及文件体系。对不同类型闪存及相应文件体系的选用,会影响终究构成体系的功用和安稳性,有必要归纳各种体系构件的特色及方针体系的需求做出稳重的挑选。

1 闪存类型及特性

嵌入式体系中常用的闪存有两类:NORFLASH和NANDFLASH。它们因内部结构与“或非”及“与非”门相似而得名。它们不只在内部结构上不同,外部特性和运用也不一样。NORFLASH的容量一般不大,常见的只需几MB,能够重复擦写10万次到100万次。NORFLASH遵从CFI规范,能够经过CFI指令查询其制作商、器材类型、容量、内部扇区布局等参数,完结软件主动装备。NORFLASH的优势还在于它在出厂时能确保每个数据位都是有用的,不需求做坏块处理。NORFLASH的线性寻址特性使之能够作为发动存储器运用。与NORFLASH比较,NANDFLASH的容量能够做得很大,常见的有几十MB到几GB,能够重复擦写10万次。NANDFLASH芯片上没有地址与数据线之分,只需复用的I/O线和指令存(CLE)、地址锁存(ALE)、读/写使能(RE,WE)和片选(CE)等操控线,有必要经过特定的逻辑来操作。NANDFLASH不支撑线性寻址,一般不能用作发动ROM。但这也不是肯定的。有些微操控器(如AT91SAM926x)供给出厂前固化在芯片内部的BOOT-ROM,并在BOOT-ROM中供给对NANDFLASH发动的支撑。不过这样一来,首要发动的是BOOT-ROM中的程序,会产生发动逻辑和延时方面的种种问题,设计时需求全面考虑。别的,出产厂商不确保NAND-FLASH中每一个数据位都是有用的,除芯片中的榜首块之外,答应有“初始坏块”,并约定在坏块的榜首页或第二页带外区(OOB)的特定方位符号坏块。NANDFLASH还答应在运用进程中呈现新的坏块,以及非坏块在读出进程中犯错。依据这些特色,运用这种闪存时要做额定的坏块办理和校验/纠错作业。在写入密集型体系中,有必要供给ECC及坏块换出算法,才干到达10万次的写入方针。

除了以上说到的两种闪存之外,还有一种由NORFLASH衍生的串行闪存,一般是SPI接口。这种闪存承继了NORFLASH没有坏块的长处,但不支撑CFI规范,而且由所以串行接口,线性寻址没有意义,为了便利操作,有些产品中加入了相似NANDFLASH的块/页结构及依据片内SRAM的页缓存,其优势在于硬件接口简略,供给小尺度的封装,能够明显减小PCB面积和布线杂乱程度。

别的,依据NANDFLASH技能的串行闪存现已量产,运用的也是SPI接口,容量能够做到1Gb。

2 运用规划

方针运用体系是一台专用的野外显现设备,要求其具有低功耗、抗振、宽温操作及高牢靠性等特色。为此,挑选了AT91SAM9261/AT91-SAM9G10,它是以ARM9为中心的集成片上液晶操控器的工业级微操控器,以DATA FLASH/NORFLASH和NANDFLASH存储固件代码和数据。在规划进程中,依据不同的闪存运用需求,采纳了具有针对性的计划。

2.1 发动规划

在该体系中,结合微操控器供给的功用和各种闪存的特色,能够归纳运用不同类型的闪存,挑选不同的发动办法。AT91SAM9261内部集成了发动ROM,其间固化了支撑发动和操作闪存的程序。流程图如图1所示。当AT91SAM9261的发动方法挑选(BMS)引脚在复位期间为高电平时,会运转内部固化的发动程序;不然运转外部NORFLASH中的程序。从流程图中能够看出,发动程序支撑从串行闪存中发动。这是经过发动程序将串行闪存中的代码加载到内部SRAM中完结的。因为内部SRAM容量有限(依芯片类型不同,有16 KB和160 KB两种),像U-BOOt(编译后有170KB左右,与装备有关)这样的功用,若较全面地发动加载程序(Bootloader)是不能直接从串行闪存中发动的,而只能挑选两级发动程序,先从串行闪存中加载一段尽或许小的一级发动程序(一般只需4~5 KB).用于初始化要害的硬件(如SDRAM操控器。因为时序、数据线宽等参数是可变的,不或许在AT91SAM9261内部固化的发动程序中供给通用的SDRAM操控器初始化代码),然后再由一级发动程序把功用较全面的二级发动程序载入到容量足够大的SDRAM中运转,以发动体系。从NORFLASH发动时会越过AT91SAM9261内部固化的发动程序,体系复位后履行的榜首条指行便是NORFLASH中的。此刻,发动程序能够只需1级,当然,为了使软件和串行闪存发动办法有较好的兼容性,也依然能够选用两级发动程序,这样只需简略修正榜首级发动程序即可适用于两种不同的硬件发动装备,为硬件规划留下更多的挑选空间。因为AT91SAM9261自身的原因,从NORFLASH发动是完结宽温作业的专一挑选(AT91SAM9G10无此问题)。图2显现了不同的发动装备。

嵌入式体系中各种方法闪存的选用

嵌入式体系中各种方法闪存的选用

在这个AT91SAM9261体系中,别离选用了2 MB的DATAFLASH或2 MB的NORFLASH作为发动存储器,由BMS引脚挑选详细运用何种发动办法。闪存中的地址区分如图3所示,其间的bootstrap是榜首级发动程序;U-Boot是第二级发动程序。

嵌入式体系中各种方法闪存的选用

2.2 体系内核及运用程序文件体系映像

体系内核映像和各MTD分区的文件体系映像巨细在几MB到几十MB不等,需求存储在容量较大的NANDFLASH中。关于体系内核,因为做了恰当的削减,其长度不大,和初始根文件体系加在一起不过几MB,假如不在乎稍长的发动时刻,还能够对它运用gzip紧缩,大幅度减小其尺度。在运用U-Boot作为发动程序的体系中,因为U-Boot具有直接读取NANDFLASH块/页的才能,不需求运用文件体系,将内核映像直接写到闪存块里。

运用程序及其所需的库文件、资源文件等,作为独立的文件体系映像挂载,在此挑选了带有紧缩及去除重复文件功用的只读文件体系,即SqLrashFS(SquashFs文件体系现已被广泛用于各种Linux Live CD方法的发行版中,被充分证明是牢靠的,而且从Linux 2.6.29版开端,它已加入到体系中心源码)。在嵌入式体系中,运用只读文件体系有许多长处,比方挂载时刻短,不受掉电影响,不用在体系运转进程中处理坏块及平衡损耗等。在运用进程中因为不触及写入,其牢靠性优于可写的文件体系。

在此方针体系中,内核和初始根文件体系的U-Boot映像约为2.8 MB,运用程序、GUI子体系,以及运用程序运转进程中所需的图形和字体文件的SquashFS映像约为12 MB。体系中运用的NANDFLASH是一片总容量为64 MB的8位数据线宽的芯片,块容量是16 KB+512 B,页容量是512 B+16 B,其归于块尺度较小的那种,与大块NANDFLASH比较,操作指令稍有差异,在驱动程序中需求差异对待。该体系中的MTD分区结构如表1所示。

嵌入式体系中各种方法闪存的选用

2.3 运用程序对闪存的运用

大多数情况下,仅供给对闪存的只读操作是不行的。比方,U-Boot至少在更新其自身以及保存环境变量时需求写闪存;操作体系在记载日志时要写闪存;运用程序在保存用户装备及作业数据时也要写闪存。关于发动加载程序来说,问题不是很严重。因为体系处于更新及装备情况时,大多是脱离正常作业情况的,且由专人操作,操作半途产生反常情况(如掉电)的或许性不大,即便产生了,也会被及时发现和处理。关于体系日志,在嵌入式体系中能够将其封闭,以削减对闪存的写操作。运用程序对闪存的写操作是不行防止的,而且处于设备主动作业期间,需求应对各种偶尔产生的反常情况,特别是意外掉电。

在Linux体系中,经过文件体系拜访闪存是水到渠成的做法。现在支撑NANDFLAsH的常用文件体系有YAFFS/YAFFS2,JFFS2和UBIFS等。它们都是记帐式的文件体系,各有特色,也有缺乏。

YAFFS/YAFFS2是专为NANDFLASH写的文件体系。在YAFFS的代码里包含办理闪存带外区(OOB)的部分,而这部分代码一般以为归于设备驱动的领域,其他文件体系里是不含这部分代码的。YAFFS是一种稳键的记帐结构的文件体系。高功率是它寻求的另一个方针。它能够用在各种操作体系中(已用于Linux,WinCE,pSOS,eCos,ThreadX及各种专用操作体系中),乃至能够在没有操作体系的环境下作业。YAFFS2支撑“检查点(checkpoints)”,以防止挂载进程中耗时的扫描操作,完结快速挂载。

相关于JFFS,JFFS2有了一些改善,能够支撑硬衔接(hard Links),废物收回更有用,平衡损耗更均匀。但它在挂载时仍需求扫描寻觅最新版别的闪存块,并树立RAM中的数据结构,文件体系越大,挂载时刻越长,RAM开支也越大。尽管JFFS2现现已过小结节点技能削减了挂载时刻,但成果仍不抱负,挂载时刻是s级的。

UBIFS是JFFS2的后继(本来称作JFFS3),第1个安稳版别于2008年10月加入到Linux 2.6.27版中心中,它有一个竞争者叫LogFS。UBIFS与JFFS2的最大不同在于它的文件索引信息是写在闪存中的,而JFFS2是暂存在RAM中的。因而,UBIFS在挂载时不需求扫描悉数闪存空间,挂载耗时很短(ms级);UBIFS对RAM的耗费不会跟着文件体系的尺度变大而线性增加,适用于大容量的文件体系。

除这这些不同之外,各种闪存文件体系也存在一些共性。因为闪存的写入次数有限,为了防止部分因频频写入而过早失效,有必要使写入操作尽量均匀分布到一切方位上,即平衡损耗(wear leveling)。这导致了更新文件时有必要做异位更新,而不能像在磁盘或RAM中那样简略地原位更新,然后引起一系列杂乱的问题。首要,异位更新会导致闪存块中呈现越来越多的过期页面,它们与有用页面稠浊在一起,构成所谓的脏块(dirty blocks)。当一切的闪存块都成为脏块后,就没有闪存块可供擦除再分配了。因而,依据闪存的文件体系都有废物收回器,用于将涣散的过期页面会集在一起,构成空闪存块(free blocks)。由此引起的另一个问题是文件体系在运用时不能用到挨近填满,不然也会导致相似的问题。其次,树状结构的文件索引中存在很多的相互引证,某个节点的改动会引起该节点自身及直接和直接引证它的一系列节点的异位更新。

从以上的剖析能够看出,NANDFLASH上的文件体系是一把双刃剑。它的确能够供给明晰的软件层次和运用上的便利,但一起也会下降操作功率,并具有潜在的牢靠性问题。要害是怎么合理运用,取长补短。其实,关于写入量小(一个擦除块之内),而且不频频的数据,能够越过文件体系,经过ioctrl()函数直接操作闪存。这样做的缺点是破坏了软件层次,要求运用软件开发人员了解一部分硬件的细节,在运用程序中完结一些本应归于驱动程序的底层功用(如块擦除,发现和符号坏块等);长处是能够抛开杂乱的文件体系,不需求挂载及卸载,更不存在文件体系的完好性问题,平衡损耗等办法能够视需求取舍,尤其在意外掉电时,该办法可将一切的读/写过错都约束在相对较小的部分,具有较好的应对掉电的才能。

2.4 闪存烧写支撑

体系中的各种闪存能够用不同的办法写入数据,各种办法都有优缺点。可供挑选的办法主要有两种:在芯片焊接前用通用的编程器烧写;在芯片焊接后进行在体系烧写(ISP)。运用通用的编程器能够快速很多地烧写芯片,合适大批量出产,但芯片一旦焊到印制板上,这种办法就不能用了。在体系编程(ISP)合适烧写现已焊在印制板上的芯片,一般1次只能写1块板子,可是不需求专用的设备,只需有1台核算机和相应的衔接电缆(如USB电缆)及配套软件就能够作业,十分合适小批量出产和软件晋级。别的,经过ISP软件供给的硬件寄存器读/写和方针存储器读/写功用,还能够完结必定程度上的电路板测验和调试功用。

详细到AT91系列芯片能够凭借芯片内固化的SAM-BA BOOT(见图1)供给的支撑,经过USB或调试串口烧写体系中的闪存,尤其是经过USB烧写十分便利快捷,烧写Linux中心映像到NANDFLASH只需求几秒。关于AT91SAM9261,运用这种编程办法需求满意几个条件:

(1)AT91SAM9261的BMS引脚在复位期间坚持高电平;

(2)SPl0的CS0对应的芯片不存在,或许对应的芯片中不存在有用的发动代码;

(3)PC机与方针板之间经过串口或USB口衔接;

(4)PC机上装置SAM-BA工具软件。

PC机上的SAM-BA工具软件能够支撑对方针体系多种存储器的读/写,默许情况下能够支撑DATAFLASH,NANDFLASH、内部SRAM和外部SDRA-M。尤其是对DATAFLASH的支撑十分不错,能够主动识别各种不同容量的芯片,写入速度也比较快。可是它对NANDFLASH的支撑并不抱负,关于某些NANDFLASH芯片,操作会失利。关于NORFLASH,则底子不供给现成的支撑。不过它供给了依据COM技能的动态库,而且公开了编程接口,能够运用C/C++程序或TCL脚本操控烧写进程,关于不供给官方支撑的芯片,能够自行编写代码扩展的SAMBA的功用。以扩展NORFLASH编程功用为例,需求自行编写的有以下部分:

(1)下载到方针板上运转的ARM代码。这部分程序在SAM-BA v2.4中称为monitor,在SAM-BA v2.8中称为applet,其实便是供芯片内固化的SAMBA B00T调用的功用扩展部分;

(2)PC机上的TCL脚本或C/C++程序。用于初始化硬件(如SDRAM操控器),向方针板下载monitor/applet,以及传送方针程序代码和操控烧写进程。

假如运用TCL脚本,在相关脚本更改完结后,运转SAMBA工具软件,会呈现新增加的NORFLASH标签页,如图4所示。在扩展的各部分功用根底之上,还能够编写一个归纳性的主动化脚本,将一切的程序代码及数据(如Bootstrap,U-Boot,U-Boot的环境变量、内核映像、各分区的文件体系映像等)一次性写入方针板上不同芯片内的各个指定地址,以简化编程操作,进步出产功率。

嵌入式体系中各种方法闪存的选用

3 结语

闪存是现在嵌入式体系中广泛运用的非易失存储介质,具有能够重复写入和存储容量大等长处,可是也存在写入次数有限,操作稍显杂乱和速度慢等缺点。若运用不当,会引起功用和牢靠性方面的问题。经过深入剖析现有闪存相关的硬件、软件特色,在体系中按需求采纳具有针对性的运用办法,规划的体系在闪存运用方面获得了较好的作用:体系发动时刻较短,作业安稳,顺畅经过了高温老化试验及长达数月的现场运用检测。别的,选用主动化脚本与监控程序结合的闪存烧写规划,不只简化了出产进程,还供给了必定程度上硬件调试的支撑。

       责任编辑:zl

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/yingyong/5g/98001.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部