0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于虚拟扇区管理技术提高Flash存储器的应用系统性能

电子设计 来源:单片机与嵌入式系统应用 作者:付助荣,王建华 2020-05-25 08:01 次阅读

引言

随着嵌入式系统的迅速发展和广泛应用,大量需要一种能多次编程,容量大,读写、擦除快捷、方便、简单,外围器件少,价格低廉的非易挥发存储器件。闪存Flash存储介质就是在这种背景需求下应运而生的。它是一种基于半导体的存储器,具有系统掉电后仍可保留内部信息,及在线擦写等功能特点,是一种替代EEPROM存储介质的新型存储器。因为它的读写速度比EEPROM更快,在相同容量的情况下成本更低,因此闪存Flash将是嵌入式系统中的一个重要组成单元。然而,由于Flash读写存储的编程特点,有必要对其进行存储过程管理,以使整个系统性能得以改善。

1、 闪存Flash的存储编程特点

Flash写:由1变为0,变为0后,不能通过写再变为1。

Flash擦除:由0变为1,不能只某位单元进行擦除。

Flash的擦除包括块擦除和芯片擦除。块擦除是把某一擦除块的内容都变为1,芯片擦除是把整个Flash的内容都变为1。通常一个Flash存储器芯片,分为若干个擦除block,在进行Flash存储时,以擦除block为单位。

当在一个block中进行存储时,一旦对某一block中的某一位写0,再要改变成1,则必须先对整个block进行擦除,然后才能修改。通常,对于容量小的block操作过程是:先把整个block读到RAM中,在RAM中修改其内容,再擦除整个block,最后写入修改后的内容。显然,这样频繁复杂的读-擦除-写操作,对于Flash的使用寿命以及系统性能是很不好的,而且系统也常常没有这么大的RAM空间资源。一种基于虚拟扇区的管理技术可以有效地控制Flash的擦写次数,提高Flash的使用寿命,从而提高系统性能。

2、 基本原理

2.1概念

VSS(Visual Small Sector),虚拟小扇区:以它为单位读写Flash内容。

VSS ID(Visual Small Sector Identity),虚拟小扇区号:只通过虚拟扇区号进行存储,不用考虑它的真实物理地址。

SI(Sector Identity),分割号:一个擦写逻辑块中物理扇区的顺序分割号。

BI(Block Identity),块号:Flash芯片中按擦除进行划分的块号。

SAT(Sector Allocate Table),扇区分配表:一个擦写逻辑块中的扇区分配表。一个SAT由许多SAT单元组成,一个SAT表对应一个Block,一个SAT单元对应一个VSS。

每个SAT单元最高两位为属性位,后面各位为VSS ID号。如果一个SAT单元由16位组成,则VSS ID最大可以达到161024;而如果SAT单元由8位组成,则VSS ID最大可以达到64,具体约定由应用情况而定。

2.2 实现原理

把每个block分为更小的虚拟逻辑块(visual small sector),称为虚拟扇区,扇区大小根据应用而定。每个block前面的一固定单元用于记录本block中扇区分配的使用情况(即扇区分配表),包括扇区属性及扇区逻辑号。图1为逻辑扇区划分示意图。

基于虚拟扇区管理技术提高Flash存储器的应用系统性能

在进行数据读写和修改时,以虚拟扇区块的大小为单位。要修改某一扇区的数据时,先读出这个扇区的内容,重新找一个未使用的扇区,把修改后的内容写入这个新扇区。然后,修改原来扇区的属性值为无效,修改这个新扇区的属性为有效,拷贝VSS ID号到新扇区对应的SAT单元中。

这样,当某一个block中的SAT属性都标为无效时,才对当前block进行擦写。可见,以虚拟扇区大小为单位的存储管理,对Flash块的擦写次数可大大减少,从而提高了系统性能。

3 、VSS管理实现要点

3.1 常数部分

#define BLOCKSIZE 128*1024 //可根据Flash型号修改

#define SECTORSIZE 512 //可根据Flash型号及应用情况修改

#define MAX_BLOCK 8 //可擦除块个数

#define MAX_SI_1B 255 //每个可擦除块中有效SI个数

#define SATSIZE 510 //扇区分配表大小

#define VSS_MASK 0XC000 //VSS属性屏蔽值

#define VSS_FREE 0XC000 //VSS为未使用的属性值

#define VSS_VALID 0X4000 //VSS为有效的属性值

#define VSS_INVALID 0X0000 //VSS为无效的属性值

3.2 数据结构部分

unsigned char VSS_Table[MAX_BLOCK][MAX_SI_1B/8];用于记录Flash中各个block的使用情况。数组中的某位为1,表示相应sector为未使用;否则,为已经写过,系统通过这个表可以跟踪各个block的使用情况。

3.3 函数功能部分

1) Flash_Format()//擦除整块Flash存储介质。

