




已阅读5页,还剩56页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
SC6800HBootloader和Nandflash学习交流 Author 车国盛Date 2012 04 11 内容提纲 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分区 Bootloader简介 Bootloader就是一段小程序 它在系统上电时开始执行 初始化硬件设备 准备好软件环境 最后调用系统内核 典型的嵌入式系统Bootloader有Blob bootloadobject 和U boot universalbootloader 其中U boot支持ARM MIPS X86 Nios 可启动VxWorks QNX Linux 什么是Bootloader 为什么需要Bootloader Nand与Nor的区别Nand不能runinplace Nand不支持即时的读写操作 需要将代码拷贝到RAM执行 Nand会有坏块 需要一个坏块管理模块 这个模块相对来说还是比较复杂的 Nand的坏块特性决定了从Nand拷贝代码到RAM是一个相对比较复杂的动作 SDRAMSDRAM需要初始化 这意味着最早的一些代码不能在SDRAM中执行 需要先在IRAM中运行 IRAM很小 Bootloader存放在哪里 为什么 在nand的第一个blockNAND PartTable XXX c配置文件NBL OFFSET即是Bootloader的位置 可以看到是0 为什么在这里 Nand的第一个block永远不会损坏的特性决定了可以很简单的读取这个块 Bootloader运行在哪里 boot0运行在IRAM boot1运行在SDRAM boot0的运行地址可以从scatter0 scf中找到如下 ROM EXEC0 x400000000 x8000 boot0 entry o Reset First sdram init o RO RW ZI prod cfg o RO RW ZI o RO RW Bootloader运行在哪里 boot1的运行地址可以从scatter1 scf中找到如下 ROM EXEC0 x10000000 x14000 boot1 entry o Reset First o RO RW 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 LOAD0 x400000000 x4000 0 x4000 16Kscatter1 scf ROM LOAD0 x10000000 x14000 0 x14000 80K Bootloader代码构架是怎样的 boot0入口地址 0 x40000000 IRAM起始地址 boot0主要工作 boot0 entry s Remap 初始化SDRAM main 声明bootparameter并分配空间boot0 main c 将boot1拷贝到SDRAM set pc到SDRAM执行boot1 Bootloader代码构架是怎样的 boot1入口地址 0 x01000000 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存放的起始地址 Bootparameter如何设定的 bootparameter nand分区表等相关信息 的设定在fdl相关代码中 该部分代码已封装 在函数BOOLEANcopyKernelImg void 中 可以看出 从flash中读取出来bootparameter存放在bootParam中 copyImg ftlHandle SDRAM BASE ADDR osInfo offset osInfo size ftlPartitionInfo sctSize 这里可以看到一部分bootparameter参数 Bootloader代码解读 主要文件 目录fdl bootloader bootloader srcboot0 entry sboot0 main cboot1 entry sboot1 main c NandFlash简介 Flash存储器又称闪存 是一种可在线多次擦除的非易失性存储器 即掉电后数据不会丢失 Flash存储器还具有体积小 功耗低 抗振性强等优点 Flash存储器主要分为两种 一种为Nor型Flash 另一种为Nand型Flash Nand内部采用非线性宏单元模式 为固态大容量内存的实现提供了廉价有效的解决方案 Nand存储器具有容量较大 改写速度快等优点 适用于大量数据的存储 因而在业界得到了越来越广泛的应用 Nandflash和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比较 容量和成本比较 相比起Nand来说 Nor的容量要小 一般在1 16MByte左右 一些新工艺采用了芯片叠加技术可以把Nor的容量做得大一些 在价格方面 Nor相比Nand来说要高一些 Nand生产过程更为简单 结构可以在给定的模具尺寸内提供更高的容量 这样也就相应地降低了价格 Nandflash和Norflash比较 其他方面如可靠性 耐用性等方面的比较 在这里就不一一详述了 Nandflash工作原理 组成结构 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型号K9F1208为例子说明Nand的组成结构 Nandflash工作原理 组成结构 对于上图的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芯片K9F1208 1Page 528Byte 其中512byte为MainArea 16byte为SpareArea 1Block 32Page 528Byte 1Device 4096 块 32 页 528 字节 8 位 528Mbit 66Mbyte总容量为66Mbyte 其中的2Mbyte是用来保存ECC校验码等额外数据的 实际中可使用的为64Mbyte 说明 这只是针对芯片K9F1208的组成结构 不同的芯片可以根据datasheet确定 Nandflash工作原理 组成结构 Page分为main和spare区 main是用来保存数据的 spare区一般用来标记坏块以及保存对main区数据的ECC校验码等 spare区大小 每512 16 byte就有16byte作为spare区 spare区这16byte格式 不同厂家的格式可能有所区别 没有统一的标准格式 Nandflash工作原理 组成结构 以下是spare区的一个例子 LSN0LSN1LSN2RESERVEDRESERVEDBIECC0ECC1ECC2S ECC0S ECC1RESERVEDRESERVEDRESERVEDRESERVEDRESERVED其中 LSN LogicalSectorNumber 跟坏块管理有关 ECCa ECCb ECCc ECCcodeforMainareadata ErrorCheckingandCorrection S ECCa S ECCb ECCcodeforLSNdataBI BadblockInformation Nandflash工作原理 寻址 刚才算的容量是有64Mbyte的空间 225bit 64Mbyte 226bit也就是说需要26位地址传送 可是看Nand的原理图发现有IO0 IO7 它是怎么寻址的呢 Nandflash工作原理 寻址 看看下面完整的ArrayOrganization Nandflash工作原理 寻址 原来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工作原理 寻址 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工作原理 寻址 K9F1208分4个层 每层1024块 所以说A14 A15是用于plane寻址的 A16 A25用于Block寻址 Nandflash工作原理 指令集 这里简单介绍下Nand的指令操作 Nandflash工作原理 坏块管理 为什么会出现坏块 由于Nand的工艺不能保证Nand的MemoryArray在其生命周期中保持性能的可靠 因此 在Nand的生产中及使用过程中会产生坏块 说明 Nand的第一个Block经特殊工艺处理 默认是不会成为坏块的 常用于系统的引导 NandFlash工作原理 坏块管理 坏块的具体表现 当编程 擦除这个块时 不能将某些位拉高 这会造成PageProgram和BlockErase操作时的错误 相应地反映到StatusRegister的相应位 NandFlash工作原理 坏块管理 坏块的种类 先天性坏块这种坏块是在生产过程中产生的 一般芯片原厂都会在出厂时都会将坏块第一个page的spare区的第6个byte标记为非0 xff的值 后天性坏块这种坏块是在Nandflash使用过程中产生的 如果BlockErase或者PageProgram错误 就可以简单地将这个块作为坏块来处理 这个时候需要把坏块标记起来 为了和先天性坏块信息保持一致 将新发现的坏块的第一个page的spare区的第6个Byte标记为非0 xff的值 NandFlash工作原理 坏块管理 坏块的处理 理解了先天性坏块和后天性坏块后 我们已明白Nand出厂时在spare区中已经反映出了坏块信息 因此 如果在擦除一个块之前 一定要先检查spare区的第6个byte是否是0 xff 如果是就证明这是一个好块 可以擦除 如果是非0 xff 那么就不能擦除 不过 这样处理可能会错杀伪坏块 因为在芯片操作过程中可能由于电压不稳定等偶然因素会造成Nand操作的错误 但是 为了数据的可靠性及软件设计的简单化 坏块一个也不能放过 NandFlash工作原理 坏块管理 错杀坏块的补救方法 如果在对一个块的某个page进行编程的时候发生了错误就要把这个块标记为坏块 首先就要把其他好的page里面的内容备份到另外一个空的好块里面 然后 把这个块标记为坏块 当发生 错杀 之后 可以在进行完页备份之后 再将这个块擦除一遍 如果BlockErase发生错误 那就证明这个块是个真正的坏块 Nandflash的ECC简介 ECC的全称是ErrorCheckingandCorrection 是一种用于Nand的差错检测和修正算法 如果操作时序和电路稳定性不存在问题的话 NandFlash出错的时候一般不会造成整个Block或是Page不能读取或是全部出错 而是整个Page 例如512Bytes 中只有一个或几个bit出错 ECC能纠正1个比特错误和检测2个比特错误 而且计算速度很快 但对1比特以上的错误无法纠正 对2比特以上的错误不保证能检测 Nandflash的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常用的软件管理方案 NandFlash由于自身的原因 会有一些限制 1不能直接在数据上进行覆盖 必须先擦后写 2写和擦有寿命 某些块可能会用的更频繁从而导致坏块 3在出厂时会存在坏块 在使用过程中也会产生坏块 4会在读取数据时产生错误或读取失败 正是因为这些限制 NandFlash的操作相对比较复杂 因此需要通过软件将NandFlash仿真为传统的逻辑块设备 便于读擦写等操作 SC6800H平台目前支持FTL和XSR两种软件管理方案 在PDA V2 0之前 平台使用的是XSR解决方案 在PDA V2 0平台使用的是FTL解决方案 Nandflash常用的软件管理方案 FTL FlashTranslationLayer 传统的嵌入式系统一般使用FTL方案 FTL将NandFlash仿真为一个块设备使得NandFlash与其他常规块存储设备一样 FTL是处于文件系统和NandFlash设备之间一个中间层 FTL从文件系统层收到读写操作的逻辑地址 在FTL层把这些逻辑地址映射成真正的物理地址 从而正确的进行相应操作 由于FTL创建了虚拟块进行映射管理 所以对这些虚拟块会有一些相应的软件算法 比如垃圾收集 GarbageCollection 坏块管理 BadBlockManagement 写平衡算法 Wear Leveling 等 这些算法有助于管理块结构和延长NandFlash的寿命 Nandflash常用的软件管理方案 FTL FlashTranslationLayer 垃圾收集 GarbageCollection 在对数据进行修改的时候 因为没有把原来的数据清空 这样就会导致部分物理区域中的数据是无效的 即垃圾数据 通过垃圾收集技术 GarbageCollection 系统把要清零的块中的有效数据先移动到其他区域 并且改变逻辑块到物理块的映射关系 然后对整块进行清零操作 一般垃圾收集遵循两个原则 垃圾最多 速度原则 使用的次数最少 平衡原则 Nandflash常用的软件管理方案 FTL FlashTranslationLayer 写平衡算法 Wear LevelingAlgorithm 一般的NandFlash能保证每个块可以擦写10万次 但是由于一些块所使用的次数会比其他块频繁 从而导致更容易出现坏块 写平衡算法 Wear LevelingAlgorithm 就是用于保证每个块都能得到比较均衡的使用 由于在每个块中都有一个计数器 用于记录该块被擦除的次数 所以写平衡算法会自动利用这个计数器 并将被擦除次数最少的块用于新的操作中 Nandflash常用的软件管理方案 FTL FlashTranslationLayer ErrorCorrectionCodeECC分为硬件ECC和软件ECC ECC使用就是纠正侦测到的数据错误 它保证了NandFlash的可靠性和数据完整性 而在NandFlash中采取的是 先写后清除 的措施 如果出现错误 原始的数据还可以使用 从而保证了数据的可恢复性 Nandflash常用的软件管理方案 XSR eXtendedSectorRemapper XSR是SAMSUNG推出的专门用于管理NandFlash的软件解决方案 XSR将NandFlash看作常规的块设备 其功能同传统的FTL一样 但XSR比FTL更加强大 XSR处于文件系统和NandFlash之间 它提供给操作系统全部的块设备功能 使得NandFlash就像一个常规的硬盘一样 能更方便管理数据 Nandflash常用的软件管理方案 XSR eXtendedSectorRemapper XSR共分为五个主要部分 1XSR核心层 XSRCore 其中XSR核心层又可分为两个层次 扇区转换层STL SectorTranslationLayer 块管理层BML BlockManagementLayer 2操作系统适配模块层OAM OSAdaptationModule 3平台适配模块层PAM PlatformAdaptationModule 4底层设备驱动层LLD LowLevelDeviceDriver Nandflash常用的软件管理方案 XSR eXtendedSectorRemapper 扇区转换层STL SectorTranslationLayer STL 扇区转换层 是XSR架构中一个很重要的部分 它从事一些主要的管理任务 该层主要同扇区转换相关 将文件系统传来的逻辑扇区地址 logicalsectoraddress 转换为虚拟扇区地址 virtualsectoraddress STL主要包括 地址转换 AddressTranslation 写平衡算法 NaturalWearLeveling 大块优化管理 LargeBlockOptimization 断电保护 PoweroffRecovery 允许异步 同步操作 支持多卷 SupportingMultipleVolume 等 Nandflash常用的软件管理方案 XSR eXtendedSectorRemapper BML BlockManagementLayer BML将从STL层传来的虚拟地址转换为具体的物理地址 在对NandFlash进行读 写 擦除操作时 但有可能会遇到错误或者失败 而这些有错误或发生失败的块就叫做坏块 BML专门用于管理这些坏块 并且还可以对一些无效块进行管理 BML主要包括 分区信息管理 PartitionInformationManagement 交错访问NandFlash设备 NANDDeviceInterleaving 坏块管理 BadBlockManagement 软件ECC SoftwareECC 多卷管理 MultipleVolumeManagement 等 Nandflash常用的软件管理方案 XSR eXtendedSectorRemapper LLD LowLevelDeviceDriver LLD 底层设备驱动层 是所有XSR的结构层中真正同物理层接触的 即真正能够访问物理设备的层次 通过前面STL和BML的转换 LLD使用上面传来的真正的物理地址 找到需要的NandFlash空间 对它进行所需的各种操作 Nandflash常用的软件管理方案 XSR eXtendedSectorRemapper OAM OSAdaptationModule OAM 操作系统适配模块层 用于接收操作系统提供的服务 并将它们作用到XSR架构中 OAM是一个相对独立的层次 当操作系统改变后 用户只需要改变OAM的配置即可 OAM会提供一些中断 时序 异步 同步标志等功能函数 Nandflash常用的软件管理方案 XSR eXtendedSectorRemapper PAM PlatformAdaptationModule PAM 平台适配模块层 用于将XSR同具体的平台联系在一起 用于获取平台的相关信息或者功能 PAM同样也是独立的层次 平台改变后 用户只需改变PAM相关配置即可 这里所指的平台是由CPU SDRAM NandFlash等组成的系统 6800H平台NandInterface简介 支持8 16bit宽度 支持Nand的容量不大于2Gbyte 支持3 4地址序列 若是每页大小为2kbyte 支持4 5地址序列 若是每页大小为512byte 硬件上支持4页连续读写 支持硬件ECC校验 但须由软件来纠错 支持SmallPage 512byte 和LargePage 2Kbyte 6800H平台Nandflash驱动配置 6800H平台推荐的memory方案是Nand SDRAM 目前Nor pSram方案还没有做好 其中完成一款新的Nand驱动一般是配置一张表 即NandSpec c中的astNandSpec 表 对应的结构体为LLDSpec 6800H平台Na
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 工程征用土地合同
- 有限公司内部股权转让协议
- 2025-2026年北京市中考英语综合提高练习试卷3
- DB43-T 3160-2024 新能源汽车废旧动力蓄电池综合利用规范企业评价方法
- 2025企业租赁合同诉讼状范本
- 生长发育规律授课田甜工作单位山东医学高等专科学校84课件
- 机电设备安装冷却系统方案
- 水粉基础知识课件
- 建筑工程项目施工人员健康管理方案
- 输电线路系统集成与调度方案
- TCCSAS 007-2020化工企业变更管理实施规范
- 个人劳动合同书范本
- T-CESA 1270.2-2023 信息技术 开源治理 第2部分:企业治理评估模型
- 软件对接方案
- 普通高中语文课程标准解读课件
- 有机化学第十版
- 肾功能不全患者合理用药课件
- 纤维支气管镜(可弯曲支气管镜)临床应用指南(草案)
- 一次调频综合指标计算及考核度量方法
- 车辆段平面布置设计
- 数字媒体艺术概论-第一章-概述
评论
0/150
提交评论