您的位置 首页 被动

怎么根据FLASH介质嵌入式存储计划的规划与完成?

引言FLASH(闪速存储器)作为一种安全、快速的存储体,具有体积小、容量大、成本低、掉电数据不丢失等一系列优点,已成为嵌入式系统中数据和程序最主要的

导言

FLASH(闪速存储器)作为一种安全、快速的存储体,具有体积小、容量大、成本低、掉电数据不丢掉等一系列长处,已成为嵌入式体系中数据和程序最主要的载体。因为FLASH在结构和操作办法上与硬盘、E2ROM等其他存储介质有较大差异,运用FLASH时有必要依据其本身特性,对存储体系进行特别规划,以确保体系的功能到达最优。

FLASH的特色

FLASH是一种非易失性存储器NVM(Non-VolatileMemory),依据结构的不同能够将其分红NORFLASH和NANDFLASH两种。但不论哪一种都具有如下特色:

(1)区块结构

FLASH在物理结构上分红若干个区块,区块之间彼此独立。比方NORFLASH把整个Memory分红若干个Sector,而NANDFLASH把整个Memory分红若干个Block;

(2)先擦后写

因为FLASH的写操作只能将数据位从1写成0,不能从0写成1,所以在对存储器进行写入之前有必要先履行擦操作,将预写入的数据位初始化为1。擦操作的最小单位是一个区块,而不是单个字节。

(3)操作指令

除了NORFLASH的读,FLASH的其它操作不能像RAM那样,直接对方针地址进行总线操作。比方履行一次写操作,它有必要输入一串特别的指令(NORFLASH),或许完结一段时序(NAND FLASH)才能将数据写入到FLASH中。

(4)位回转

因为FLASH固有的电器特性,在读写数据过程中,偶尔会发生一位或几位数据过错。这便是位回转。位回转无法防止,只能经过其他手法对成果进行过后处理。

(5)坏块

FLASH在运用过程中,或许导致某些区块的损坏。区块一旦损坏,将无法进行修正。假如对已损坏的区块进行操作,或许会带来不行猜测的过错。尤其是NAND FLASH在出厂时就或许存在这样的坏块(现已被标识出)。

要害规划

FLASH通用规划

关于一个嵌入式体系,设备的兼容性越好,体系可行性就越好,产品也就越有竞争力。所以,为了兼容不同类型的FLASH设备,对FLASH进行通用规划至关重要。

关于NORFLASH,数据的读操作能够经过独立的数据总线和地址总线快速完结,可是NOR FLASH的其他操作需求经过特别的指令来完结,更糟糕的是不同厂商出产的芯片这些指令互不相同。这就导致了设备的不兼容。

关于NAND FLASH,也存在这样的问题。NAND FLASH能够依据相同的指令读取芯片的厂商号和设备号,然后经过辨认设备号调用对应的时序流程完成操作。可是,体系中太多的判别,会使得程序的结构变得非常杂乱。所以,在必定的条件下,NAND FLASH设备仍是不兼容的。

为了处理这一问题,一个较好的办法是将FLASH的各个操作指令以及结构特性依照一致的格局寄存到FLASH中固定方位。体系初始化时,将这个结构读入体系,经过剖析这个结构,能够获得关于芯片一切相关信息,包含操作指令,区块散布等等。这样,体系能够轻松完成对不同类型FLASH的一切操作,极大地提高了设备的扩展性。

双形式文件体系规划

嵌入式体系中文件数据的寄存一般有两种结构,一种是索引格局的线性结构,一种对错线性的链表式结构。这两种结构各有优缺点。比方关于体系配置、点阵字库等一些具有固定结构的体系数据,索引结构比链表式结构更有功率。但关于常常更新的用户数据,链表式结构要比索引结构更灵敏。假如体系能将两种结构集成,必然能将功能发挥到最优。

完成这种集成的办法是将设备界说成若干个分区,每个分区彼此独立,不同分区能够运用不同的文件形式。这样,不同类型的数据就能够依据自己的特点挑选寄存的分区。比方体系数据寄存在运用索引线性结构的分区,用户数据寄存在运用链式非线性结构的分区。


坏块处理

FLASH中的坏块处理是一件很扎手的问题,假如没有有用的办理,对体系的稳定性会形成严重影响。一个可行的处理办法是生成一张坏块表,坏块表中记载一切坏块的块号,而且按块号从小到大排序,坏块表在读写过程中动态更新。当读写数据时,遍历坏块表中的块号,将文件的逻辑地址转换成对应FLASH物理地址,以确保所用的FLASH地址空间不存在坏块。

结构界说

体系的存储结构如图1所示,在FLASH的Block0方位寄存整个体系最重要的数据——体系记载SR(System Record)。挑选Block0的原因是一般FLASH出厂时,都能确保Block0是无缺的,因而能够防止坏块问题带来的不方便。SR其实便是一个界说好的数据结构,它包含媒质信息和文件体系信息两部分。媒质信息包含FLASH存储器的类型、容量、块类型的巨细和数量(Block Info)、FLASH操作指令(CommandInfo)等。文件体系信息包含版别信息、各逻辑分区的开端地址(物理地址)和完毕地址。FLASH设备能够被分红一个或多个逻辑分区,每个逻辑分区选用的操作办法能够互不相同,如图1中Device0分区选用的是线性文件体系,Device1分区选用的是链式文件体系。假如选用的是线性文件体系,在分区信息后边参加文件索引表INDEX开端地址、巨细等信息;假如选用的是链式文件体系,则参加文件体系页巨细、文件分配表FAT和文件登记表FRT地点的方位等信息。

文件登记表FRT坐落FAT后的页中,寄存着逻辑分区中文件的信息,如文件总数、每个文件的文件代号、方位、长度以及校验形式。其间,校验形式用来标识文件读写时选用过失校验的等级。不同类型的文件选用不同等级的校验办法。0级不进行校验,1级ECC校验,2级逐一字节比较。

关于线性文件体系分区,一切文件次序存储,读取数据时,直接经过INDEX索引得到某个文件的逻辑开端地址,然后从这个地址开端次序搜索,获取某个偏移方位下的n个接连Byte。链式文件体系是将地址空间分红若干个等分,即Sector,它是操作的最小单位;一个大文件能够散布在不接连的多个Sector中,然后经过FAT表将它们连接起来;在FLASH介质上完成链式文件体系,Sector巨细的挑选是一个要害,因为FLASH的写操作,擦操作是以Page,Block为单位的,设小了使大块结构的FLASH写操作杂乱,设多了又糟蹋空间,因而最好的挑选是将Sector巨细设为擦操作的最小单位16K。

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

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

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

微信扫一扫关注我们

返回顶部