数据在NAND Flash中以电荷的形式存储。数据的表示以所存储电荷的电压是否超过一个特定的阈值实现,因此Nand Flash存储介质对电荷微小的差异非常敏感。微小的变化可能改变单元的含义-这种情况称之为“位错误”。虽然其中一个或多个位错误可以纠正,但超过阈值的位错误导致数据丢失。
数据丢失是如何发生的,如何通过Flash介质驱动和文件系统技术预防?这些技术的使用对介质寿命的影响?我们来了解一下。
NAND Flash使用电荷来长期存储1和0。这些电荷会随着时间的流逝而消失。解决这个问题的方法通常是擦除该区域并重写数据。
有多种因素导致电荷波动,包括时间,写干扰及读干扰。
如果NAND设备长期未通电,电荷将耗尽,使页面不可读。通过厂商给出的“数据保留(data retention)”值,可以预测电荷失效发生的时间。
NAND相邻页面的写操作也很容易对页面数据造成干扰,改变电荷,称为 “编程干扰” 或“写干扰”。干扰的影响很难检测,但编程期间可以使用厂商推荐的技术来最小化影响,例如在块中按顺序执行页编程,减少部分页写入操作。
第三种影响因素为读干扰。读操作通过测量电荷阈值实现,测量可能会导致附近位电荷的变化。在读取某个页面时,临近的页面会受到升高电压的影响,导致页面中的位错误。
NAND最大编程和擦除 (P/E)次数随着时间的推移而减少。该限制与重写NAND 页面纠正位错误相结合,给出NAND Flash介质的有效寿命。
用于位差错检测和修正的算法称为“ECC”。
在NAND Flash中,数据存放在主页面中,ECC存储在备用区域。每个NAND页面都有单独的备用区域,ECC被设计为保护主页面和备用区域数据。
NAND Flash厂商将指定NAND页面可以纠正的错误位数,该信息被称为NAND Flash介质的纠错要求。错误数超出纠正需求时,也可以被发现。
对简单的嵌入式处理器或微控制器,一位纠错(和两位检测)可以通过软件“Hamming Code”算法完成。
另一种纠错方法是使用硬件机制。通过NAND控制器检测并将纠正位错误,最大纠正位数称为纠错能力。达到或超过纠错NAND介质的纠错能力非常重要!
解决位错误的方法通常是错误发生时,将数据重写到Flash中的其它位置,然后擦除该区域。我们将此操作称为清理。与NAND 控制器交互的软件将报告位错误是否已更正,有多少错误已更正。
防止位错误累积的一种方法是在错误发生时清理数据,如YAFFS文件系统,这个策略提供了防止数据丢失的最佳保证,但也极大缩短NAND flash介质的使用寿命!
另一种解决方案是利用NAND厂商的推荐。对于20位纠错能力,如果检测到12位或更多位错误时,NAND厂商可能会建议进行清理。
一个更好的解决方案是允许设计者来指定清理方式。对于经常断电的设计,在位错误发生时即执行清理也许是最好的解决办法。对于经常使用不断供电的设计,在误码接近最大值时清理可能是平衡介质寿命和数据丢失风险的最佳选择。
选择合适的Flash和ECC机制,对创建一个高效的系统非常重要,可以最大限度地延长Flash的使用寿命。
文件系统处理用户对文件的访问。
文件系统可能导致过度的写放大。文件系统通过特定接口通知底层设备数据块是否使用。如果不使用此接口,NAND驱动软件不知道文件系统不再使用某些数据,将其继续作为有效数据处理。在这种情况下,会导致数据在介质上的移动(垃圾收集和磨损均衡),从而减少设备的使用寿命。
文件系统还可以通过少量的写入增加写放大。NAND介质为页为单位写入,在部分页面写入时强制使用整个页。使用的文件系统对于预测介质的生命周期非常重要。
文件系统的一些机制,如错误清理和磨损平衡,也意味着设计者无法确定其存储层不会在在幕后写东西,如果在此操作期间断电,可能导致严重后果。
NAND Flash介质中的电荷会以各种方式减少,导致的主要后果是位错误。我们可以通过软硬件的方法检测并纠正位错误,但需注意平衡这些方法对介质生命周期的影响。文件系统还需要关注Flash介质本身的特性,以实现生命周期和数据保留的最佳平衡。系统设计者需要使用合适的软件系统,并且与厂商保持沟通,以确保按规范操作介质。
|