基于LINUX操作系统的NAND FLASH在生产预抄写问题之分析_第1页
基于LINUX操作系统的NAND FLASH在生产预抄写问题之分析_第2页
基于LINUX操作系统的NAND FLASH在生产预抄写问题之分析_第3页
基于LINUX操作系统的NAND FLASH在生产预抄写问题之分析_第4页
基于LINUX操作系统的NAND FLASH在生产预抄写问题之分析_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于LINUX操作系统的NAND FLASH在生产预抄写问题之分析 作者: 日期:14 个人收集整理 勿做商业用途基于LINUX操作系统的NAND FLASH在生产预抄写问题之分析导言: 自2010年9月MS98、MS48I系列带有操作系统的IPTV在工厂大批量产,由于此系列机芯采用NAND FLASH作为程序存储器,而NAND FLASH对预抄写的文件及抄写设备都有较复杂的要求,且由于这些问题具有较高的隐蔽性,在初期的验证和试产是无法完整出现的,因此只有在量产的生产过程出现了不少的问题,但随着问题的解决,从最初的24不良率,逐渐下降至13%、1、0.7%,直至目前的0。3,并已有解决方案验证

2、中. 以下文字主要通过解决的主要问题进行阐述,便于相关人员对后续产品就NAND FLASH的使用及抄写有一定的了解,和对问题的分析与判断,提供一些参考和经验。关键词:NAND FLASH、BBT/BBM(坏块表/坏块管理)、写入/擦除。正文:FLASH详解1、什么是FlashFlash全名为Flash Memory,一种数据存储设备,Flash属于非易失性存储设备(Nonvolatile Memory Device,即数据存储时不因掉电而造成数据丢失,类似的设备有硬盘、ROM等),与此相对应的是易失性存储设备(Volatile Memory Device,即数据存储时会因为掉电而丢失,如计算机

3、内存,无论之前的SDRAM、DDR SDRAM,还是现在的DDR2、DDR3都属于此类型)。之所以称为Flash,是因为Flash的擦除操作是以Block(块)为单位的,以此相对应的是其他很多存储设备,是以bit(位)为最小读取/写入的单位。Flash是一次性地擦除整个块:在发送一个擦除命令后,一次性地将一个block,常见的块的大小是128KB/256KB, 全部擦除为1,也就是里面的内容全部都是0xFF,由于是一下子就擦除了,相对来说,擦除所用时间很短,可以用一闪而过来形容,故称为Flash Memory,也可译为闪存。2、什么是Nand FlashFlash主要分两种:Nand Flas

4、h和Nor Flash;其中INTEL于1988年开发出NOR Flash技术,彻底改变了原先由EPROM和EEPROM一统天下的局面。NOR FLASH采用类似于dram之类的地址总线,可直接与CPU相连,CPU可直接通过地址总线对NOR FLASH进行访问。NAND Flash是东芝公司于1989年开发的一种非易失闪存技术,具有较高的单元密度,可以达到高存储密度,写入和擦除速度较快.NAND FLASH只有IO接口,只能通过IO接口发送命令和地址,对NAND FLASH内部数据进行访问。关于两种不同类型的FLASH在技术特征方面的区别如下表所示:NOR FLASHNAND FLASH备注接

5、口总线I/O这是两者物理结构上最大区别单个CELL大小大小单个CELL成本高低读耗时快慢单字节编程时间快慢多字节编程时间慢快擦除时间慢快功耗高低,但是需额外的RAM是否可执行代码是不行,但一些新芯片可以在第一页之外执行一些小的LOADER即是否允许XIP(eXecute In Place,芯片内执行)位反转(Bit twiddling/bit flip)几乎无限制1-4次,也称作“部分页即数据错误,01或者1->0出厂是否允许坏块不允许允许NOR FLASH由于成本相对高,容量相对小,但读写数据时不易出错,所以在应用时,NOR FLASH比较适合应用于存储少量代码;NAND FLASH由

6、于成本相对低,容量可以做得比较大,但数据读写容易出错,因此应用时需要有对应的软件或硬件的数据校验算法,统称为ECC(Error Checking &Correction)(后文将详细阐述ECC相关算法)。所以,常见的应用组合就是,用小容量的NOR FLASH存储启动代码,比如uboot;用大容量的NAND FLASH做整个系统和用户数据的存储,如LINUX的内核镜像和根文件系统,以及余下的空间分成一个数据区.而一般的嵌入式平台的启动流程就是,系统从装有启动代码的NOR FLASH启动后,初始化对应的硬件,包括SDRAM等,然后将NAND FLASH上的LINUX内核读取到内存中,之后在

