首 页 用户登录 | ![]() |
|||
|
|||
按字母检索 | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z |
按声母检索 | A | B | C | D | E | F | G | H | J | K | L | M | N | O | P | Q | R | S | T | W | X | Y | Z | 数字 | 符号 |
|
![]() |
您的位置: 5VAR论文频道 → 论文中心 → 理工论文 → 电子通信 |
|
|||||
基于虚拟扇区的Flash存储管理技术 | |||||
收集整理:佚名 来源:本站整理 时间:2009-01-10 23:50:53 点击数:[] ![]() |
|||||
[本篇论文由上帝论文网为您收集整理,上帝论文网http://paper.5var.com将为您整理更多优秀的免费论文,谢谢您的支持] 关键词:闪存Flash 虚拟扇区VSS 存储管理 扇区分配表SAT 引言 随着嵌入式系统的迅速发展和广泛应用,大量需要一种能多次编程,容量大,读写、擦除快捷、方便、简单,外围器件少,价格低廉的非易挥发存储器件。闪存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最大可以达到16×1024;而如果SAT单元由8位组成,则VSS ID最大可以达到64,具体约定由应用情况而定。 2.2 实现原理 把每个block分为更小的虚拟逻辑块(visual small sector),称为虚拟扇区,扇区大小根据应用而定。每个block前面的一固定单元用于记录本block中扇区分配的使用情况(即扇区分配表),包括扇区属性及扇区逻辑号。图1为逻辑扇区划分示意图。 在进行数据读写和修改时,以虚拟扇区块的大小为单位。要修改某一扇区的数据时,先读出这个扇区的内容,重新找一个未使用的扇区,把修改后的内容写入这个新扇区。然后,修改原来扇区的属性值为无效,修改这个新扇区的属性为有效,拷贝VSS ID号到新扇区对应的SAT单元中。 这样,当某一个block中的SAT属性都标为无效时,才对当前block进行擦写。可见,以虚拟扇区大小为单位的存储管理,对Flash块的擦写次数可大大减少,从而提高了系统性能。 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) Tags: |
提供人:佚名 | |
【返回上一页】【打 印】【关闭窗口】 |
![]() |
5VAR论文频道 |
![]() |
5VAR论文频道 |
![]() |
关于本站 -
网站帮助 -
广告合作 -
下载声明 -
网站地图
Copyright © 2006-2033 5Var.Com. All Rights Reserved . |