NAND Flash上均匀损耗与掉电恢复在线测试

发布者:TP9111最新更新时间:2014-09-11 来源: eefocus关键字:NAND  Flash  均匀损耗  软件测试  YAFFS 手机看文章 扫描二维码
随时随地手机看文章
  引 言

  随着嵌入式技术在各种电子产品中的广泛应用,嵌入式系统中的数据存储和管理已经成为一个重要的研究课题。Flash存储器具有速度快、容量大、成本低等很多优点,因此在嵌入式系统中被广泛用作外存储器件。嵌入式系统中的Flash存储器需要有自己的文件系统,而不能直接移植通用文件系统,主要有两个原因:第一,嵌入式系统的应用条件恶劣,电源电压不稳定,突发性断电以及非法插拔都容易造成灾难性的影响,通用文件系统对于可靠性的设计考虑不足;第二,通用文件系统的记录信息(如FAT表)需要被多次修改,而记录信息放在Flash存储器固定的区块中,将导致该区块的频繁操作,从而缩短Flash器的使用寿命。这样就对软件技术提出了更高的要求。

  为了管理复杂的存储硬件,同时提供可靠高效的存储环境,出现了基于NAND和NOR的文件系统。目前主流的FFS(Flash File System)有如下3种:TrueFFS、JFFSx以及YAFFS。YAFFS(Yet Another Flash File System)是专门为NAND Flash设计的嵌入式文件系统,适用于大容量的存储设备。它是日志结构的文件系统,提供了损耗平衡和掉电保护等机制,可以有效地减小上述原因对文件系统一致性和完整性的影响。本文正是基于这样的前提,介绍了关于嵌入式YAFFS文件系统测试方案,针对文件系统中损耗平衡和掉电保护两个重要的系统性能指标进行实时在线的测试与分析,不同的应用环境使用该文件系统应进行相应的修改。

  1 YAFFS文件系统概述

  YAFFS文件系统类似于JFFS/JFFS2文件系统。不同的是,JFFSl/2文件系统最初是针对NOR Flash的应用场合设汁的,而NOR Flash和NAND Flash本质上有较大的区别。尽管JFFSl/2文件系统也能应用于NANDFlash,但由于它在内存占用和启动时间方面针对NOR的特性做了一些取舍,所以对NAND来说通常并不是最优的方案。

  1.1 NOR和NAND的比较

  基本上NOR比较适合存储程序代码,其容量一般较小(比如小于32 MB),且价格较高;而NAND容量可达lGB以上,价格也相对便宜,适合存储数据。一般来说,128 MB以下容量NAND Flash芯片的一页大小为512字节,用来存放数据,每一页还有16字节的备用空间(SpareData),充当OOB(Out Of Band)区域,用来存储ECC(Error Correction Codc)校验/坏块标志等信息;再由若干页组成一个块,通常一块为32页(16 KB)。与NOR相比,NAND不是完全可靠的。每块芯片出厂时允许有一定比例的坏块存在,对数据的存取不是使用线性地址映射,而是通过寄存器的操作串行存取数据。

  1.2 YAFFs数据在NAND上的存储方式

  YAFFS根据NAND闪存以页为单位存取的特点,将文件组织成固定大小的数据段。利用NAND闪存提供的每页16字节的备用空间来存放ECC检验信息和文件系统的组织信息,不仅能够实现错误检测和坏块处理,而且能够提高文件系统的加载速度。

  YAFFS将文件组织成固定大小(512字节)的数据段。每个文件都有一个页面专门存放文件头,文件头保存了文件的模式、所有者id、组id、长度、文件名等信息。为了提高文件数据块的查找速度,文件的数据段组织成树形结构。YAFFS在文件进行改写时,总是先写入新的数据块,然后将旧的数据块从文件中删除。YAFFS使用存放在页面备用空间中的ECC进行错误检测,出现错误后会进行一定次数的重试;多次重试失败后,该页面就被停止使用。以(512+16)字节为一页的NAND Flash芯片为例,YAFFS文件系统数据的存储布局如图1所示。

  2 YAFFS文件系统测

  2.1 测试总体说明

  YAFFS文件系统是开源的,测试基于白盒测试。在所关心的代码段中,插入测试代码。为保证测试代码不对原代码造成影响,测试后可立即恢复为原代码,所有测试代码(包括测试用变量和函数)均嵌入到#define FS_TEST宏定义中。

  2.2 模拟文件的生成

  嵌入式环境下对文件系统进行大量、长时间的测试存在很多问题,不易实现,对测试代码的插入和数据的监视也比较困难。这里采用PC模拟测试的形式,用文件的读/写模拟NAND器件,并在PC上对模拟文件监视,以达到测试的目的。代码定义了各种NAND器件的类型,以适应不同的器件。模拟器件时,也用这些信息生成相应的模拟文件。

  指明要模拟的NAND器件的大小(FILE_SIZE_IN_MEG)和结构(BLOCKS_PER_MEG,BLOCK_SIZE)后,按照相应的大小和结构生成文件g_filedisk。

  3 均匀损耗测试

  3.1 测试目的

  NAND Flash器件每个Block区块的擦写次数有限。在需要实时记录的应用环境中,为保证器件寿命,应尽量使每个区块的擦写次数相对平均.以最大程度地延长NAND Flash器件的使用寿命。此项测试记录每个Block区块的擦写次数,以测试YAFFS文件系统在均匀损耗方面的性能。

  3.2 测试方法

  测试代码在器件模拟文件的每一页的Spare区后,增加了字节,用于记录该页的擦写次数。由于擦写是以Block为单位进行的,因此每个Block各页的擦写记录数是相同的。在以后的测试中,可以只使用第一页的该Block空间记录擦写次数,其他空间作其他测试用。

  测试代码插入到CheckInit()和yaffs_FEEraseBlockInNAND()(yaffs_fileem.cpp)中,在初始化器件模拟文件时,生成(新模拟文件)或读取(己有模拟文件)擦写次数;并在程序执行擦写函数时,对擦写次数进行累加和保存。

  测试程序甩到的测试变量;记录擦写次数的数组-g_ersNumArray[FILE_SIZE_IN_MEG*BLOCKS_PER_MEG]、指向擦写的最大值-g_pErsMax和指向擦写的最小值-g_pErsMin。 [page]

  测试程序用WireOut0.log和WireOutl.log两个文件记录每个Block区块的擦写次数,查看这两个文件,可以看到每个区块的擦写次数以及最大/最小值。两个文件是等同的,因测试时间比较长,取两个文件以避免系统在写记录文件时出错,而丢失所有的记录;两个文件轮流写,保证至少有一个文件的内容是系统出错前最近的记录。

  3.3 测试结果

  YAFFS文件系统按“顺序”使用未分配的空间用于新的写入操作,并以同样“顺序”擦除废弃的区块。写入和擦除操作,均按顺序在未分配的空间或废弃的空间中进行。当系统未用空间小于某一预设值后,系统将对存在废弃页的区块进行回收。这种写入和擦除策略在一定程度上保证了损耗的均匀性。

  这种机制虽然在一定程度上满足均匀损耗的要求,但还是存在问题,并不适用于所有的嵌入式应用环境。假设在一块16MB的NAND器件上,有10MB空间用来存放相对固定、不经常修改的数据文件,则经常修改的文件只能在剩下的6 MB空间上重复擦写,在这6 MB空间上做到“均匀损耗”。对整个器件来说,系统并没有合适的搬移策略对固定文件进行搬移,整个器件做不到均匀损耗。在实时记录信息量比较大的应用环境中,应编写相应的搬移策略函数,对固定文件进行定期的搬移,以确保整个NAND器件的均匀损耗。

  4 掉电恢复性能测试

  4.1 测试目的

  文件系统应能保证在系统突然断电的情况下,最大限度地恢复(保护)有用数据。如果在修改一个文件时掉电,那么掉电后的文件保护方式根据实际情况可分为3种:

  ①用旧文件完全代替新写文件,新写文件(没写完)被忽略。这种保护方式应用比较多,比如在更新设置时掉电,使用掉电前的设置,用户是可以接受的。

  ②用新文件完全代替旧文件(新文件写了多少就保留多少)。这种保护方式适合应用于文本的情况,比如短信。新短信虽然不完整,但根据情况用户可以得到部分信息,如果发送方信息完整或属于可猜测的情况,则可以要求发送方重发。

  ③己写部分用新文件,未写部分用老文件,所谓“新加旧”的保护方式。这种保护方式可以应用在动态更新的文件上。但是,对于使用偏移量进行的文件读写操作,采用这种保护方式,会产生乱码。

  4.2 测试方法

  测试代码随机产生掉电消息,模拟一次掉电行为。测试代码插入到yaffs_FEWriteChunkToNAND()(yaffs_fileem.cpp)中,在写Data区和Spare区时分别产生随机掉电位置,模拟掉电行为。掉电后,程序重新挂接文件系统,并读取掉电时正在更新的文件,与原文件相比给出判定结果。

  程序用到的测试变量:掉电类别-g_tstPowerOff,1为Data区掉电,2为Spare区掉电。在完全模拟时,掉电类别随机产生。程序用TestLog.log记录掉电后判定的结果。TestLog.log为增加方式打开,新记录写在最后,不影响原有的记录结果。

  4.3 测试手段

  模拟一次“掉电”行为,需要进行特殊的处理。实际的掉电行为在电源重新供给后,整个系统会重新开始,包括重薪启动文件系统。掉电前系统的所有参数、系统堆栈以及现场均失效。在测试中模拟掉电行为有一定的难度,直接断电既不安全,也不现实,可用exit()函数中止程序来模拟。在执行写操作时,写入随机的字节数后,用exit()函数立即中止程序的运行;再重新启动程序,读取掉电时写入的文件,分析文件以检查文件系统新的掉电保护功能。

  上述测试手段不适用于自动测试,也不可能手工进行大量的测试。笔者在该项测试中,巧妙地使用了try{}和catch(}结构,既模拟了实际的掉电行为,又保证了自动测试的顺利进行。

  模拟掉电行为的核心代码如下:

 4.4 测试结果

  YAFFS-NAND文件系统,只提供上述的②和③两种文件保护方式。在打开文件时,若以“截短为0”的方式打开已有文件,则保护方式为第②种,使用新文件完全代替旧文件。若以修改的方式打开己有文件,则保护方式为第③种,使用新加旧的保护方式。 [page]

  需要注意的是:在数据区掉电的情况下,以上两种保护方式完好,测试通过。但在Spare区掉电的情况下,文件系统有很大的概率读不出掉电时的文件,几乎不能正常使用。在实际掉电情况中,按Data区和Spare区的比例关系(512:16),写操作掉电时发生在Spare区的概率为3.03%,不可接受。另外,文件系统不提供旧文件的保护方式,对于这类应用(还是比较多的)需要另外实现。

  4.5 对Yaffs-NAND在掉电保护方面的改进

  4.5.1 增加保护方式

  Yaffs-NAND文件系统在原理上决定了只能有上述的②和③两种文件保护方式。要提供第一种保护方式,需要对文件系统进行扩展,增加2个函数和2个结构体:

  EOnlyOld、EOnlyNew、ENewOld和EDefault分别表示3种不同的保护方式和默认保护方式(由原文件系统提供)。SProInfo结构不仅记录保护方式,还记录了该文件名,供关闭文件时使用。

  yaffs_openEx()根据传入的保护方式,修改打开文件的标志,以显式地设置原有的②、③两种保护方式。当保护方式为EOnIyold时,yaffs—openEx()将打开另一个新的临时文件,并返回给用户使用。传入的SProlnfo结构的指针,将带回文件名和文件句柄,供关闭文件时用。yaffs_closeEx()函数在关闭文件时,检查文件的保护方式。若为第②、③种情况,则直接关闭;若为第一种情况,则先删除原文件,再把新文件重新命名,以达到文件保护的目的。

  使用方法如下:

  ①使用默认方式,则与原文件系统使用方法相同。新参数默认为NULL,可以直接兼容己有代码。

  ②使用扩展方式,则要先生成一个SProInfo的对象,但将其指针传给yafffs_openEx()。关闭时同样要将其指针传给yaffs_closeEx()。例如:

  对进行上述改进后的扩展方法进行测试,结果同改进前;但增加了只保留旧文件的第一种保护方式,程序运行良好。

  4.5.2 Spare区掉电不能恢复的修改

  对源代码进行深入研究,发现在Spare区掉电不能恢复的问题出在Spare区的Tag信息自检验部分。yaffs_GetTagsFromSpare()函数从Spare区读取Tag信息的过程中,调用yaffs_CheckECCOnTags()检验Tag信息。但是,原代码对ECC校验错误的Spare区,只是将错误修正,并返回到}层函数;上层函数仅记录’Fag出错次数,并不做处理。因此,在SpareⅨ掉电时.会出现不可恢复的错误。

  修改yaffs_GetTagsFromSpare()函数的返回类型为int,以返回Spare区的ECC校验错误信息。当yaffs_CheckECCOnTags()返回Tag校验错误时,yaffs_Get-TagsFromSpare()函数将此错误返回。在调用此函数的地方,进行相应的修改:当Spare区ECC出错时,调用yaffs_DeleteChunk(),删除该页。因掉电引发的Spare错误不可恢复的问题,经修改后运行良好。

  结语

  YAFFS文件系统是专门为NAND闪存而设计的,它使得价格低廉的NAND闪存芯片具有了高效性和健壮性;但YAFFS文件系统在性能上还存在着问题,并不完全适用于对性能苛求的嵌入式系统。本文针对YAFFS文件系统中均匀损耗和掉电恢复两个重要指标进行测试,给出了测试结果,并针对测试过程中存在的部分问题提出了改进方案。实际测试表明,改进后系统性能有明显改善,能适应更多的应用环境。