2) Flash_Init()//对VSS管理系统参数进行初始化,填充VSS_Table表,统计Flash的使用情况。在系统复位初始时调用。

3) Block_Erase(int blockID)//擦除块号为block ID的块。

4) Find_VSS(int vss)//查找VSS所在的block ID及分割号SI。

5) Get_Addr(int vss)//取得VSS所在的物理地址。

6) Scan_SAT(int blockID)//整理块号为block ID的SAT,填充VSS_Table[]。

7) Flash_Read(long addr,char *pdata,int len)//从物理地址为addr的Flash处读取len个字节到pdata。

8) Flash_Write(long addr,char *pdata,int len)//写pdata中长度为len的数据到指定地址为addr的Flash中。

9) Read_Sat(int bi)//读取块号为blockID的SAT。

10) IsValid(vat)//检查本SAT单元属性是否有效。

11) IsFree(vat)//检查本SAT单元属性是否未使用。

12) IsInvalid(vat)//检查本SAT单元属性是否无效。

13) Read_VSS(addr)//从地址为addr处读一个VSS。

14) Write_VSS(addr,*pData)//把pData中的内容写到从地址addr开始的一个VSS中。

4、 计算VSS ID的物理地址

要对某个VSS ID进行读写操作,必须先找到其物理地址。

定位某个VSS ID物理地址的过程如下。

① 查找这个VSS ID所在的块号(BI)以及在这个块中所处的分割号(SI)。

从第一个block开始,搜索这个块的SAT表。首先搜索属性,只有属性为有效的才比较VSS ID号。如果条件满足,记录所在的块号BI及SAT的位置,即扇区分割号SI;否则,block号增加,继续按照上面步骤查找。

bFound=0;

for(int i=0;iMAX_block;i++)

{//读取对应block的SAT表

psat=ReadSat(i)

for(j=0;jMAX_SI_1B;j++)

{//分析每个SAT单元

sat=*psat++;

if(IsValid(sat))//比较属性是否有效

{//比较逻辑号是否相等,相等设置标志退出

if(Equal(sat,VSSID)){bFound=1;break;}

}

}

if(bFound){bi=i;si=j;break;}//找到后记录块号和分割号退出

}

②找到VSS ID所在的块号及分割号(SI)后,这个VSS ID的物理地址为:

ADDR=整个Flash的偏地址+

BLOCKID*BLOCKSIZE+SATSIZE+SI*SECTERSIZE。

5、应用

应用于名片记录管理系统:由于名片记录很大,而且记录很多,存在常常修改的情况,因此可以使用Flash作存储介质。

名片记录结构为:

struct CARD

{

char name[10]; //姓名:10字节

char position[15]; //出职务:15字节

char companyname[40]; //公司名称:15字节

char mobilephone[11]; //手机号码:11字节

char homephone[15]; //家庭电话:15字节

char officephone[15]; //办公电话:15字节

char Email[30]; //邮件地址:30字节

char homepage[30]; //公司主页:30字节

char remark[40]; //备注:40字节

}card_record;

每个名片记录大小为:181字节。

对于1MB的Flash,分为8个block,每个block为128KB(131072字节)。

针对以上情况,作如下分配:

每个扇区大小为181字节;

SAT大小为1432字节,每个SAT单元用16位(2字节);

分为716个扇区,也相当于1个block能存716条名片记录,则131072-1432-716181=44字节为空闲。

常数定义部分修改如下:

#define blockSIZE 128*1024 //每个block大小

#define SECTORSIZE 181 //每个扇区大小

#define MAX_SI_1B 716 //每个可擦除块中有SI个数

#define SATSIZE 1432//扇区分配表大小

#define VSS_MASK 0XC000 //VSS属性屏蔽值

#define VSS_FREE 0XC000 //VSS为未使用的属性值

#define VSS_VALID 0X4000 //VSS为有效的属性值

#define VSS_INVALID 0X0000 //VSS为无效的属性值

约定:首先对名片进行编号,且约定名片的编号对应于VSSID逻辑号。

a) 记录增加。增加一个记录时,根据提供的VSSID号,首先查找这个记录号是否在使用。如果还没有使用,首先查找这个记录号是否在使用。如果还没有使用,则申请一个未使用的VSS,把相在内容写入这个VSS,修改其对应的SAT单元,写入有效属性值和VSSID号;否则,进入记录修改过程。

b) 记录删除。要删除一个记录时,根据提供的VSSID号,查找SAT表。如果找到,修改其对应的SAT属性为无效;否则,说明这个记录不存在。

c) 记录查找。①由VSSID号进行的查找:根据提供的VSSID号,查找所有的SAT表中属性为有效的VSSID,返回相应的BI及SI。②根据名片的用户名查找:检测所有的SAT表中属性为有效的VSSID,得到相应的BI及SI,由BI及SI定位到指定Flash物理地址读入用户各到RAM中,比较是否相等。如果相等,读取并返回SAT单元的VSSID;否则,继续查找。