7、DDR RAM中执行内核,在LINUX启动最后,从NAND FLASH启动文件系统,接着运行初始化脚本,启动console交互,最后才运行通过console与内核交互,完成整个系统启动过程。NAND FLASH的物理存储单元的阵列组织结构。以下就HY27UF082G2B的物理结构为例:128k pages=2048 Blocks2K Bytes64 Bytes8 bit1 Block=64 Pages=(128k+4k)Bytes1 Page=(2K+64)Bytes1Block=(2K+64)Bytes*64Pages =(128K+4K)Bytes1Device=(2K+64)Bytes*

8、64Pages*2048Blocks =66Mbits2K Bytes64 BytesI/O 0I/O7图1:NAND FLASH的物理结构一个NAND FLASH由多个块(Block)组成,块的大小一般是128KB、256KB、512KB,本文所列举的HY27UF082G2B的一个Block为128KB.每一块里面又包含了很多页(page)。每个页的大小,目前常用的NAND FLASH多为2KB,最新NAND FLASH为4KB、8KB等。页面大于等于2KB称为大页面,此类NAND FLASH称为BIG BLOCK NAND FLASH;页面为256B、512B称为小页面,此类NAND FL

9、ASH称为SMALL BLOCK NAND FLASH.页Page,作为NAND FLASH读写操作的基本单位。每一个页,对应有一块区域,叫做空闲区域(spare area)/冗余区域(redundant area),而Linux系统中,一般叫做OOB(Out Of Band),这个区域,最初基于NAND FLASH的硬件特性:数据在读写时候相对容易错误,所以设计了多余的区域,用于放置数据的校验值。OOB的大小与页面的大小有关,一般情况下,页面为512B,其OOB为16B;页面为2KB,其OOB为64B。OOB的读写操作,一般是随着页的操作一起完成的,即读写页的同时,也读写对应的OOB。关于O

10、OB具体用途,总结起来有:标记是否是坏块存储ECC数据存储一些和文件系统相关的数据.3、NAND FLASH的特殊性由于NAND FLASH特殊的物理特性,使得内部存储的数据,只能从1变成0,初始值均为1,而数据的写入,即是将对应的位变成0;将数据的擦出掉,就是以BLOCK为单位,对该BLOCK的所有位进行置1。关于NAND FLASH的特殊性总结如下:普通设备(硬盘/内存等)NAND FLASH读取/写入的最小单位Bit/位Page/页擦除(Erase)操作的最小单位Bit/位Block/块擦除操作的含义将数据删除/全部写入0将整个块都擦除成全为1对于写操作直接写即可在写数据之前,要先擦除,

11、然后再写NAND FLASH的内部控制流程:4、NAND FLASH的坏块管理(BBM,Bad Block Management)Nand Flash 中, 一个块中含有1个或多个位是坏的(无法置1),就称其为坏块Bad Block。坏块的稳定性是无法保证的,也就是说,不能保证写入的数据是对的,或者写入对了,读出来也不一定对的。与此对应的正常的块,肯定是写入读出都是正常的、正确的。坏块的分类:1、 出厂时就有存在的坏块。此类出厂时就有的坏块,称作Factory(masked) bad block或Initial bad/invalid block,在出厂之前,就会在所在块的页的SPAER AR

12、EA中做对应的标记,标为坏块。2、 使用过程中产生的坏块。由于使用过程时间长了,在擦除块的时候,出错了,说明此块坏了,也要在程序运行过程中,发现并标记成坏块的.具体标记在位置与上述出厂时一致,这类坏块称为Worn-out bad block.即用坏了的块。坏块的标记:1、 对于现在常见的页大小为2K的Nand Flash,块中第一个页的OOB(SPACE AREA)起始位置的第1个字节;2、 对于旧的小页面(页大小为512B或256B)的Nand Flash,块中第一个页的OOB起始位的第6个字节。上述的字节如果不是0xFF,就说明是坏块。3、 对于个别特殊的Nand Flash,标注方式有差

