当前位置:首页 > 嵌入式 > 嵌入式教程
[导读]延长Flash存储嚣使用寿命的研究

引 言
    随着嵌入式系统在数码相机、数字摄像机、移动电话、MP3音乐播放器等移动设备中越来越广泛的应用,Flash存储器已经逐步取代其他半导体存储元件,成为嵌入式系统中主要数据和程序载体。Flash存储器又称闪存,是一种可在线多次擦除的非易失性存储器NVM(Non-Volatile Memo-ry),即掉电后数据不会丢失。Flash存储器还具有体积小、功耗低、抗振性强等优点,是嵌入式系统的首选存储设备。
    世面上常用的Flash存储设备有两种:NOR Flash和NAND Flash。根据存储容量,NOR一般为1~16 MB,而NAND为8~512 MB,现在的大容量NAND已经可以达到4 GB;读取速度NOR较NAND快,写入速度NOR比NAND慢一些;擦除速度NOR需要2~5 s,而NAND仅仅需要2~5 ms;NAND的价格比NOR低很多。由于种种原因,较常用的是NAND Flash。但是由于NANDFlash的工艺不能保证NAND的存储阵列(memory ar-ray)在其生命周期中保持性能的可靠,因此,在NAND的生产中及使用过程中会产生坏块。其表现是:当编程/擦除这个块时,不能将某些位拉高,这会造成页编程(page program)和块擦除(block erase)操作时的错误;相应地,反映到状态寄存器(status register)的相应位。
    总体上,坏块可以分为两大类:第一类为固有坏块,这是生产过程中产生的坏块,一般芯片原厂都会在出厂时将坏块第一个页的扩展区域(Spare Area)的第6个字节标记为不等于0xff的值;第二类为使用坏块,这是在NANDFlash使用过程中,如果块擦除或者页编程错误,就可以简单地将这个块作为坏块来处理,这个时候需要把坏块标记起来。为了和固有坏块信息保持一致,将新发现坏块的第一个页的扩展区域的第6个字节标记为非0xff的值。由于Flash写入数据的时候是先擦除块,这样这个块里面的数据将全部变成0xff,写入1时,该位不变;写入0时,该位由1变为0。如果将扩展区域的第6个字节标记为非0xff之后,将不可能再恢复为0xff,除非格式化有可能恢复。
    我们已经了解到,坏了的块是无法擦除和写人数据的,而在嵌入式系统中,启动的第一步就是将Flash里面的前4KB数据自动复制到SRAM里面去运行。如果仅仅Flash的第一块坏了,而导致引导程序无法下载进去,那么这个块不是不能读取数据,而是读不出我们想再要放入的数据,这样这个Flash设备就报废了。本文就这个问题作了深入的讨论,用一种基于Flash的地址重映射的方法解决这个问题。本文采用三星(Samscrag)公司的S3C2440 ARM处理器和NAND Flash存储设备K9F1208UOM讨论地址重映射的思想。


1 S3C2440使用NAND Flash引导系统的方法
    自动启动模式顺序:
    ①复位完成;
    ②当设置为自动启动模式,NAND Flash的开始4 KB被拷贝到Steppingstone的4 KB内部缓冲器;
    ③Steppingstone映射到nGCS0;
    ④CPU开始在Steppingstone执行启动代码程序。
    由系统引导顺序看出,如果Flash的第一块坏了,那么读出的数据不一定是引导程序,这样,系统将无法启动。而在这种情况下,就只能换一块完好的Flash了,这样就造成了很大的浪费。


2 Flash存储器的内部结构
    K9F1208UOM型Flash芯片内部存储器结构如图1所示。

    典型的NAND Flash由4 096块组成,每一个块包含32页,而每页是512+16=528字节。对于一个页,0~511字节为主存储区,即通常所说的用户可设定地址区,用来存储数据;512~527共16字节为扩展存储区,用来存储页的信息。扩展区的16字节用于描述主存储区的512字节。而对于坏块,也仅仅是将这16字节的第6字节设置为不等于0xff,来标示坏块。
    在NANDFlash使用过程中可能会出现这样的问题:产生坏块或坏页、由此引发的数据丢失、对一些扇区或块的过分磨损导致NANDFlash寿命缩短等。为了能更好地使用NAND Flash,在其损坏时使损失最小化,需要一种方法,使用相同的地址可以屏蔽掉坏了的块,而指针指向好块。即使第一块坏了,还可以使用O地址去操作一个好块。

[!--empirenews.page--]
3 Flash存储器的读取方法
    K9F11208UOM型Flash芯片内部与外部引脚关系如图2所示。对于每一个块的访问,都需要一个固定的物理地址,基于这个固定的物理地址来操作Flash存储器,在对块进行操作的时候,一个块地址对应一个块,如果这个块坏了,那么这个地址的存在就没有意义了。就像ARM芯片在引导的时候,需要复制Flash的前4 KB的数据,这样需要固定块的数据。如果这个块坏了,系统将无法引导。

    下面通过地址重映射的方法,即在Flash固件里面加入一个地址重映射的区域来解决这一问题。


4 基于地址重映射的读取方法
    在实现地址重映射的时候,可以从块逻辑地址O开始,查看相对应的物理块。如果损坏,将地址从最后一个开始向前指,而相应的逻辑块被标示为坏块。例如图3,物理块0损坏,逻辑块地址0指向物理块4095的地址,而逻辑块地址4095被标示为坏块。可以看出,即使块0掼坏,仍然可以通过逻辑地址O进行操作,其内部的变化,并不会影响外部的使用。唯一不同的是,Flash的整体空间变小了。不过即使这样,也不会像以前那样,第一块坏了,就去换一个Flash。

5 性能分析
    很明显,在数据读取的时候增加了一步地址重映射的计算。这样使整体性能会略微下降。下面分析一下加入地址重映射之后的性能影响(这里仅仅分析数据的读取性能,因为对Flash操作最多的是数据的读取,用户使用时也是读取最多)。
    地址重映射是根据输入的地址计算操作地址的。从图4可以看出,地址重映射的计算是加在地址A25输入之后的,因其在内部操作,延时相对很小。而这个地址重映射在整个块操作之中只操作一次,且其使用时间很短,故在这里可以忽略不计,其对数据的读取操作基本没有影响。

    加入地址重映射之后,坏块全部集中到了整个Flash设备的最后。也就是说,即使这个Flash中有1024个块坏了,仍然可以当其为一个32 MB的Flash来使用,即其有效块为第0~1 023块;不像前面所描述的那样,就算只有第一个块坏了,这个Flash也就报废了。经过加入地址重映射之后的Flash,即使就剩下一块没有损坏的块了,这个Flash仍然可以作为引导系统使用。


6 结 论
    通过在Flash内部加入地址重映射机制,对于使用Flash将会有很大的方便,并且,即使第一个块坏了,仍可以继续使用这个Flash,而无需厂家保证第一个块是好的。这样大大延长了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 隧道灯 驱动电源
关闭