d) 记录修改。当要修改一名片记录时,由VSSID先把这个记录读入到RAM中,然后修改其内容,重新找一个未使用的扇区,把修改后的内容写入到这个新扇区中,并拷贝其VSSID号到这个新扇区对应的SAT单元,修改其属性为高,修改原来的扇区属性为无效。

6、结语

本文提出的Flash存储管理技术原理简单实用。它是对那些复杂的Flash文件管理系统的一种剪裁、简化和定制。对于那些不需要复杂的文件管理系统,而又使用了Flash作为存储介质的嵌入式系统有很好的借鉴意义和使用价值,如手机电话号码簿管理、短信管理等都可以利用这种技术进行管理。

责任编辑:gt


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    4975

    文章

    18235

    浏览量

    287834
  • FlaSh
    +关注

    关注

    10

    文章

    1545

    浏览量

    146626
  • 存储器
    +关注

    关注

    38

    文章

    7119

    浏览量

    161913
收藏 人收藏

    评论

    相关推荐

    铁电存储器技术原理

    。RAM类型的存储器易于使用、性能好,可是它们同样会在掉电的情况下会失去所保存的数据。非易失性存储器在掉电的情况下并不会丢失所存储的数据。然而所有的主流的非易失性
    发表于 11-19 11:53

    铁电存储器技术原理

    。RAM类型的存储器易于使用、性能好,可是它们同样会在掉电的情况下会失去所保存的数据。非易失性存储器在掉电的情况下并不会丢失所存储的数据。然而所有的主流的非易失性
    发表于 11-21 10:49

    求助 数据存储器 FLASH程序存储器 FLASH数据存储器的区别

    数据存储器 FLASH程序存储器 FLASH数据存储器 片内RAM数据存储器16M字节外部数据
    发表于 11-29 09:50

    相变存储器(PCM) :新的存储器技术创建 新的存储器使用模式

    系统设计存在设计基于闪存的可靠的嵌入式和存储系统时仍然面对重大挑战。随着每代新产品的出现,目前存储器技术要求尺寸越来越小,但耑要较大系统级变
    发表于 05-17 09:45

    嵌入式系统Flash存储器接口电路调试

    、32位的Flash存储器系统。32位的存储器系统具有较高的性能,而16位的
    发表于 06-10 05:00

    Flash存储器的使用寿命有什么办法延长吗?

    的、针对嵌入式应用的文件系统,实现Flash存储器的损耗均衡,并且实现数据的有效管理,对于提高其使用寿命具有一定的意义。
    发表于 08-16 07:06

    如何提高FPGA的系统性能

    本文基于Viitex-5 LX110验证平台的设计,探索了高性能FPGA硬件系统设计的一般性方法及流程,以提高FPGA的系统性能
    发表于 04-26 06:43

    如何去设计Flash存储器

    Flash类型与技术特点有哪些?如何去选择uClinux的块驱动?如何去设计Flash存储器
    发表于 04-27 06:20

    请问怎样使用FLASH存储器去设计引导装载系统

    怎样去设计DSP自动引导装载系统的硬件?对FLASH存储器进行烧写有哪些步骤?怎样使用FLASH存储器去设计引导装载
    发表于 04-27 07:13

    基于虚拟扇区Flash 存储管理技术

    首先, 针对闪存Flash存储编程特点, 提出一种基于虚拟扇区的闪存管理技术, 使
    发表于 05-16 13:30 19次下载

    基于FLASH星载存储器的高效管理研究

    NAND FLASH开始广泛应用于星载存储器,针对FLASH的数据高效管理成为该类存储器研究的重要组成部分。本文以商用文件
    发表于 02-24 14:41 10次下载

    基于FLASH星载存储器的高效管理研究

    NAND FLASH开始广泛应用于星载存储器,针对FLASH的数据高效管理成为该类存储器研究的重要组成部分。本文以商用文件
    发表于 07-17 18:06 14次下载

    基于虚拟扇区Flash存储管理技术

    摘要:首先,针对闪存Flash存储编程特点,提出一种基于虚拟扇区的闪存管理技术,使
    发表于 03-24 13:01 617次阅读
    基于<b class='flag-5'>虚拟</b><b class='flag-5'>扇区</b>的<b class='flag-5'>Flash</b><b class='flag-5'>存储</b><b class='flag-5'>管理</b><b class='flag-5'>技术</b>

    Flash存储器概述

      Flash 存储器的简介   在众多的单片机中都集成了 Flash 存储器系统,该存储器
    发表于 11-11 18:25 4622次阅读
    <b class='flag-5'>Flash</b><b class='flag-5'>存储器</b>概述

    stm32 flash写数据怎么存储

    stm32 flash写数据怎么存储的  STM32是一款广泛应用于嵌入式系统开发的微控制器,它的Flash存储器是其中一个重要的组成部分。
    的头像 发表于 01-31 15:46 646次阅读