13、异,有的为坏块的第一个页或第二个页;也有的是,倒数最后一个或倒数第二个页,用于标记坏块。具体信息,须参考相应的Nand Flash的Data Sheet。如目前我司产品所采用的HY27UF082G2B在出厂时的坏块标记设置是将该坏块的第1、2页全部设置为0。4、 对于量产所用的编程器在抄写过程,及软件在运行时出现坏块,坏块标记设置一般是将该块的所有页面清0。5、坏块的比例:1、 关于坏块比例。不同厂商对坏块控制有不同的要求,例如我司所用的HY系统Nand Flash厂商的承诺为少于2的坏块,并对出厂时IC的坏块状态进行标识,如IC表面的型号丝印标记:HY27UF082G2B TBCB的B为坏块

14、状态标识:B表示允许有坏块,坏块少于2;S表示允许15个坏块;P表示没有坏块。2、 保证第一个块是好的,并且一般相对比较耐用。6、坏块的管理:在Linux系统中,叫做坏块管理(BBM,Bad Block Management),对应的会有一个表去记录整个Nand Flash的好块、坏块的信息,这个表称为坏块表(BBT,Bad Block Table)。在Linux内核MTD(Memory Technology Device)架构下的Nand Flash驱动,和Uboot中Nand Flash驱动中,在加载完驱动之后,系统会主动扫描坏块,建立必要的BBT,为后续系统运行过程中坏块的管理所使用。7

15、、Nand Flash的页访问顺序在一个块内,对每一个页进行编程,必须是顺序的,而不能是随机的。例如,一个块中有64页,那么编程的顺序必须是从page0开始,再依次为page1、page2、page3,而不能是随机的。8、常用的Nand Flash操作实现对Nand Flash的操作,执行每项动作,都要发送对应的命令,而且要符合硬件的规定,下表以我司采用HY27UF082G2B为例的Nand Flash命令集:从上表可看到,如果要实现读一个页的数据,就要发送Read的命令,而且是分两个周期(Cycle),即分两次发送对应的命令,第一次是0x00H,第二次是0x30H,而两次命令中间,需要发送对

16、应的所要读取页的地址,后文将详解,此不赘述.注:对于不同厂家的Nand Flash的基本操作,即读页数据Read Page,写页数据(对页进行编程)Page Program,擦除整个块的数据Erase Block等操作所用的命令都是一样的.但针对一些Nand Flash的高级的一些特性,比如交错页编程(Interleave Page Program),多片同时编程(Simultaneously Program Multi Plane)等所用的命令,可能存在差异。但对于同一厂家的Nand Flash芯片,一般情况下是统一的。Nand Flash常用操作页编程(Page Program)Nand

17、Flash的写操作叫做编程Program,此操作以页为单位。Nand Flash在编程器抄写流程如下:关于ECCECC的全称是Error Checking and Correction,是一种用于NAND FLASH的差错检测和修正算法。如果操作时序和电路稳定性不存在问题的话,NAND FLASH出错的时候一般不会造成整个Block或是Page不能读取或是全部出错,而是整个Page中只有一个或几个BIT出错。ECC能纠正一个BIT错误和检测2个BIT错误,且计算速度很快,但对1BIT以上的错误无法纠正,对2BIT以上的错误不保证能检测。校验码生成算法:ECC校验每次对256BYTES的数据进行

18、操作,包含列校验和行校验。对每个待校验的BIN位求异或,若结果为0,则表明含有偶数个1;若结果为1,则表明含有奇数个1。列校验规则如下表所示:其中CP0CP5为六个BIT位,表示Column Parity(列极性),CP0为第0、2、4、6列的极性,CP1为第1、3、5、7列的极性;CP2为第0、1、4、5列的极性,CP3为第2、3、6、7列的极性;CP4为第0、1、2、3列的极性,CP5为第4、5、6、7列的极性.用公式表示就是:CP0=Bit0Bit2Bit4Bit6,表示第0列内部256个Bit位异或之后,再分别与第2列、第4列、第6列的256个Bit位异或,CP0实际是256*4=10

19、24个Bit位异或的结果。CP1CP5依此类推.行校验如下图所示:其中RP0 RP15 为十六个Bit位,表示Row Parity(行极性),RP0为第0、2、4、6、.252、254 个字节的极性RP1-1、3、5、7253、255 RP2-0、1、4、5、8、9.。252、253 (处理2个Byte,跳过2个Byte)RP3- 2、3、6、7、10、11。254、255 (跳过2个Byte,处理2个Byte)RP4- 处理4个Byte,跳过4个Byte; RP5- 跳过4个Byte,处理4个Byte; RP6- 处理8个Byte,跳过8个ByteRP7- 跳过8个Byte,处理8个Byte

