当前位置:主页 > 行业知识 >

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

发布时间:19-11-02 阅读:454

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



上一篇:怎么知道尿酸是否降下来了?尿酸高该如何降尿
下一篇:中大医院介入团队另辟蹊径 麻痹交感神经可降低