版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
SC6800H平台Bootloader和Nandflash学习交流Author:车国盛Date:2012.04.11SC6800H平台Bootloader和Nandflash1内容提纲1.Bootloader简介2.为什么需要Bootloader?3.Bootloader存放在哪里?为什么?4.Bootloader运行在哪里?5.Bootloader代码构架是怎样的?6.Bootparameter如何设定的?7.Bootloader代码解读8.Nandflash简介9.Nandflash和Norflash比较10.Nandflash工作原理11.Nandflash的ECC简介12.Nandflash常用的软件管理方案13.6800H平台NandInterface简介14.6800H平台Nandflash驱动配置15.6800H平台Nandflash分区内容提纲1.Bootloader简介2Bootloader简介Bootloader就是一段小程序,它在系统上电时开始执行,初始化硬件设备、准备好软件环境,最后调用系统内核。典型的嵌入式系统Bootloader有Blob(bootloadobject)和U-boot(universalbootloader),其中U-boot支持ARM,MIPS,X86,Nios,可启动VxWorks,QNX,Linux什么是Bootloader?Bootloader简介Bootloader就是一段小程序,3为什么需要BootloaderNand与Nor的区别
Nand不能runinplace,Nand不支持即时的读写操作,需要将代码拷贝到RAM执行;Nand会有坏块,需要一个坏块管理模块,这个模块相对来说还是比较复杂的。Nand的坏块特性决定了从Nand拷贝代码到RAM是一个相对比较复杂的动作。SDRAMSDRAM需要初始化,这意味着最早的一些代码不能在SDRAM中执行,需要先在IRAM中运行;IRAM很小。为什么需要BootloaderNand与Nor的区别4
Bootloader存放在哪里?为什么?在nand的第一个block
NAND_PartTable_XXX.c配置文件NBL_OFFSET即是Bootloader的位置,可以看到是0。为什么在这里:
Nand的第一个block永远不会损坏的特性决定了可以很简单的读取这个块。Bootloader存放在哪里?为什么?在nand的第一个5
Bootloader运行在哪里?boot0运行在IRAM,boot1运行在SDRAM。boot0的运行地址可以从scatter0.scf中找到如下:ROM_EXEC0x400000000x8000{
boot0_entry.o(Reset,+First)sdram_init.o(+RO,+RW,+ZI)prod_cfg.o(+RO,+RW,+ZI)*.o(+RO,+RW)}Bootloader运行在哪里?boot0运行在IRAM,6
Bootloader运行在哪里?boot1的运行地址可以从scatter1.scf中找到如下:ROM_EXEC0x10000000x14000{
boot1_entry.o(Reset,+First)*.o(+RO,+RW)}Bootloader运行在哪里?boot1的运行地址可以从7
Bootloader代码构架是怎样的?Bootloader分两部分:boot0和boot1。boot0引导boot1,boot1引导EXEC_KERNEL_IMAGE.bin。boot0不超过16K,boot1不超过128K。boot0为什么不超过16K?(Nand第一个block永远不会坏,不做坏块管理。一个block可能是16K或者128K,为了统一处理,当16K来使用。)boot1为什么不超过128K?(暂时不确定)在scatter中boot0和boot1的大小设置为:scatter0.scf:ROM_LOAD0x400000000x4000;0x4000->16Kscatter1.scf:ROM_LOAD0x10000000x14000;0x14000->80KBootloader代码构架是怎样的?Bootloader8
Bootloader代码构架是怎样的?boot0入口地址:0x40000000(IRAM起始地址)boot0主要工作:boot0_entry.s
:
Remap->初始化SDRAM->__main->声明bootparameter并分配空间boot0_main.c
:
将boot1拷贝到SDRAM->set_pc到SDRAM执行boot1。Bootloader代码构架是怎样的?boot0入口地址:9
Bootloader代码构架是怎样的?boot1入口地址:0x01000000(SDRAM)boot1主要工作:boot1_entry.s
__main->声明bootparameter并分配空间。boot1_main.c
将EXEC_KERNEL_IMAGE.bin拷贝到SDRAM,并set_pc到SDRAM执行EXEC_KERNEL_IMAGE.bin。Kernel的运行地址:由函数PUBLICvoidcall_kernel(void){set_pc(SDRAM_BASE_ADDR);}可以看出,SDRAM_BASE_ADDR为0地址,即EXEC_KERNEL_IMAGE.bin存放的起始地址。Bootloader代码构架是怎样的?boot1入口地址:10Bootparameter如何设定的?bootparameter(nand分区表等相关信息)的设定在fdl相关代码中,该部分代码已封装。在函数BOOLEANcopyKernelImg(void)中,可以看出,从flash中读取出来bootparameter存放在bootParam中。_copyImg(ftlHandle,SDRAM_BASE_ADDR,osInfo->offset,osInfo->size,ftlPartitionInfo.sctSize)这里可以看到一部分bootparameter参数。Bootparameter如何设定的?bootparam11Bootloader代码解读主要文件:目录fdl_bootloader\bootloader\srcboot0_entry.sboot0_main.cboot1_entry.sboot1_main.cBootloader代码解读主要文件:目录fdl_bootl12NandFlash简介Flash存储器又称闪存,是一种可在线多次擦除的非易失性存储器,即掉电后数据不会丢失。Flash存储器还具有体积小、功耗低、抗振性强等优点。
Flash存储器主要分为两种:一种为Nor型Flash,另一种为Nand型Flash。Nand内部采用非线性宏单元模式,为固态大容量内存的实现提供了廉价有效的解决方案。Nand存储器具有容量较大,改写速度快等优点,适用于大量数据的存储,因而在业界得到了越来越广泛的应用。NandFlash简介Flash存储器又称闪存,是一种可在13Nandflash和Norflash比较接口比较:Nor带有SRAM接口,有足够的地址引脚来寻址,可以很容易地存取其内部的每一个字节。Nor的特点是芯片内执行(XIP,eXecuteInPlace),这样应用程序可以直接在Norflash内运行,可以不把代码读到系统RAM中。例如uboot中的ro段可以直接在Norflash上运行,只需要把rw和zi段拷贝到RAM中运行即可。Nand器件使用复杂的I/O口来串行地存取数据,I/O引脚用来传送控制、地址和数据信息,由于时序较为复杂,所以一般CPU集成Nand控制器。Nand读和写操作采用512字节的块,这一点有点像硬盘管理此类操作。Nand是非线性存储器,不支持eXecuteInPlace。Nandflash和Norflash比较接口比较:14Nandflash和Norflash比较容量和成本比较:相比起Nand来说,Nor的容量要小,一般在1-16MByte左右,一些新工艺采用了芯片叠加技术可以把Nor的容量做得大一些。在价格方面,Nor相比Nand来说要高一些。Nand生产过程更为简单,结构可以在给定的模具尺寸内提供更高的容量,这样也就相应地降低了价格。Nandflash和Norflash比较容量和成本比较:15Nandflash和Norflash比较其他方面如可靠性,耐用性等方面的比较,在这里就不一一详述了。Nandflash和Norflash比较其他方面如可靠性16Nandflash工作原理-组成结构Nand的数据是以bit的方式保存在memorycell,一般来说,一个cell中只能存储一个bit。这些cell以8个或者16个为单位,连成bitline,形成所谓的byte(x8)/word(x16),这就是NandDevice的位宽(当然还有32bit或更大的位宽的)。若干个Line会再组成Page。若干个Page组成block。若干个block组成Plane。若干个Plane组成Device。Nandflash工作原理-组成结构Nand的数据是以bi17Nandflash工作原理-组成结构这里以三星的Nand型号K9F1208为例子说明Nand的组成结构。Nandflash工作原理-组成结构这里以三星的Nand型18Nandflash工作原理-组成结构对于上图的Nand芯片K9F1208:每页528Bytes:512byte(MainArea)+16byte(SpareArea)。每32个page形成一个Block(32*528B)。4096个block组成一片Nand芯片K9F1208。故总容量为4096*(32*528B)=66MB,其中的2MB是用来保存ECC校验码等额外数据的,实际中可使用的为64MB。说明:这只是针对芯片K9F1208的组成结构,不同的芯片可以根据datasheet确定。Nandflash工作原理-组成结构对于上图的Nand芯片19Nandflash工作原理-组成结构对于上图的Nand芯片K9F1208:1Page=528Byte,其中512byte为MainArea,16byte为SpareArea。1Block=32Page*528Byte。1Device=4096(块)*32(页)*528(字节)*8(位)=528Mbit=66Mbyte总容量为66Mbyte,其中的2Mbyte是用来保存ECC校验码等额外数据的,实际中可使用的为64Mbyte。说明:这只是针对芯片K9F1208的组成结构,不同的芯片可以根据datasheet确定。Nandflash工作原理-组成结构对于上图的Nand芯片20Nandflash工作原理-组成结构Page分为main和spare区。main是用来保存数据的,spare区一般用来标记坏块以及保存对main区数据的ECC校验码等。spare区大小:(每512+16)byte就有16byte作为spare区。spare区这16byte格式:不同厂家的格式可能有所区别,没有统一的标准格式。Nandflash工作原理-组成结构Page分为main和21Nandflash工作原理-组成结构以下是spare区的一个例子:LSN0LSN1LSN2RESERVEDRESERVEDBIECC0ECC1ECC2S-ECC0S-ECC1RESERVEDRESERVEDRESERVEDRESERVEDRESERVED其中:LSN:LogicalSectorNumber(跟坏块管理有关)ECCa,ECCb,ECCc:ECCcodeforMainareadata(ErrorCheckingandCorrection)S_ECCa,S_ECCb:ECCcodeforLSNdataBI:BadblockInformationNandflash工作原理-组成结构以下是spare区的一22Nandflash工作原理-寻址刚才算的容量是有64Mbyte的空间,225bit<64Mbyte<226bit
也就是说需要26位地址传送,可是看Nand的原理图发现有IO0-IO7,它是怎么寻址的呢?Nandflash工作原理-寻址刚才算的容量是有64Mby23Nandflash工作原理-寻址看看下面完整的ArrayOrganizationNandflash工作原理-寻址看看下面完整的Array24Nandflash工作原理-寻址原来Nand并不是直接通过里面的存储物理层,而是有一个专门的页寄存器来管理的。不论是什么操作都要首先通过pageregsiter。从上图来看,A0-A7是页内寻址,也叫列寻址,也就是512寻址,不过A0-A7才8位,最大也就寻址256?实质上还有一位A8,A8是由Nand里面的某个硬件电路根据相关的命令而置为1或者0,这不用软件来操作。例如说要寻址0~255字节,这样的话8位IO搞定了,这时候硬件电路就会把A8置为0;如果说要寻址第484字节,8位就不够了,硬件电路就会把A8置1,完成所谓的第484个字节寻址。484的二进制是111100100,需要9位才行,A8此时就充当第9位,其余8位还是由IO完成的,这样就可以完成512字节内的任何寻址了。Nandflash工作原理-寻址原来Nand并不是直接通过25Nandflash工作原理-寻址A9~A25是用来进行页寻址的,也叫行寻址,4096块*32页=131072页,用A9~A25就可以搞定这么多页了。基于以上可知,A9~A25是进行多达上万页寻址的,其实还可以细分的,A9~A13是块内的32页寻址,正好5位,2的5次方=32,一块由32页组成,A14~A25是用来进行块寻址的,4096块,也足够了。其实A14~A25还可以细分,还有个叫“层”的概念。Nand还被组织成一种形式,就是把整个Nand分成若干个层(plane),每层若干块,每层里还有个528字节的页寄存器。如下图:Nandflash工作原理-寻址A9~A25是用来进行页寻26Nandflash工作原理-寻址K9F1208分4个层,每层1024块,所以说A14~A15是用于plane寻址的,A16~A25用于Block寻址。Nandflash工作原理-寻址K9F1208分4个层,每27Nandflash工作原理-指令集这里简单介绍下Nand的指令操作:Nandflash工作原理-指令集这里简单介绍下Nand的28Nandflash工作原理-坏块管理为什么会出现坏块?由于Nand的工艺不能保证Nand的MemoryArray在其生命周期中保持性能的可靠,因此,在Nand的生产中及使用过程中会产生坏块。说明:Nand的第一个Block经特殊工艺处理,默认是不会成为坏块的,常用于系统的引导。Nandflash工作原理-坏块管理为什么会出现坏块?29NandFlash工作原理-坏块管理坏块的具体表现:当编程/擦除这个块时,不能将某些位拉高,这会造成PageProgram和BlockErase操作时的错误,相应地反映到StatusRegister的相应位。NandFlash工作原理-坏块管理坏块的具体表现:30NandFlash工作原理-坏块管理坏块的种类:先天性坏块这种坏块是在生产过程中产生的,一般芯片原厂都会在出厂时都会将坏块第一个page的spare区的第6个byte标记为非0xff的值。后天性坏块这种坏块是在Nandflash使用过程中产生的,如果BlockErase或者PageProgram错误,就可以简单地将这个块作为坏块来处理,这个时候需要把坏块标记起来。为了和先天性坏块信息保持一致,将新发现的坏块的第一个page的spare区的第6个Byte标记为非0xff的值。NandFlash工作原理-坏块管理坏块的种类:31NandFlash工作原理-坏块管理坏块的处理:理解了先天性坏块和后天性坏块后,我们已明白Nand出厂时在spare区中已经反映出了坏块信息,因此,如果在擦除一个块之前,一定要先检查spare区的第6个byte是否是0xff,如果是就证明这是一个好块,可以擦除;如果是非0xff,那么就不能擦除。不过,这样处理可能会错杀伪坏块,因为在芯片操作过程中可能由于电压不稳定等偶然因素会造成Nand操作的错误。但是,为了数据的可靠性及软件设计的简单化,坏块一个也不能放过。NandFlash工作原理-坏块管理坏块的处理:32NandFlash工作原理-坏块管理错杀坏块的补救方法:如果在对一个块的某个page进行编程的时候发生了错误就要把这个块标记为坏块,首先就要把其他好的page里面的内容备份到另外一个空的好块里面,然后,把这个块标记为坏块。当发生“错杀”之后,可以在进行完页备份之后,再将这个块擦除一遍,如果BlockErase发生错误,那就证明这个块是个真正的坏块。NandFlash工作原理-坏块管理错杀坏块的补救方法:33Nandflash的ECC简介ECC的全称是ErrorCheckingandCorrection,是一种用于Nand的差错检测和修正算法。如果操作时序和电路稳定性不存在问题的话,NandFlash出错的时候一般不会造成整个Block或是Page不能读取或是全部出错,而是整个Page(例如512Bytes)中只有一个或几个bit出错。ECC能纠正1个比特错误和检测2个比特错误,而且计算速度很快,但对1比特以上的错误无法纠正,对2比特以上的错误不保证能检测。Nandflash的ECC简介ECC的全称是ErrorC34Nandflash的ECC简介ECC校验算法:ECC校验每次对256字节的数据进行操作,包含列校验和行校验。ECC纠错算法:当往NandFlash的page中写入数据的时候,每256字节生成一个ECC校验和,称之为原ECC校验和,保存到PAGE的OOB(out-of-band)数据区中。当从NandFlash中读取数据的时候,每256字节我们生成一个ECC校验和,称之为新ECC校验和。将从OOB区中读出的原ECC校验和新ECC校验和按位异或,若结果为0,则表示不存在错(或是出现了ECC无法检测的错误);若3个字节异或结果中存在11个比特位为1,表示存在一个比特错误,且可纠正;若3个字节异或结果中只存在1个比特位为1,表示OOB区出错;其他情况均表示出现了无法纠正的错误。Nandflash的ECC简介ECC校验算法:35Nandflash常用的软件管理方案NandFlash由于自身的原因,会有一些限制:1不能直接在数据上进行覆盖,必须先擦后写。2写和擦有寿命。某些块可能会用的更频繁从而导致坏块。3在出厂时会存在坏块,在使用过程中也会产生坏块。4会在读取数据时产生错误或读取失败。正是因为这些限制,NandFlash的操作相对比较复杂,因此需要通过软件将NandFlash仿真为传统的逻辑块设备,便于读擦写等操作。SC6800H平台目前支持FTL和XSR两种软件管理方案:在PDA_V2.0之前,平台使用的是XSR解决方案,在PDA_V2.0平台使用的是FTL解决方案。Nandflash常用的软件管理方案NandFlash由36Nandflash常用的软件管理方案FTL(FlashTranslationLayer)
传统的嵌入式系统一般使用FTL方案。FTL将NandFlash仿真为一个块设备使得NandFlash与其他常规块存储设备一样。FTL是处于文件系统和NandFlash设备之间一个中间层。
FTL从文件系统层收到读写操作的逻辑地址。在FTL层把这些逻辑地址映射成真正的物理地址,从而正确的进行相应操作。由于FTL创建了虚拟块进行映射管理,所以对这些虚拟块会有一些相应的软件算法,比如垃圾收集(Garbage
Collection),坏块管理(BadBlockManagement),写平衡算法(Wear-Leveling)等。这些算法有助于管理块结构和延长NandFlash的寿命。Nandflash常用的软件管理方案FTL(FlashT37Nandflash常用的软件管理方案FTL(FlashTranslationLayer)垃圾收集(Garbage
Collection)
在对数据进行修改的时候,因为没有把原来的数据清空,这样就会导致部分物理区域中的数据是无效的,即垃圾数据。通过垃圾收集技术(GarbageCollection),系统把要清零的块中的有效数据先移动到其他区域,并且改变逻辑块到物理块的映射关系,然后对整块进行清零操作。
一般垃圾收集遵循两个原则:垃圾最多(速度原则);使用的次数最少(平衡原则)。Nandflash常用的软件管理方案FTL(FlashT38Nandflash常用的软件管理方案FTL(FlashTranslationLayer)写平衡算法(Wear-LevelingAlgorithm)
一般的NandFlash能保证每个块可以擦写10万次。但是由于一些块所使用的次数会比其他块频繁,从而导致更容易出现坏块。
写平衡算法(Wear-LevelingAlgorithm)就是用于保证每个块都能得到比较均衡的使用。由于在每个块中都有一个计数器,用于记录该块被擦除的次数,所以写平衡算法会自动利用这个计数器,并将被擦除次数最少的块用于新的操作中。Nandflash常用的软件管理方案FTL(FlashT39Nandflash常用的软件管理方案FTL(FlashTranslationLayer)ErrorCorrectionCode
ECC分为硬件ECC和软件ECC。ECC使用就是纠正侦测到的数据错误,它保证了NandFlash的可靠性和数据完整性。而在NandFlash中采取的是“先写后清除”的措施,如果出现错误,原始的数据还可以使用,从而保证了数据的可恢复性。Nandflash常用的软件管理方案FTL(FlashT40Nandflash常用的软件管理方案XSR(eXtendedSectorRemapper)XSR是SAMSUNG推出的专门用于管理NandFlash的软件解决方案。XSR将NandFlash看作常规的块设备,其功能同传统的FTL一样。但XSR比FTL更加强大。XSR处于文件系统和NandFlash之间。它提供给操作系统全部的块设备功能,使得NandFlash就像一个常规的硬盘一样,能更方便管理数据。Nandflash常用的软件管理方案XSR(eXtende41Nandflash常用的软件管理方案XSR(eXtendedSectorRemapper)XSR共分为五个主要部分:1
XSR核心层(XSRCore),其中XSR核心层又可分为两个层次:
扇区转换层STL(SectorTranslationLayer)
块管理层BML(BlockManagementLayer)2操作系统适配模块层OAM(OSAdaptationModule)3平台适配模块层PAM(PlatformAdaptationModule)4底层设备驱动层LLD(LowLevelDeviceDriver)Nandflash常用的软件管理方案XSR(eXtende42Nandflash常用的软件管理方案XSR(eXtendedSectorRemapper)扇区转换层STL(SectorTranslationLayer)
STL(扇区转换层)是XSR架构中一个很重要的部分,它从事一些主要的管理任务。该层主要同扇区转换相关,将文件系统传来的逻辑扇区地址(logicalsectoraddress)转换为虚拟扇区地址(virtualsectoraddress)。
STL主要包括:地址转换(AddressTranslation),写平衡算法(NaturalWearLeveling),大块优化管理(LargeBlockOptimization),断电保护(PoweroffRecovery),允许异步/同步操作,支持多卷(SupportingMultipleVolume)等。Nandflash常用的软件管理方案XSR(eXtende43Nandflash常用的软件管理方案XSR(eXtendedSectorRemapper)BML(BlockManagementLayer)
BML将从STL层传来的虚拟地址转换为具体的物理地址。在对NandFlash进行读/写/擦除操作时。但有可能会遇到错误或者失败,而这些有错误或发生失败的块就叫做坏块。BML专门用于管理这些坏块,并且还可以对一些无效块进行管理.
BML主要包括:分区信息管理(PartitionInformationManagement),交错访问NandFlash设备(NANDDeviceInterleaving),坏块管理(BadBlockManagement),软件ECC(SoftwareECC),多卷管理(MultipleVolume
Management)等。Nandflash常用的软件管理方案XSR(eXtende44Nandflash常用的软件管理方案XSR(eXtendedSectorRemapper)LLD(LowLevelDeviceDriver)
LLD(底层设备驱动层)是所有XSR的结构层中真正同物理层接触的,即真正能够访问物理设备的层次。通过前面STL和BML的转换,LLD使用上面传来的真正的物理地址,找到需要的NandFlash空间,对它进行所需的各种操作。Nandflash常用的软件管理方案XSR(eXtende45Nandflash常用的软件管理方案XSR(eXtendedSectorRemapper)OAM(OSAdaptationModule)
OAM(操作系统适配模块层)用于接收操作系统提供的服务,并将它们作用到XSR架构中。OAM是一个相对独立的层次,当操作系统改变后,用户只需要改变OAM的配置即可。OAM会提供一些中断,时序,异步/同步标志等功能函数。Nandflash常用的软件管理方案XSR(eXtende46Nandflash常用的软件管理方案XSR(eXtendedSectorRemapper)PAM(PlatformAdaptationModule)
PAM(平台适配模块层)用于将XSR同具体的平台联系在一起,用于获取平台的相关信息或者功能。PAM同样也是独立的层次,平台改变后,用户只需改变PAM相关配置即可。这里所指的平台是由CPU,SDRAM,NandFlash等组成的系统。Nandflash常用的软件管理方案XSR(eXtende476800H平台NandInterface简介支持8/16bit宽度。支持Nand的容量不大于2Gbyte,支持3~4地址序列,若是每页大小为2kbyte,支持4~5地址序列。若是每页大小为512byte,硬件上支持4页连续读写。支持硬件ECC校验,但须由软件来纠错。支持SmallPage(512byte)和LargePage(2Kbyte)。6800H平台NandInterface简介支持8/16b486800H平台Nandflash驱动配置6800H平台推荐的memory方案是Nand+SDRAM(目前Nor+pSram方案还没有做好)。其中完成一款新的Nand驱动一般是配置一张表,即NandSpec.c中的astNandSpec[]表,对应的结构体为LLDSpec。6800H平台Nandflash驱动配置6800H平台推荐496800H平台Nandflash驱动配置结构体LLDSpec的定义为:6800H平台Nandflash驱动配置结构体LLDSpe506800H平台Nandflash驱动配置LLDSpec参数说明:6800H平台Nandflash驱动配置LLDSpec参数516800H平台Nandflash驱动配置这里特别说明一下几个参数:UINT8nBadPos;/*BadBlockInformationPoisition*/UINT8nLsnPos;/*LSNPosition*/UINT8nEccPos;/*ECCBytePosition*/UINT8nAdvance;/*thepropertyofAdvance*/UINT16nTrTime;/*read-timeofNANDdevice(unit:usec)*/UINT16nTwTime;/*write-timeofNANDdevice(unit:usec)*/UINT16nTeTime;/*erase-timeofNANDdevice(unit:usec)*/UINT16nTfTime;/*transfer-timefromNANDdevicetohost*/6800H平台Nandflash驱动配置这里特别说明一下几526800H平台Nandflash分区Nand的第一个Block是用特殊工艺生产保证其永远不会变成坏块,用来存放Bootloader。其他各个分区分成两类:BML分区和STL分区。6800H平台Nandflash分区Nand的第一个Blo536800H平台Nandflash分区分区示意图:6800H平台Nandflash分区分区示意图:546800H平台Nandflash分区BML分区:BML分区一般情况下只在程序下载时写入,在手机程序运行时该分区是只读属性。OSImagePartition、DownloadNVPartition、CalibrationPartition和MMIResourcePartition都属于BML分区。6800H平台Nandflash分区BML分区:556800H平台Nandflash分区STL分区:STL分区是在程序运行过程中可读可写的逻辑分区。RunningNVPartition和U-disk管理区都属于STL分区。用户还可以创建最多不超过2个的STL分区用作一些其他应用。6800H平台Nandflash分区STL分区:566800H平台Nandflash分区如何修改分区的大小?(1)修改smallpage的Nandflash分区在文件:Nand_PartTable_16k.c(2)修改largepage的Nandflash分区在文件:Nand_PartTable_128k.c下面的Code是Nand_PartTable_16k.c的部分配置:6800H平台Nandflash分区如何修改分区的大小?576800H平台Nandflash分区6800H平台Nandflash分区586800H平台Nandflash分区修改各分区size时需要注意:(1)修改了任何分区的大小都可能导致U盘大小的变更,一定要根据实际情况修改U盘的大小,修改地方为Makefile文件中的UDISK_SIZE或UDISK_SIZE_16800H平台Nandflash分区修改各分区size时需59Q&AQ&A60TheEnd!TheEnd!61SC6800H平台Bootloader和Nandflash学习交流Author:车国盛Date:2012.04.11SC6800H平台Bootloader和Nandflash62内容提纲1.Bootloader简介2.为什么需要Bootloader?3.Bootloader存放在哪里?为什么?4.Bootloader运行在哪里?5.Bootloader代码构架是怎样的?6.Bootparameter如何设定的?7.Bootloader代码解读8.Nandflash简介9.Nandflash和Norflash比较10.Nandflash工作原理11.Nandflash的ECC简介12.Nandflash常用的软件管理方案13.6800H平台NandInterface简介14.6800H平台Nandflash驱动配置15.6800H平台Nandflash分区内容提纲1.Bootloader简介63Bootloader简介Bootloader就是一段小程序,它在系统上电时开始执行,初始化硬件设备、准备好软件环境,最后调用系统内核。典型的嵌入式系统Bootloader有Blob(bootloadobject)和U-boot(universalbootloader),其中U-boot支持ARM,MIPS,X86,Nios,可启动VxWorks,QNX,Linux什么是Bootloader?Bootloader简介Bootloader就是一段小程序,64为什么需要BootloaderNand与Nor的区别
Nand不能runinplace,Nand不支持即时的读写操作,需要将代码拷贝到RAM执行;Nand会有坏块,需要一个坏块管理模块,这个模块相对来说还是比较复杂的。Nand的坏块特性决定了从Nand拷贝代码到RAM是一个相对比较复杂的动作。SDRAMSDRAM需要初始化,这意味着最早的一些代码不能在SDRAM中执行,需要先在IRAM中运行;IRAM很小。为什么需要BootloaderNand与Nor的区别65
Bootloader存放在哪里?为什么?在nand的第一个block
NAND_PartTable_XXX.c配置文件NBL_OFFSET即是Bootloader的位置,可以看到是0。为什么在这里:
Nand的第一个block永远不会损坏的特性决定了可以很简单的读取这个块。Bootloader存放在哪里?为什么?在nand的第一个66
Bootloader运行在哪里?boot0运行在IRAM,boot1运行在SDRAM。boot0的运行地址可以从scatter0.scf中找到如下:ROM_EXEC0x400000000x8000{
boot0_entry.o(Reset,+First)sdram_init.o(+RO,+RW,+ZI)prod_cfg.o(+RO,+RW,+ZI)*.o(+RO,+RW)}Bootloader运行在哪里?boot0运行在IRAM,67
Bootloader运行在哪里?boot1的运行地址可以从scatter1.scf中找到如下:ROM_EXEC0x10000000x14000{
boot1_entry.o(Reset,+First)*.o(+RO,+RW)}Bootloader运行在哪里?boot1的运行地址可以从68
Bootloader代码构架是怎样的?Bootloader分两部分:boot0和boot1。boot0引导boot1,boot1引导EXEC_KERNEL_IMAGE.bin。boot0不超过16K,boot1不超过128K。boot0为什么不超过16K?(Nand第一个block永远不会坏,不做坏块管理。一个block可能是16K或者128K,为了统一处理,当16K来使用。)boot1为什么不超过128K?(暂时不确定)在scatter中boot0和boot1的大小设置为:scatter0.scf:ROM_LOAD0x400000000x4000;0x4000->16Kscatter1.scf:ROM_LOAD0x10000000x14000;0x14000->80KBootloader代码构架是怎样的?Bootloader69
Bootloader代码构架是怎样的?boot0入口地址:0x40000000(IRAM起始地址)boot0主要工作:boot0_entry.s
:
Remap->初始化SDRAM->__main->声明bootparameter并分配空间boot0_main.c
:
将boot1拷贝到SDRAM->set_pc到SDRAM执行boot1。Bootloader代码构架是怎样的?boot0入口地址:70
Bootloader代码构架是怎样的?boot1入口地址:0x01000000(SDRAM)boot1主要工作:boot1_entry.s
__main->声明bootparameter并分配空间。boot1_main.c
将EXEC_KERNEL_IMAGE.bin拷贝到SDRAM,并set_pc到SDRAM执行EXEC_KERNEL_IMAGE.bin。Kernel的运行地址:由函数PUBLICvoidcall_kernel(void){set_pc(SDRAM_BASE_ADDR);}可以看出,SDRAM_BASE_ADDR为0地址,即EXEC_KERNEL_IMAGE.bin存放的起始地址。Bootloader代码构架是怎样的?boot1入口地址:71Bootparameter如何设定的?bootparameter(nand分区表等相关信息)的设定在fdl相关代码中,该部分代码已封装。在函数BOOLEANcopyKernelImg(void)中,可以看出,从flash中读取出来bootparameter存放在bootParam中。_copyImg(ftlHandle,SDRAM_BASE_ADDR,osInfo->offset,osInfo->size,ftlPartitionInfo.sctSize)这里可以看到一部分bootparameter参数。Bootparameter如何设定的?bootparam72Bootloader代码解读主要文件:目录fdl_bootloader\bootloader\srcboot0_entry.sboot0_main.cboot1_entry.sboot1_main.cBootloader代码解读主要文件:目录fdl_bootl73NandFlash简介Flash存储器又称闪存,是一种可在线多次擦除的非易失性存储器,即掉电后数据不会丢失。Flash存储器还具有体积小、功耗低、抗振性强等优点。
Flash存储器主要分为两种:一种为Nor型Flash,另一种为Nand型Flash。Nand内部采用非线性宏单元模式,为固态大容量内存的实现提供了廉价有效的解决方案。Nand存储器具有容量较大,改写速度快等优点,适用于大量数据的存储,因而在业界得到了越来越广泛的应用。NandFlash简介Flash存储器又称闪存,是一种可在74Nandflash和Norflash比较接口比较:Nor带有SRAM接口,有足够的地址引脚来寻址,可以很容易地存取其内部的每一个字节。Nor的特点是芯片内执行(XIP,eXecuteInPlace),这样应用程序可以直接在Norflash内运行,可以不把代码读到系统RAM中。例如uboot中的ro段可以直接在Norflash上运行,只需要把rw和zi段拷贝到RAM中运行即可。Nand器件使用复杂的I/O口来串行地存取数据,I/O引脚用来传送控制、地址和数据信息,由于时序较为复杂,所以一般CPU集成Nand控制器。Nand读和写操作采用512字节的块,这一点有点像硬盘管理此类操作。Nand是非线性存储器,不支持eXecuteInPlace。Nandflash和Norflash比较接口比较:75Nandflash和Norflash比较容量和成本比较:相比起Nand来说,Nor的容量要小,一般在1-16MByte左右,一些新工艺采用了芯片叠加技术可以把Nor的容量做得大一些。在价格方面,Nor相比Nand来说要高一些。Nand生产过程更为简单,结构可以在给定的模具尺寸内提供更高的容量,这样也就相应地降低了价格。Nandflash和Norflash比较容量和成本比较:76Nandflash和Norflash比较其他方面如可靠性,耐用性等方面的比较,在这里就不一一详述了。Nandflash和Norflash比较其他方面如可靠性77Nandflash工作原理-组成结构Nand的数据是以bit的方式保存在memorycell,一般来说,一个cell中只能存储一个bit。这些cell以8个或者16个为单位,连成bitline,形成所谓的byte(x8)/word(x16),这就是NandDevice的位宽(当然还有32bit或更大的位宽的)。若干个Line会再组成Page。若干个Page组成block。若干个block组成Plane。若干个Plane组成Device。Nandflash工作原理-组成结构Nand的数据是以bi78Nandflash工作原理-组成结构这里以三星的Nand型号K9F1208为例子说明Nand的组成结构。Nandflash工作原理-组成结构这里以三星的Nand型79Nandflash工作原理-组成结构对于上图的Nand芯片K9F1208:每页528Bytes:512byte(MainArea)+16byte(SpareArea)。每32个page形成一个Block(32*528B)。4096个block组成一片Nand芯片K9F1208。故总容量为4096*(32*528B)=66MB,其中的2MB是用来保存ECC校验码等额外数据的,实际中可使用的为64MB。说明:这只是针对芯片K9F1208的组成结构,不同的芯片可以根据datasheet确定。Nandflash工作原理-组成结构对于上图的Nand芯片80Nandflash工作原理-组成结构对于上图的Nand芯片K9F1208:1Page=528Byte,其中512byte为MainArea,16byte为SpareArea。1Block=32Page*528Byte。1Device=4096(块)*32(页)*528(字节)*8(位)=528Mbit=66Mbyte总容量为66Mbyte,其中的2Mbyte是用来保存ECC校验码等额外数据的,实际中可使用的为64Mbyte。说明:这只是针对芯片K9F1208的组成结构,不同的芯片可以根据datasheet确定。Nandflash工作原理-组成结构对于上图的Nand芯片81Nandflash工作原理-组成结构Page分为main和spare区。main是用来保存数据的,spare区一般用来标记坏块以及保存对main区数据的ECC校验码等。spare区大小:(每512+16)byte就有16byte作为spare区。spare区这16byte格式:不同厂家的格式可能有所区别,没有统一的标准格式。Nandflash工作原理-组成结构Page分为main和82Nandflash工作原理-组成结构以下是spare区的一个例子:LSN0LSN1LSN2RESERVEDRESERVEDBIECC0ECC1ECC2S-ECC0S-ECC1RESERVEDRESERVEDRESERVEDRESERVEDRESERVED其中:LSN:LogicalSectorNumber(跟坏块管理有关)ECCa,ECCb,ECCc:ECCcodeforMainareadata(ErrorCheckingandCorrection)S_ECCa,S_ECCb:ECCcodeforLSNdataBI:BadblockInformationNandflash工作原理-组成结构以下是spare区的一83Nandflash工作原理-寻址刚才算的容量是有64Mbyte的空间,225bit<64Mbyte<226bit
也就是说需要26位地址传送,可是看Nand的原理图发现有IO0-IO7,它是怎么寻址的呢?Nandflash工作原理-寻址刚才算的容量是有64Mby84Nandflash工作原理-寻址看看下面完整的ArrayOrganizationNandflash工作原理-寻址看看下面完整的Array85Nandflash工作原理-寻址原来Nand并不是直接通过里面的存储物理层,而是有一个专门的页寄存器来管理的。不论是什么操作都要首先通过pageregsiter。从上图来看,A0-A7是页内寻址,也叫列寻址,也就是512寻址,不过A0-A7才8位,最大也就寻址256?实质上还有一位A8,A8是由Nand里面的某个硬件电路根据相关的命令而置为1或者0,这不用软件来操作。例如说要寻址0~255字节,这样的话8位IO搞定了,这时候硬件电路就会把A8置为0;如果说要寻址第484字节,8位就不够了,硬件电路就会把A8置1,完成所谓的第484个字节寻址。484的二进制是111100100,需要9位才行,A8此时就充当第9位,其余8位还是由IO完成的,这样就可以完成512字节内的任何寻址了。Nandflash工作原理-寻址原来Nand并不是直接通过86Nandflash工作原理-寻址A9~A25是用来进行页寻址的,也叫行寻址,4096块*32页=131072页,用A9~A25就可以搞定这么多页了。基于以上可知,A9~A25是进行多达上万页寻址的,其实还可以细分的,A9~A13是块内的32页寻址,正好5位,2的5次方=32,一块由32页组成,A14~A25是用来进行块寻址的,4096块,也足够了。其实A14~A25还可以细分,还有个叫“层”的概念。Nand还被组织成一种形式,就是把整个Nand分成若干个层(plane),每层若干块,每层里还有个528字节的页寄存器。如下图:Nandflash工作原理-寻址A9~A25是用来进行页寻87Nandflash工作原理-寻址K9F1208分4个层,每层1024块,所以说A14~A15是用于plane寻址的,A16~A25用于Block寻址。Nandflash工作原理-寻址K9F1208分4个层,每88Nandflash工作原理-指令集这里简单介绍下Nand的指令操作:Nandflash工作原理-指令集这里简单介绍下Nand的89Nandflash工作原理-坏块管理为什么会出现坏块?由于Nand的工艺不能保证Nand的MemoryArray在其生命周期中保持性能的可靠,因此,在Nand的生产中及使用过程中会产生坏块。说明:Nand的第一个Block经特殊工艺处理,默认是不会成为坏块的,常用于系统的引导。Nandflash工作原理-坏块管理为什么会出现坏块?90NandFlash工作原理-坏块管理坏块的具体表现:当编程/擦除这个块时,不能将某些位拉高,这会造成PageProgram和BlockErase操作时的错误,相应地反映到StatusRegister的相应位。NandFlash工作原理-坏块管理坏块的具体表现:91NandFlash工作原理-坏块管理坏块的种类:先天性坏块这种坏块是在生产过程中产生的,一般芯片原厂都会在出厂时都会将坏块第一个page的spare区的第6个byte标记为非0xff的值。后天性坏块这种坏块是在Nandflash使用过程中产生的,如果BlockErase或者PageProgram错误,就可以简单地将这个块作为坏块来处理,这个时候需要把坏块标记起来。为了和先天性坏块信息保持一致,将新发现的坏块的第一个page的spare区的第6个Byte标记为非0xff的值。NandFlash工作原理-坏块管理坏块的种类:92NandFlash工作原理-坏块管理坏块的处理:理解了先天性坏块和后天性坏块后,我们已明白Nand出厂时在spare区中已经反映出了坏块信息,因此,如果在擦除一个块之前,一定要先检查spare区的第6个byte是否是0xff,如果是就证明这是一个好块,可以擦除;如果是非0xff,那么就不能擦除。不过,这样处理可能会错杀伪坏块,因为在芯片操作过程中可能由于电压不稳定等偶然因素会造成Nand操作的错误。但是,为了数据的可靠性及软件设计的简单化,坏块一个也不能放过。NandFlash工作原理-坏块管理坏块的处理:93NandFlash工作原理-坏块管理错杀坏块的补救方法:如果在对一个块的某个page进行编程的时候发生了错误就要把这个块标记为坏块,首先就要把其他好的page里面的内容备份到另外一个空的好块里面,然后,把这个块标记为坏块。当发生“错杀”之后,可以在进行完页备份之后,再将这个块擦除一遍,如果BlockErase发生错误,那就证明这个块是个真正的坏块。NandFlash工作原理-坏块管理错杀坏块的补救方法:94Nandflash的ECC简介ECC的全称是ErrorCheckingandCorrection,是一种用于Nand的差错检测和修正算法。如果操作时序和电路稳定性不存在问题的话,NandFlash出错的时候一般不会造成整个Block或是Page不能读取或是全部出错,而是整个Page(例如512Bytes)中只有一个或几个bit出错。ECC能纠正1个比特错误和检测2个比特错误,而且计算速度很快,但对1比特以上的错误无法纠正,对2比特以上的错误不保证能检测。Nandflash的ECC简介ECC的全称是ErrorC95Nandflash的ECC简介ECC校验算法:ECC校验每次对256字节的数据进行操作,包含列校验和行校验。ECC纠错算法:当往NandFlash的page中写入数据的时候,每256字节生成一个ECC校验和,称之为原ECC校验和,保存到PAGE的OOB(out-of-band)数据区中。当从NandFlash中读取数据的时候,每256字节我们生成一个ECC校验和,称之为新ECC校验和。将从OOB区中读出的原ECC校验和新ECC校验和按位异或,若结果为0,则表示不存在错(或是出现了ECC无法检测的错误);若3个字节异或结果中存在11个比特位为1,表示存在一个比特错误,且可纠正;若3个字节异或结果中只存在1个比特位为1,表示OOB区出错;其他情况均表示出现了无法纠正的错误。Nandflash的ECC简介ECC校验算法:96Nandflash常用的软件管理方案NandFlash由于自身的原因,会有一些限制:1不能直接在数据上进行覆盖,必须先擦后写。2写和擦有寿命。某些块可能会用的更频繁从而导致坏块。3在出厂时会存在坏块,在使用过程中也会产生坏块。4会在读取数据时产生错误或读取失败。正是因为这些限制,NandFlash的操作相对比较复杂,因此需要通过软件将NandFlash仿真为传统的逻辑块设备,便于读擦写等操作。SC6800H平台目前支持FTL和XSR两种软件管理方案:在PDA_V2.0之前,平台使用的是XSR解决方案,在PDA_V2.0平台使用的是FTL解决方案。Nandflash常用的软件管理方案NandFlash由97Nandflash常用的软件管理方案FTL(FlashTranslationLayer)
传统的嵌入式系统一般使用FTL方案。FTL将NandFlash仿真为一个块设备使得NandFlash与其他常规块存储设备一样。FTL是处于文件系统和NandFlash设备之间一个中间层。
FTL从文件系统层收到读写操作的逻辑地址。在FTL层把这些逻辑地址映射成真正的物理地址,从而正确的进行相应操作。由于FTL创建了虚拟块进行映射管理,所以对这些虚拟块会有一些相应的软件算法,比如垃圾收集(Garbage
Collection),坏块管理(BadBlockManagement),写平衡算法(Wear-Leveling)等。这些算法有助于管理块结构和延长NandFlash的寿命。Nandflash常用的软件管理方案FTL(FlashT98Nandflash常用的软件管理方案FTL(FlashTranslationLayer)垃圾收集(Garbage
Collection)
在对数据进行修改的时候,因为没有把原来的数据清空,这样就会导致部分物理区域中的数据是无效的,即垃圾数据。通过垃圾收集技术(GarbageCollection),系统把要清零的块中的有效数据先移动到其他区域,并且改变逻辑块到物理块的映射关系,然后对整块进行清零操作。
一般垃圾收集遵循两个原则:垃圾最多(速度原则);使用的次数最少(平衡原则)。Nandflash常用的软件管理方案FTL(FlashT99Nandflash常用的软件管理方案FTL(FlashTranslationLayer)写平衡算法(Wear-LevelingAlgorithm)
一般的NandFlash能保证每个块可以擦写10万次。但是由于一些块所使用的次数会比其他块频繁,从而导致更容易出现坏块。
写平衡算法(Wear-LevelingAlgorithm)就是用于保证每个块都能得到比较均衡的使用。由于在每个块中都有一个计数器,用于记录该块被擦除的次数,所以写平衡算法会自动利用这个计数器,并将被擦除次数最少的块用于新的操作中。Nandflash常用的软件管理方案FTL(FlashT100Nandflash常用的软件管理方案FTL(FlashTranslationLayer)ErrorCorrectionCode
ECC分为硬件ECC和软件ECC。ECC使用就是纠正侦测到的数据错误,它保证了NandFlash的可靠性和数据完整性。而在NandFlash中采取的是“先写后清除”的措施,如果出现错误,原始的数据还可以使用,从而保证了数据的可恢复性。Nandflash常用的软件管理方案FTL(FlashT101Nandflash常用的软件管理方案XSR(eXtendedSectorRemapper)XSR是SAMSUNG推出的专门用于管理NandFlash的软件解决方案。XSR将NandFlash看作常规的块设备,其功能同传统的FTL一样。但XSR比FTL更加强大。XSR处于文件系统和NandFlash之间。它提供给操作系统全部的块设备功能,使得NandFlash就像一个常规的硬盘一样,能更方便管理数据。Nandflash常用的软件管理方案XSR(eXtende102Nandflash常用的软件管理方案XSR(eXtendedSectorRemapper)XSR共分为五个主要部分:1
XSR核心层(XSRCore),其中XSR核心层又可分为两个层次:
扇区转换层STL(SectorTranslationLayer)
块管理层BML(BlockManagementLayer)2操作系统适配模块层OAM(OSAdaptationModule)3平台适配模块层PAM(PlatformAdaptationModule)4底层设备驱动层LLD(LowLevelDeviceDriver)Nandflash常用的软件管理方案XSR(eXtende103Nandflash常用的软件管理方案XSR(eXtendedSectorRemapper)扇区转换层STL(SectorTranslationLayer)
STL(扇区转换层)是XSR架构中一个很重要的部分,它从事一些主要的管理任务。该层主要同扇区转换相关,将文件系统传来的逻辑扇区地址(logicalsectoraddress)转换为虚拟扇区地址(virtualsectoraddress)。
STL主要包括:地址转换(AddressTranslation),写平衡算法(NaturalWearLeveling),大块优化管理(LargeBlockOptimization),断电保护(PoweroffRecovery),允许异步/同步操作,支持多卷(SupportingMultipleVolume)等。Nandflash常用的软件管理方案XSR(eXtende104Nandflash常用的软件管理方案XSR(eXtendedSectorRemapper)BML(BlockManagementLayer)
BML将从STL层传来的虚拟地址转换为具体的物理地址。在对NandFlash
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 45074-2024公共机构废旧商品回收体系管理规范
- 课堂纪律与规范管理措施计划
- 许昌学院《数据库原理与技术实验》2023-2024学年第一学期期末试卷
- 融资渠道的选择与管理计划
- 生物学科资源共享平台建设计划
- 项目启动会议总结计划
- 期权开仓授权协议三篇
- 餐饮行业服务质量提升的个人计划
- 信阳师范大学《数据结构实验》2021-2022学年第一学期期末试卷
- 西南医科大学《单片机原理与应用》2022-2023学年第一学期期末试卷
- 宋小宝杨树林宋晓峰小品《甄嬛后传》年会台词剧本完整版欢乐喜剧人
- 新生儿科医师晋升副高(正高)职称病例分析专题报告三篇
- (完整版)小学生24点习题大全(含答案)
- 山羊胚胎生产及冷冻保存技术规范
- 长沙高铁南站广场规划方案
- 《银行厅堂管理》课件2
- 有限空间作业台账
- (完整word版)现代汉语常用词表
- 医德医风考试试题及答案
- 直肠癌放疗的护理
- 危险化学品安全评估表
评论
0/150
提交评论