20、;RP8- 处理16个Byte,跳过16个ByteRP9- 跳过16个Byte,处理16个Byte; RP10-处理32个Byte,跳过32个ByteRP11跳过32个Byte,处理32个Byte;RP12-处理64个Byte,跳过64个ByteRP13-跳过64个Byte,处理64个Byte;RP14-处理128个Byte,跳过128个ByteRP15-跳过128个Byte,处理128个Byte;可见,RP0 RP15 每个Bit位都是128个字节(也就是128行)即1288=1024个Bit位求异或的结果。综上所述,对256字节的数据共生成了6个Bit的列校验结果,16个Bit的行校验结果

21、,共22个Bit.在Nand中使用3个字节存放校验结果,多余 的两个Bit位置1.存放次序如下表所示:ECCBit7Bit6Bit5Bit4Bit3Bit2Bit1Bit0Byte0RP7RP6RP5RP4RP3RP2RP1RP0Byte1RP15RP14RP13RP12RP11RP10RP9RP8Byte2CP5CP4CP3CP2CP1CP011以HY27UF082G2B为例,每个Page页包含2048字节的数据区和64字节的OOB区。每256字节数据生成3字节ECC校验码,共24字节ECC校验码存放在OOB区中。关于LINUX嵌入式Linux系统包含Bootloader(引导程序)、内核(

22、Kernel)、和文件系统(File system)3部分。Linux的启动流程:对NAND FLASH在生产预抄写过程过程问题分析问题1:量产伊始,出现部分IC预抄写失败,但通过验证空贴到机芯板可用USB升级方式就可正常开机、工作。不良率达30%。分析:这个问题很明显可归纳为IC编程器兼容性的问题;抄写失败的现象表现为:NO ENOUGH GOOD BLOCK (没有足够的好块),也就是说明抄写的文件已超出了所设置的编程范围。编程器抄写时往往需要设置所要抄写文件在NAND FLASH中的存储起始地址(用BLOCK表示),文件长度(用BLOCK数表示).当导入一个抄写文件时,编程器会默认BLO

23、CK0为起始块,并根据文件大小计算所占用的BLOCK数(不足一个BLOCK按一个BLOCK算),这就是抄写时默认设置.但我司采购的IC出厂时就有部分存在坏块,那么编程器对坏块的处理方法是遇到坏块时跳过,将数据保存到坏块之后的好块中。那么上述抄写器的默认抄写设置范围仅仅是文件的抄写范围,未考虑有坏块的情形,从而一遇到设置范围内存在坏块的IC就会出现文件没有足够的空间存储,导致抄写失败。对此,经征询设计师意见,适应放宽抄写文件长度,便可顺利抄写。总结:在进行NAND FLASH抄写时,必须确保在文件长度之处还应有足够的冗余块,以供有坏块时跳转。问题2:MS48IS用S100F抄写器抄写2G NAN

24、D FLASH IC时发现,有部分IC的软件无法启动,不良率达10%。问题分析: 将不良IC的数据读出分析,发现Part2位置0x7FA0x7FB 此部分代码大概10几K,(0x7F9的单位是Block,1Block= 64pages, 1page=2KB=2048 Bytes),换算成具体地址part2开始位置=0x7FA*204864=0XFF40000,而在此地址并未看到数据,都是0xFF。对于可启动的IC读出的数据,此部分的数据是有相应的数据的。因而可判定是由于此部分的数据丢失所造成。机芯软件是不可能造成此问题,那么我们对此问题在排除机芯软件的问题外的情况,分两种情况进行分析:1、人工

25、对编程器软件的设置不正确。我们做了如下验证:1)只导入抄写的其中一个文件(Data_Merge或Partition Table ) ,抄写器基本都能报错,无法进行正常抄写;2)将两个抄写文件的顺序作了对调,编程器可抄写并校验成功,经读取数据确认未发现出错;从而说明人工对软件的调入并不会出现上述的问题。2、某台抄写器在抄写时发生抄写异常。我们做了如下验证:我们用一片IC分别在三台在用的编程器上进行抄写,并读取数据,对比读取数据,发现其中一台编程器的数据与其它数据及正确数据有较大差异,但并没有出现上述相应地址的数据差异。但我们反复两次再从此出现异常数据的抄写器上抄写、读取、对比,又发现此两次的数据