关键字:NAND  Flash  均匀损耗  软件测试  YAFFS 引用地址:NAND Flash上均匀损耗与掉电恢复在线测试

上一篇:如何用万用表对选用的电感线圈进行检测?
下一篇:使用简单电容计即可将元件整理至多个容器内

推荐阅读最新更新时间:2024-03-30 22:47

STM32 "flash download failed - Target dll has been cancelled"错误解决办法
在用mdk通过stlink烧写官方例程到stm32f429I discovery时,烧写了十来个程序都没问题,突然在烧写一个程序时,弹出了“flash download failed - Target dll has been cancelled”,然后后续的烧写都失败了。 原因可能是其中一个程序将stm32开发板设置成了休眠模式,导致后续的烧写都失败了。 从keil论坛帖子中 看到可以通过st-link utility来将flash全部擦除就能烧写了。 从http://www.st.com/web/en/catalog/tools/PF258168下载st-link utility并安装,选择Target- Conn
[单片机]
STM32 flash download failed - Target dll has been cancelled"错误解决办法" />
NAND技术又突破!SK海力士研发1 Tb QLC闪存芯片
据businesskorea报道,SK海力士基于96层4D NAND技术开发了一种one-terabit (Tb) quadruple level cell (QLC)闪存芯片。具有更大数据存储容量的高集成产品标志着SK海力士NAND内存业务的全面启动。 SK海力士5月9日宣布,它向固态硬盘(SSD)控制器制造商提供了新产品的样品。该产品可以定义为现有96层charge trap flash (CTF) 4D NAND和公司的QLC设计技术的结合。 QLC是将四位数据存储在NAND单元中,是数据存储的最小单元。NAND flash分为SLC(每个单元1位存储)、MLC(每个单元2位存储)、TLC(每个单元3位存储)和QLC(每个单
[手机便携]
价格下跌增长放慢 三星东芝豪赌NAND存在风险
由于消费电子产品市场需求持续增长,为了避免价格下跌同时战胜竞争对手,NAND闪存生产商纷纷拉开产能竞赛,但这种豪赌最终可能证明是存在风险的。 韩国最大的存储芯片生产商三星以及日本最大的存储芯片生产商东芝已经宣布计划提高NAND闪存芯片产量。目前,NAND闪存广泛应用于消费电子产品,其中包括苹果风靡全球的iPod便携式音乐播放器。日本咨询公司J-Star Global总裁Yoshihisa Toyosaki表示,NAND产能竞赛并不是大话,因为东芝和三星决不会因价格战导致利润下滑而中止投资。 本月初,SanDisk和东芝宣布,双方计划投资6000亿日元(合51.5亿美元)兴建一座新的NAND闪存工厂。与此同时,韩国现代半导体也证实
[焦点新闻]
DSP+FLASH引导装载系统的设计与实现
  在一些脱机运行的DSP系统中,用户代码需要在加电后自动装载运行。DSP系统的引导装载(Bootload)是指在系统加电时,DSP将一段存储在外部的非易失性存储器的代码移植到内部的高速存储器单元中去执行。这样既利用了外部的存储单元扩展DSP本身有限的ROM资源,又充分发挥了DSP内部资源的效能。尽管用户代码在一段时间相对是固定的,但是如果直接将其掩膜到内部ROM中去的话,一方面受容量以及价格的限制,另一方面则在系统代码级上显得不是很灵活方便。FLASH是一种高密度、非易失性的电可擦写存储器,而且单位存储比特的价格比传统的EPROM要低,十分适合于低功耗、小尺寸和高性能的便携式系统。除了可以采用专用的硬件编程器把代码灌入FLASH
[嵌入式]
STM32访问外部存储器-NOR-Flash
基本说明 STM32访问外部存储器是需要配置FSMC的相关函数,在STM32固件库函数说明的中文翻译版中并没有这部分的说明,因此需要参考库函数的相关说明和库中自带的例程。 以下内容来自AN2784应用笔记: 2 与非总线复用模式的异步16位NOR闪存接口 2.1 FSMC配置 控制一个NOR闪存存储器,需要FSMC提供下述功能: ● 选择合适的存储块映射NOR闪存存储器:共有4个独立的存储块可以用于与NOR闪存、SRAM和PSRAM存储器接口,每个存储块都有一个专用的片选管脚。 ● 使用或禁止地址/数据总线的复用功能。 ● 选择所用的存储器类型:NOR闪存、SRAM或PSRAM。
[单片机]
透析零零总总的市场数据,半导体市场前景仍是混沌一片!
透过对市场预测数据的分析,以及对Diodes、Micron、Nvidia和TI公司当前情况的分析,我们可以得出以下结论:半导体市场的前景一片混沌。 整体而言,NAND闪存市场正在加速,而DRAM仍然疲软。基于个人电脑的芯片销售好于预期,与此同时,模拟器件市场却仍是混乱状态。 尽管混合信号芯片市场存在上升的迹象,第三季度比我们想象的要更好,IC Insights公司总裁Bill McClean说,“微处理器市场重拾升势,NAND价格上扬,而DRAM价格趋于稳定。”全球代工利用率是另一个风向标:有望在第三季度达到92%,相比之下,第一季度和第二季度分别为78%和90%。 最近,Gartner公司把它对2007年的IC增长预测调高
[焦点新闻]
风河强化Adobe Flash和Adobe AIR支持
Intel全资子公司风河系统公司(Wind River)日前宣布加入Adobe公司的Open Screen项目,并作为Adobe的全球范围合作伙伴,为Internet设备引入Adobe® Flash® Platform平台,为客户带来更丰富、更具吸引力的Web体验。Open Screen项目是由Adobe发起并已经有超过70多家业界合作伙伴参与的行业项目,其目标是为最广泛的消费电子产品客户提供持续不断的Internet全新体验和更丰富的多媒体体验。 风河将在其面向Internet软件平台的各个产品系列中实现对Adobe Flash Player 10.x、Adobe AIR 2.x和Flash Lite 4.x的授权
[嵌入式]
DRAM/NAND存储器需求持续增温 南亚科、旺宏业绩看好
  随物联网时代来临,数据中心、高速传输的5G受重视,研调单位指出,协助运算处理的 DRAM 与资讯储存的 NAND  Flash等需求也持续增温,南亚科(2408)日前表示,今年 DRAM 市场仍供不应求,带动存储器族群行情向上,旺宏(2337)在权证市场同受关注,昨(29)日登上成交金额之首。下面就随网络通信小编一起来了解一下相关内容吧。   南亚科昨日股价虽然收小黑,小跌0.4%,收在98.9元(新台币,后同),但获外资逆势敲进逾2,000张,颇有逢低承接意味。   南亚科今年首季每股盈余(EPS)达2.39元,随着 DRAM 市场仍持续供不应求,对今年整体营运表现胸有成竹,今年虽少了业外收益挹注,但南亚科认为,大环境有利
[网络通信]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
最新测试测量文章
换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved