泉源:电子产品天下
为什么烧录Nand Flash经常失败?为什么烧录乐成了,一部分Nand芯片贴板之后系统却运行不起来?…,等等,问了那么多为什么,那我反问一个问题:你相识Nand Flash的特征及其烧录要害点吗?
一、Nand flash的特征
1、位翻转
在 NAND 闪存是通过对存储单位(Cell)举行充电来完成数据存储的,存储单位的阈值电压就对应着数据值。当读取的时间,通过将它的阈值电压与参考点比照来获得其数据值。对SLC 而言,就只有两种状态和一个参考点。而关于2-Bits 的MLC 而言,它有4 种状态和三个参考点。TLC就更多状态和参考点。当读出的数据值与编程时数据值对应的阈值电压不相匹配时,批注数据爆发了位翻转,就带来了可靠性问题。导致位翻转的最常见缘故原由是“编程滋扰”导致的阈值电压漂移。
2、存储结构
Nand 闪存由多个Block组成,每一个Block又由多个Page组成,Page的巨细一样平常为512+16Bytes 、2K+64Bytes以及4096+128Bytes,Page是读取和编程的基本单位,而擦除的基本单位是Block。
NAND Flash的页,包括主区(Main Area)和备用区(Spare Area)两个域,“主区”也常称作数据区,备用区是保存区域,一样平常用来标记坏块(bad block)和存放ECC的值,虽然有些文件系统使用备用区纪录擦除次数、文件组织数据等。
图1.1 为页巨细为2048+64的闪存存储结构
3、坏块及ECC
位翻转的爆发是随机的,且比特误码的数目会随着擦写次数的增添而增添。可是只要比特误码的数目在ECC 能够纠正的规模内,数据的完整性就始终有包管。在有些点,每页的比特误码有可能很靠近ECC 所能纠正的极限,NAND 的控制系统必需严防比特误码凌驾可纠错的规模,不然,就可能造成数据丧失或者系统无法正常事情。因此,这些块必需要标记为坏块;悼橛涝恫挥Ω迷儆美创娲⑹。由于坏块的爆发是不可阻止的,NAND 制造商在对裸片测试时会选择对某些块举行坏块标记,而不是放弃整个裸片,以是大大都NAND 在出厂时就已经保存标记为坏块的块。若是一个NAND 的块被标记为坏块,那么NAND 的容量就永世性的减小了。
二、Nand系统裸片量产烧录的要害点
由于Nand flash芯片的特征,以其作为存储介质时必需对这些特征举行适当处置惩罚,这样系统才华正常运行。系统设定各分区数据在Nand芯片的存储结构,并且在存储驱动层对Nand举行位纠错、坏块治理等处置惩罚,这些信息需要系统/驱动工程师明确。
研发阶段或小批量生产阶段,常接纳在板烧录的方法,原理是将boot通过串口下载到内存跑起来,由boot从SD卡或网络将内核镜像、文件系统镜像等数据烧录到Nand flash芯片。
为了提高生产效率或别的方面思量,会使用烧录器对Nand flash裸片举行量产烧录,由于烧录器厂家并不知道存储驱动层对Nand种种特征的处置惩罚方法,以是不加准确设置就举行烧录的话,往往泛起以下情形:1. 烧录失败,经常是校验通不过;2. 烧录通过,可是部分芯片贴板之后系统运行不起来,或者运行起来某些?榉浩鹨恍┕в胍斐。这些大多不是烧录器自己的问题,而是裸片烧录Nand系统时几个主要的要害点没有处置惩罚好,或者说没有和目的系统相关处置惩罚一致。这些要害点包括:
1) 坏块处置惩罚战略
2) 分区(Partition)
3) 纠错码(Error Correction Codes,ECC)
虽然,影响烧录的尚有其他因素,好比备用区的使用情形、未用好快的名堂化以及动态元数据等,但我们这里只讨论上面几个较量普遍的因素。
1、坏块处置惩罚战略
坏块一样平常是凭证芯片的坏块标记位置举行识别的,而坏块处置惩罚战略界说了在遇到坏块时算法应该如那里置。战略算法认真将原来应该写到坏块的内容写到其它可选的好块中。最常用的坏块处置惩罚战略是跳过坏块,其他典范的尚有带BBT的跳过坏块及预留块区等。
跳过坏块的处置惩罚战略是最基本最常用的坏块替换战略。当烧录中遇到坏块时,算法简朴地跳过坏块,而将数据写入下一个好块。它会造成物理数据和逻辑数据的位置偏移,这通常需要分区来解决这个问题。
2、分区(Partition)
接纳类跳过坏块的处置惩罚战略的Nand系统,常;岚汛娲⑶殖扇舾筛霾畋鸬奈锢砬,这就是我们说的分区,看法上很像电脑硬盘的分区。使用分区使得你有能力确保你的数据可以存到预先指定的物理块区内,即便在这之前发明了一些坏块。这对一些底层软件组件好比启动指导程序和某些必需很容易定位的文件系统驱动程序来说,是很是有资助的。
当使用跳过坏块的替换战略时,坏块会导致数据顺移到下一个好块。若是设置了分区,就可以指导烧录器确定命据的界线,确保数据文件不会侵占相近的分区。
图2.2.1就是典范的嵌入式Linux系统的分区情形。
图2.2.1 典范的嵌入式Linux系统分区情形
3、纠错码(Error Correction Codes,ECC)
针对差别工艺、容量的NAND存储系统接纳适当的ECC算法是应该的,要包管系统的可靠性,甚至是必需的。ECC纠错码一样平常存放在备用区中,对一整页或将页分成若干节的数据举行盘算而得。数据烧录之前需要准备好ECC(硬件ECC除外),若是是纯数据则需要使用ECC算法来天生。Nand裸片量产中,知道ECC算法的纠错能力(纠错位数)是很主要的,由于要包管生产效率,烧录器若是接纳ECC来举行校验数据是不现实的,而通过简朴数据比对就可以知道数据的位翻转个数,若是翻转个数规模在ECC算法的纠错规模之内,则以为校验应该是通过的。
三、烧录定制
关于以上要害点或其它特殊部分,若是烧录器软件没有支持的响应的计划,需要联系原厂举行相关算法的定制,好比坏块处置惩罚计划、ECC计划等。
适用于所有电子电路制造行业、及半导体相关工业