26、已正确,无法再现异常。 从上述的第2种情形验证结果,可看出编程器在抄写过程是不稳定的,再经过取一定数量的IC进行反复读/写,发现抄写的数据会出现差异的,并可复制。我们将此现象提交编程器厂商欣扬公司分析解决,经他们分析确认为编程器在编程算法方面有缺陷,需更改。但由于更改周期过长,考虑到产品生产不良率居高不下,及抄写的风险,建议暂停欣扬公司的S100F编程器对NAND FLASH的抄写。引入河洛公司FLASH100编程器,并经验证无此问题,投入量产。总结:对新购编程器及其相关软件更新的验证步骤:a. 采用同一块IC对每个编程座进行读/写操作,确认数据的正确性。b. 采用同一块IC对一个编程座进行反

27、复擦除、读/写,确认数据的正确性。c. 采用多块IC装入所有编程座,同时抄写,读出数据,确认数据的正确性。问题3:MS48I/MS98的NAND FLASH采用台湾河洛公司的FLASH-100编程器抄写后,在SKD生产时首次上电测试时仍有一定比例的不开机问题,不良率达57%.问题分析:将不良品的软件数据读出,分析发现以下问题:1、 ENV/BBT数据存储区域出现无数据或数据错;2、 ENV/BBT数据存储区域出现4BLOCK的坏块;3、 文件系统数据被破坏;关于问题2,具体分析解决如下:NAND FLASH的20442047 好块不足2个时,会导致系统当机,无法启动。这是因为: &#

28、160;    系统正常运行的程序除了预抄写的PART1(UBI)、PART2两部分之外,还在首次启动时往20442047写入BBT(bad block table)、ENV(LINUX 环境变量),此两部分数据各占用一个BLOCK,并在其中另外的两个GOOD BLOCK建立相应的BACKUP。也即是20442047这个区间必须全部是好块,或者至少有两个好块(BACKUP可不建立),系统才能正常启动.而目前出现不开机的问题有1/31/2的机器为此问题。     而针对此问题,编程器的设置如下:编程时按三个分区进行处理:PAR

29、T1:12041;PART2:20422043,必须确保两个好块;分区3:20442047,必须检测确保有两个连续好块.目前暂用此方法对NAND FLASH进行筛选,选出不可使用的IC将与研发确认,用于后续其它产品。关于问题1、2,具体分析解决如下:经综合研发、AOE、方案提供商MSTAR、编程器厂商河洛公司、工厂PE等技术人员的分析意见,目前出现由于数据不正常导致不开机的问题主要体现在以下流程:烧录贴片>波峰焊->开机后,就出现了开不起机现象,这部分流程就可能包含由于部品、编程作业、软件等方面所造成的问题,为了逐个排除上述各方面的问题,特安排数量为1K针对性实验:实验一:确认编程

30、器作业问题1、 由研发发布一版测试程序,将Kernel去掉了nand flash erase/write功能。用此bin档预抄写了1000片nand flash。2、 在2个用于验证Nand Flash的测试平台上抄写了 去掉nand flash erase/write功能的mboot。把预抄写好的1000片nand flash IC逐个放进测试平台进行确认。检测过程,机芯的软件没有任何对NAND FLASH执行Erase/Write 动作。测试结果是每一块都可以正常开机,说明编程器在对NAND Flash的抄写没有问题。实验二:确认MBOOT软件对Nand Flash的Erase/Write

31、问题在2个测试平台上更换了可正常Erase/write Flash的Mboot,把实验一中抄写1000块Nand Flash IC逐个装入测试平台进行确认.此时整个软件只有Mboot能执行Erase/Write Nand Flash动作,也即在启动系统时对Nand Flash写入了BBT及ENV数据.测试结果是每一块都可以正常开机,说明Mboot没有篡改Nand Flash中的数据。实验三:确认IC在经SMT贴片、回流焊/波峰焊高温等作业流程后是否特性发生变更导致数据出错。(部品问题)经确认,1000块板在SKD测试时,除了一块因硬件问题导致不开机之外,其余机芯均可正常开机,基本排除部品问题。 实验四:确认主软件在首次开机运作过程是否存在更改NAND FLASH的问题。 经确认,1000块板在经USB升级量产主程序后,除了因升级操作问题导致升级未成功而不开机的问题(经重新升级可解决)之外,也未出现由于数据被更改而不开机的问题,同时抽取50台整机安排电源波动实验,也未出现任何问题。说明主程序也没有篡改存储的数据。所有实验均未发生量产时出现的问题,经详细梳理所有实验的过程,发现实验过程与量产过程唯一的差别之处在于:实验对NAND FLASH的Erase/Write操作是同一块机芯板、测试平台上完成的,而量产时这个操作是在不同的机芯板、测试平台上完成的。那么在量产由于

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论