微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > MCU和DSP > NAND Flash上均匀损耗与掉电恢复在线测试

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

时间:04-27 来源:微计算机信息网 点击:

模拟一次"掉电"行为,需要进行特殊的处理。实际的掉电行为在电源重新供给后,整个系统会重新开始,包括重薪启动文件系统。掉电前系统的所有参数、系统堆栈以及现场均失效。在测试中模拟掉电行为有一定的难度,直接断电既不安全,也不现实,可用exit()函数中止程序来模拟。在执行写操作时,写入随机的字节数后,用exit()函数立即中止程序的运行;再重新启动程序,读取掉电时写入的文件,分析文件以检查文件系统新的掉电保护功能。
上述测试手段不适用于自动测试,也不可能手工进行大量的测试。笔者在该项测试中,巧妙地使用了try{}和catch(}结构,既模拟了实际的掉电行为,又保证了自动测试的顺利进行。
模拟掉电行为的核心代码如下:

\
4.4 测试结果
YAFFS-NAND文件系统,只提供上述的②和③两种文件保护方式。在打开文件时,若以"截短为0"的方式打开已有文件,则保护方式为第②种,使用新文件完全代替旧文件。若以修改的方式打开己有文件,则保护方式为第③种,使用新加旧的保护方式。
需要注意的是:在数据区掉电的情况下,以上两种保护方式完好,测试通过。但在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文件系统中均匀损耗和掉电恢复两个重要指标进行测试,给出了测试结果,并针对测试过程中存在的部分问题提出了改进方案。实际测试表明,改进后系统性能有明显改善,能适应更多的应用环境。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top