NAND Flash控制器功能
Nand Flash控制器通常提供损耗均衡,纠错码(ECC)和坏块管理功能。
其实现方式可以用软件,硬件或两者的组合来实现。
通常,Nand Flash控制器位于主机和NAND闪存设备之间,并控制对设备的访问。
正是因为如此,为了简化Nand Flash控制器设计,eMMC基于此而来,将Nand Flash控制器和存储器设计在一起,简化控制器额外的程序操作,提高数据速率。
一、坏块管理
随着Nand Flash使用,NAND闪存阵列的组成块的存储器单元可能磨损。所有Flash技术都是如此,强大的系统需要将块故障考虑在内并使其适当调整。
1、坏块初始化
大多数NAND闪存设备,如大容量存储器的各种类型,出厂时都在存储器阵列中包含一些初始坏块;这些块通常被制造商标记为坏,表明它们不应在任何系统中使用。
NAND闪存器件数据表提供坏块标记的位置。工厂测试在最坏情况下执行,那些未通过此测试的块被标记为坏块。如果在系统中使用出厂标记的坏块,则它可能看起来正常运行,但可能导致其他好块失败或产生其他系统错误。
如果客户擦除了出厂标记的坏块,则标记也会被删除。为避免丢失此信息,最好在发出任何PROGRAM或ERASE命令之前对坏块执行初始读取并创建坏块表。
在创建原始坏块表之后,必须对其进行维护和添加,因为附加块随着使用而变坏。
2、块退化和跟踪
由于NAND闪存设备中的好模块会降级和磨损,因此不仅要跟踪初始的坏块-工厂标记的坏块,还要跟踪在正常操作设备中出现错误的块。
块失败的类型:
当NAND闪存设备运行期间发生故障时,它们被归类为永久或临时故障。
通过适当的NAND Flash设计实践可以最大限度地减少临时故障。如果发生这些故障,则可以恢复存储器阵列的故障位置;不需要将块添加到坏块表中。
要从此类错误中恢复,请擦除发生错误的块,并将数据重新编程到该块。
临时错误以多种形式发生:
- 程序干扰:
当在PROGRAM操作期间改变不打算编程的一个或多个位时,发生编程干扰错误。
向页面增加部分页面程序的数量可能会加剧此错误。程序干扰错误可能会显示在正在编程的页面上或同一块内的其他页面上。 - 阅读打扰:
在READ操作期间改变一个或多个位时发生读取干扰错误。
在正在读取的块内发生读取干扰错误,但是在正在读取的页面之外的页面上发生读取干扰错误。在包含这些页面的块的ERASE命令之前,在各个页面上执行大量(数十万或数百万)READ操作会加剧此错误。 - 过编程:
当块内位线上的存储单元阈值栅极电压变得太高时,可能发生过编程。
这可以防止正确读取存储器单元并且可能导致给定块内的后续页面的编程不正确。 - 数据丢失:
在延长的存储期间,一些存储器单元可能通过改变充电增益或电荷损失而丢失数据。高ERASE / PROGRAM循环计数可以通过在存储单元的栅极氧化物中诱导陷阱电荷来加剧数据丢失,从而有效地磨损栅极氧化物。
二、磨损均衡
因为NAND闪存单元最终会磨损,强大的NAND Flash操作应包括耗损均衡策略。
磨损均衡用于在每次编程文件时将逻辑存储器地址转换为不同的物理存储器地址。该操作由连接到NAND闪存设备的控制器监视和实现。磨损均衡扩展NAND闪存单元在整个存储器阵列范围内的使用,均衡使用所有内存单元,并有助于延长设备的使用寿命。
损耗均衡算法确保对每个块的所有可用写周期进行相等的使用。
简单理解就是不能每次存数据在一个Block里面的,因为半导体器件都会有损耗,所以存数据时可以每次换着Block存储,就是“雨露均沾”的意思,不能老薅一个羊身上的羊毛。
三、Error Correction Code-ECC
在NAND闪存设备操作期间或长时间不活动期间可能会发生位错误,强制使用ECC。
“错误”指的是位反转,一般是浮栅极的电子飘移导致电压偏移,使得从1变为0;或者读取或者写入错误。
ECC的特征通常在于每528字节数据扇区检查的代码可以校正的位数。(数据扇区通常为528字节,但在某些设备中可能会有所不同)
例如,如果控制器具有1位ECC,则能够纠正每个数据扇区中的一个1位错误。
当数字数据存储在非易失性存储器中时,拥有一种可以检测并纠正一定数量错误的机制至关重要。纠错码(ECC)以这样的方式对数据进行编码,使得解码器可以识别和纠正数据中的错误。
通常,通过向它们添加多个冗余位来编码数据串。当重建原始数据时,解码器检查编码的消息以检查任何错误。
请参考如下Micro文章
TN-29-63:Error Correction Code (ECC) in SLC NAND Introduction
TN-29-61: Wear Leveling in NAND Flash Memory Introduction
2019-07-22良人当归即好