当前位置:首页 > 电源 > 数字电源
[导读]Nand Flash作为一种安全、快速的存储体,因其具有体积小、容量大、成本低、掉电数据不丢失等一系列优点,已逐步取代其它半导体存储元件,成为嵌入式系统中数据存储的主要载体。尽管Nand Flash的每个单元块相互独立,

Nand Flash作为一种安全、快速的存储体,因其具有体积小、容量大、成本低、掉电数据不丢失等一系列优点,已逐步取代其它半导体存储元件,成为嵌入式系统中数据存储的主要载体。尽管Nand Flash的每个单元块相互独立,且每块一般可擦除次数高达10~100万次,但是随着擦写次数增加,会有一些单元块逐渐变得不稳定或失效从而形成永久性坏块。因此,要避免频繁地对同一块进行操作,尽量达到擦写次数均衡;同时,由于擦除操作耗时较多,会对系统的实时性造成影响。为此,本文介绍了一种基于磨损均衡思想的Nand Flash存储管理方式,并深入讨论了该方式在Ti公司的DSP TMS320F28x中的程序实现。

1 器件介绍

本文中采用的Nand Flash芯片K9F6408U0C是一块拥有8M(8,388,608)×8bit存储空间及 256K(262,144)×8bit辅用存储空间的存储芯片,电源电压为1.8V-3.3V。芯片内部按块和页的方式来组织的,如图1所示,共分成1024个块,每块包含16个页,每页内有528个字节。 F28x系列DSP是美国TI公司最新推出的C2000平台上的定点DSP芯片。

图1 K9F6408UOC内部结构示意图

F28x系列芯片具有 低成本、低功耗和高效能等特点,特别适用于有大量数据处理的测控场合。

2 Flash的特点及存储管理的作用

由K9F6408U0C的基本结构可以知道,它的基本单位有块、页、字节等。 Nand Flash 芯片具有如下特点:

Flash写:通过写命令将每个字节存储单元中的1变为0;写操作不能把0变为1。

Flash擦除:擦除命令是Flash中存储单元0变为1的唯一途径,一旦对某一块中的某一位写0,要再改变成1,则必须执行擦除命令。

通常,对于容量较小的Flash块的操作过程是:先把整个块的数据读到RAM中,在RAM中修改数据内容,再擦除整个块,最后写入修改后的数据。显然,这样频繁复杂的读-擦除- 写操作,对于Flash的使用寿命以及系统性能是很不利的,而且微处理器中通常RAM大小有限。因此在硬件条件苛刻的嵌入式系统中就迫切需要一种合理的存储管理方式以便有效地均衡 Flash各个存储块的擦写次数,提高Flash的使用寿命,从而提高数据存储的安全性。

3 存储管理系统的设计

3.1建立坏块管理表

Nand Flash由于生产工艺的问题,不可避免的会存在一些坏块,这些坏块在芯片出厂前 都已被标识好。根据Nand Flash数据手册中的介绍,在每一块的第一页与第二页的Spare area 的第六个字节(也就是该页的第517字节)即是出厂时的坏块标识位,如果某块的该两页的第517字节内容不同时为0xFF,则代表该块为厂家标识坏块。这种坏块的检测必须在对芯片进行擦除前进行,因为厂家坏块有可能也能够被进行擦除操作,如使用这种块将对数据安全留下一定的隐患。

Nand Flash在出厂前会保证每块芯片的第一块与第二块是完好的,所以在本文的设计中,采用的方式是将坏块管理表存放在第一块的第一页的前128个字节中,每个字节的一位代表芯片的一块,如该位为1刚表明该块是好的,为0则表示对应块为坏块。坏块管理表的建立是必需的,而且最好是在芯片进行其它擦写操作前进行。

3.2 Flash存储空间管理

在本文设计的Flash空间管理中,Flash的存储块被分为空闲块(Free,即空白没写数据的好块),有效块(Valid,即存有有效数据的块,不能被擦除),无效块(Invalid,即数据已无效或是写入错误块,可被擦除),保留块(Reserve,用于替换新产生的坏块),其它的则为坏块,所有存储块的管理均采用单向链表方式进行管理。

