您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > nandflash的参数和兼容探讨
nandflash的参数和兼容探讨长虹网络科技蒋晓东2015.01.06一、常见nandflash数据存储结构二、常见nandflash参数三、nandflash的启动流程四、生产文件,升级文件的生成五、兼容性的探讨常见nandflash数据存储结构Flashsize=128MPagesize=2048Blocksize=128KOobsize=64/128。Block0Block1023page0page1page62page63page0page1page62page63常见nandflash数据存储结构Pagesize=2048Oobsize=64/128Page0OobOobsize通常根据页的大小,按照每512页字节页多少个oob字节来计算。Oobsize=64:8Byteoob/512Bytepage,oob=(2048/512)*8=64Oobsize=128:16Byteoob/512Bytepage,oob=(2048/512)*8=64常见nandflash数据存储结构Page区:也叫main区,用于正常数据的存储。Oob区:也叫spare区,用于存储一些附加信息,如坏块标记、MainEcc、SpareEcc,以及用户附加数据(与具体的文件系统和平台有关有关)。Pagesize大于512Byte,被称作largeblock,反之叫smallblock。约定俗成,smallblock的nand,坏块标记在oob的byte5,而largeblock的nandflash在oob的byte0,只要这位不是0XFF,就认为是坏块。坏块标记,是一块坏的标记,而一块有许多页,那么坏块标记是放在哪个页的oob里面的呢?不同nandflash就有不同的规定,有的是标记在坏块的第一个页(或者是第二个页,有的是标记在一个块内的最后一页或倒数第二页。常见nandflash数据存储结构Ecc的存放:ECC数据以及大小和nandflash的X-bitECC参数有关,和具体的芯片方案使用的ECC算法(一般都是硬件实现)有关。1-bitECC:1bitECC/512Byte4-bitECC:4bitECC/512Byte8-bitECC:8bitECC/512ByteBCH目前通常以512Byte或者1024Byte为单位处理BCH-4:7Byte/512Byte(每512字节能纠错4位)BCH-8:14Byte/512Byte(每512字节能纠错8位)BCH-16:27Byte/512Byte(每512字节能纠错16位)HammingECC:3Byte/512Byte(每512字节能只能纠错1位)HammingECC:3Byte/512ByteBCH-4:7Byte/512ByteBCH-8:14Byte/512Byte常见nandflash数据存储结构Organization:x8I/O,Input/OutputBusWidth:8-bits位宽PageSize:(withoutsparearea)常见nandflash参数PlaneSize:(withoutsparearea):PlaneNumber:SpareAreaSize:(byte/512byte)InternalChipNumber:BlockSize:(withoutsparearea)Celltype:2Level的是SLCnandflash,其它全都是MLC一个cell中存储一个bit的叫SLCnandflash,存储多个的叫MLCnandflash。Numberofsimultaneouslyprogrammedpages:ECCLevel:1bit/512bytes,2bit/512bytes4bit/512bytes,8bit/512bytes常见nandflash参数ManufacturerCode:Spansion是01h,每个厂家都不一样。DeviceIdentifier:比如dah,一般来说不同厂家生产的相同规格的flash,这个编号是相同的。主芯片对nandflash的控制是通过cpu上的Nandflash控制器来完成的。如果从Nandflash启动,那么CPU上电会自动将nandflash第一块的一小段(4K)搬到cpu内部器件上,再将其地址映射到启动地址空间上,先运行这段代码。完成CPU初始化,外部SDRAM初始化,Nandflash控制器初始化等基本功能;将Nandflash上剩余的u-boot代码拷贝到SDRAM中;跳到外部的SDRAM中来运行u-boot代码,这样,U-boot就启动了。nandflash的启动流程cfe(u-boot):博通平台主要是通过BBS调试口,通过BBS工具软件写进flash的,原始文件是不带oob内容的,是在写入的过程中有工具软件自动生成后写入flash的。其他文件:非ubi分区的文件,原始文件也不带oob内容,通过cfe,在cfe下写入flash时自动生成的。ubi分区的文件,会根据块大小,页大小不同生成不同的原始文件,原始文件也不带oob内容,是通过内核(kernel),在文件系统下写入flash时自动生成的。以上的原始文件生成的原始文件便也作为升级文件。生产文件,在以上的基础上,在机器进入进入文件后,使用nanddump命令,将flash各分区的物理内容(包含oob区内容),读出来。再按编程器的要求,合并成生产写程的文件。要能正确的启动,同一套软件,必须保证BBS、CFE、kernel、fs对flash的ECC算法一致。nandflash生产文件、升级文件的生成介绍以上过程主要就是来探讨兼容。1、BusWidth、InternalChipNumber、Celltype如果这几个参数不一样,可能硬件上也都不一样了,就谈不上兼容了。2、PageSize、BlockSize不同的话,生成的原始文件也不相同,因此也没法兼容。3、Plane、Numberofsimultaneouslyprogrammedpages这几个不太清楚是否有影响。4、SpareAreaSize、ECCLevel这两个不同可能在一些情况下做到一定程度的兼容。Nandflash兼容性的探讨仅仅ECCleve不同的兼容:在物理上,低等级的ECCleve(比如1bitecc)是兼容高等级ECCleve,也就是说可以把1bitecc当做4bitecc来使用。如果硬件上分别配置的话,软件可以不做修改,但生产文件不一样,因为会根据不同的硬件配置采用不同的ECC算法,产生不一样的OOB区数据。如果硬件上都配置成高等级ECCleve(比如4bitecc),则要看低等级的ECCleve(比如1bitecc),采用高等级ECCleve的ecc算法所产生的校验位是否能够在OOB区放得下。同时可能软件也需要修改,不同平台可能不一样。博通平台不需要修改。Nandflash兼容性的探讨仅仅SpareAreaSize(OOBsize)不同的兼容:在物理上,由于OOB大小不一样,最终得到的生产文件肯定不一样,所以肯定无法做到生产文件也兼容。把大的OOB当做小的OOB来使用。需要修改kernel代码。因为即使采用一样的ECC算法,如果OOB大小不一样,产生的校验码在OOB区放的位置是不一样的。这样就需要通过大OOBflash的厂商ID和devicesid来把这类flash作为特殊的flash处理。Nandflash兼容性的探讨ECCleve和SpareAreaSize(OOBsize)不同的兼容:可以根据上面单独不同的兼容处理来分析:比如:1bit_ECC-64bit_oobsize、4bit_ECC-64bit_oobsiz、4bit_ECC-128bit_oobsiz、8bit_ECC-128bit_oobsiz。几种的兼容就只有将ecc算法采用8bit,而oobsiz当做64bit来做兼容设计,将4bit_ECC-128bit_oobsiz、8bit_ECC-128bit_oobsiz这两种作为特殊的flash来处理。涉及到kernel、fs的修改,平台不一样可能涉及到的修改更多。Nandflash兼容性的探讨结论探讨:ECCleve的改变影响较小,一般只需要涉及到将硬件做相应的配置,重新做生产软件。而oobsize的改变影响较大,兼容的修改点更多,做兼容更难,需要做的试验更多,有些平台根本就无法实现。另外,对于目前1bit_ECC、4bit_ECC、8bit_ECC的flash如果oobsize是128的话,是一种比较特殊的情况,很多平台的软件都需要软件中增加新的规则,使用时最好评估下。以上探讨很多是在基本是在博通平台的试验,在不同平台可能不同,需要具体分析。Nandflash兼容性的探讨
本文标题:nandflash的参数和兼容探讨
链接地址:https://www.777doc.com/doc-6258258 .html