在大部分的Flash存储空间管理系统中可能并不存在保留块,在本系统中增加保留块的作用主要是,当部分存储块因为反复擦写成为新的坏块时,可以用保留块取而代之成为新的空闲块,从而使得留给用户的可用存储块总数在一定时期内是一定的,这样做的优点是可以增强数据的安全性,延长整个Flash的使用周期,缺点是用户可用的存储空间相对减少,不过在Flash芯片技术迅速发展的今天,大容量的Flash芯片价格已经十分低廉,数据安全才是嵌入式系统设计最值得重视的。

在本文的设计中,统一规定Flash每一块的第一页的Spare Area为数据块状态信息标记区,具体规定如表2所示:

根据上表的设计,块擦除次数最大为224 ? 1 = 16777215 ,远大于Flash的最大擦除次数10到100万次;块状态标记字节,0xFF代表其为空闲块,0xFD代表其为保留块,0xFC代表其为有效块,0xF0代表其为无效块,0x00则表明当前块为坏块,在坏块管理表中其对应位为0。

3.3磨损均衡与无效块回收

如图2所示,当系统上电后,如不存在坏块管理表则应首先应建立相应的坏块管理表,参照坏块表根据每一块的第517字节建立各个链表Free_List,Valid_List,Invalid_List, Reserved_List,初始化并按擦除次数非递减序排列各链表。当无效块因擦除成为新的空闲块时,根据块擦除次数插入到空闲链表中相应位置,当需要写入数据到新的空闲块时则取用空闲链表的链首所指空闲块,写入数据有效后则标识该块为有效块,否则标识为无效块,通过这样的管理方式保证每次都是使用空闲链表中擦除次数最小的块,从而使磨损达到均衡。[!--empirenews.page--]

图2 Flash存储管理流程示意图

对于静态数据块(指的是Flash中存储的不经常被修改的数据)[3],在本文中采用的处理方法是当空闲块中的最大擦除次数与有效块中的最小擦除次数之差大于某一设定阀值(该阀值不能过小,否则数据搬迁将过于频繁),则迁移该有效块中数据至空闲链表中擦除次数最大的块中,从而避免因某些数据块被静态数据长时间占用而使得其它数据块的磨损加剧,进而可使得整个Flash的磨损趋于平衡。

对于无效块的擦除回收本文的设计是在有足够空闲块的情况下一般是在系统空闲或上电时进行,这样能节约更多宝贵的系统资源以进行更重要的工作,当在系统运行过程中,如果空闲块块数与无效块块数的比值超出一个阀值(本系统取50),则启动程序回收所有无效块。这个阀值应取得适中,如太大则使得回收过于频繁,太少的话一方面使空闲空间过少,另一方面一旦启动回收程序,因要回收块数过多,从而使采集数据的实时输入受到影响,本系统中取空闲块与无效块的比值作为阀值,好处是只要空闲块块数足够,无效块回收基本在系统初始化是进行,即使在采集过程中回收占用的时间也是十分微小,这样的设计对实时性要求极高的嵌入式系统是很有好处的。

3.4 Flash存储管理的程序实现

对于Nand Flash在DSP嵌入式系统中的使用,其接口方式与读写方法与在其他单片机中的方法都是一样的,参考[1]中提供的流程图就可以完成,其难点在于如何管理,在其管理中,对链表数据结构的操作是最重要的,下面将给出本文系统中用DSP TMS320F28x如何实现Nand Flash存储管理的链表操作的关键程序代码,结合具体的要求只需要进行简单的修改即可满足在新系统中的应用。

在DSP系统工程中的CMD文件中,对于段的定义一定要为.systemmem分配一定的可用RAM空间[ 4 ],这个大小跟系统后面malloc函数要分配的动态内存空间有关,以便在产生一个新的结点时申请一个结点类型大小的空间,在结点销毁时可对空间进行释放,定义系统中链表结点的类型为:

通过这样的定义就可以得到四个带头结点的链表,头结点的数库域中是没有信息的,每一个链表的头结点都指向该链表的首元素,如不存在则指向NULL,程序中必须初始化指针,否则会造成致命的系统错误。下面给出链表的初始化程序,结点生成及销毁程序,其他的函数就不一一列举,只给出其相应函数名及功能介绍。

4 结论

本文创新点在于:从Nand Flash的特性出发,深入讨论了基于磨损均衡算法的Flash存储管理在DSP系统中采用链表结构的程序实现,改进了无效块的回收方式及动静态数据块的磨损平衡。经实践证明,有效延长了Flash的使用寿命,进一步提高了其存储效率和数据安全性,从而更有利于在嵌入式系统中的应用。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