NandFlash详解与高通驱动解析

4星 · 超过85%的资源 需积分: 50 13 下载量 133 浏览量 更新于2024-09-17 收藏 724KB DOC 举报
"本文主要介绍了Nand Flash的基本概念,包括NOR Flash与Nand Flash的对比,以及SLC和MLC的区别,并简要提到了高通的Nand Flash驱动相关知识。" Nand Flash是一种非易失性存储技术,广泛应用于移动设备、嵌入式系统和固态硬盘等。它具有成本低、容量大、读取速度快等优点,但相对于NOR Flash,写入速度较慢。NOR Flash和Nand Flash在结构和性能上有显著差异: 1. **NOR Flash与Nand Flash对比**: - **速度**:NOR Flash的读取速度较快,适合执行代码,而Nand Flash的读取速度较慢,但写入速度相对较快。 - **执行代码能力**:NOR Flash可以直接挂载在CPU地址线上运行代码,无需额外的RAM,而Nand Flash则需要通过Bootloader将代码加载到RAM中执行。 - **错误校验**:Nand Flash需要Bad Block检测和ECC(Error Correction Code)校验,以识别和纠正存储错误,而NOR Flash通常不包含这些功能。 - **编程单位**:Nand Flash的最小编程单位是Page,NOR Flash可以对单个位进行编程。 2. **SLC与MLC**: - **SLC(Single-Level Cell)**:每个存储单元只能存储1位数据(0或1)。它的写入速度和读取速度较快,寿命较长,因为每个单元的应力较小,但成本较高。 - **MLC(Multi-Level Cell)**:每个存储单元可以存储2位数据,即4种状态(00, 01, 10, 11)。这增加了存储密度,降低了成本,但也使得读写操作更复杂,速度较慢,且寿命相对SLC短。 3. **高通Nand Flash驱动**: 高通的Nand Flash驱动是针对其处理器平台设计的,用于管理Nand Flash设备的读写操作,包括初始化、Bad Block检测、ECC校验、Page编程和Block擦除等功能。这种驱动通常包含了硬件加速器来提高读写性能,以及对Nand Flash特性的优化,如坏块管理策略,以确保数据的可靠性和设备的长期稳定性。 在实际应用中,选择NOR Flash还是Nand Flash,以及SLC或MLC,取决于具体需求,如读写速度、成本、存储容量和耐久性等。对于需要快速启动和直接执行代码的系统,NOR Flash可能是更好的选择;而在追求低成本和大容量存储时,Nand Flash(尤其是MLC或TLC)更具优势。高通的Nand Flash驱动则为基于高通处理器的系统提供了高效、可靠的Nand Flash管理方案。
2009-05-08 上传
深入剖析Qualcomm 手机开机的整个过程,即从按下开 机键一直到出现待机界面,Qualcomm 的手机软件在整个流程中究竟完成了哪些 工作。本文的主要目标是理清手机的初始化流程,并为今后Amoi 定做初始化工 作提供一个参考。 关键字:开机、Rex、TMC、ui_task、CoreApp 一、开机的简要流程分析 Qualcomm 的平台软件支持两种启动方式:一种是Nor Flash 启动方式,另 外一种就 是 Nand Flash 启动方式。Nor Flash 启动方式就相当于硬件直接找到一个入口点 开始执行代码,相比较而言会比较简单,且 Amoi 没有采用此种方式,所以本 文对于这种方式不做详细分析。另外一种就是Nand Flash 启动方式,这种方式 和PC 的启动方式比较相像,也是Amoi 采用的Boot 方式,下面将详细分析在此 方式下面的开机过程。 按下开机键之后,将产生一个时钟中断,从而通知AMSS 主芯片的Boot Load 硬件去将放置于Nand Flash 上面的第一个Block(8K)里面的Boot 代码Copy 到内核内存(RAM,这个内存应该是CPU 自带的内存,同后面提到的SDRAM 有 一定区别,可以把它当作CPU 的Cache)的0xFFFF0000 地址,并开始执行Boot 代码。Boot 的主要任务是完成整个系统的硬件初始化工作(类似于PC 上面的 BIOS 所完成的硬件自检工作,至于Boot 的详细工作机制,后文会有详细描述)。 Boot 所完成的工作里面,最重要的一件事就是会将整个手机软件代码(AMSS 软 件包)拷贝到SDRAM 中,并最后将控制权交给AMSS 软件。说白了,就是Boot 执行完成之后,代码的执行点将由Boot 跳转到AMSS软件的的入口点函数main(). (此函数在mobile.c 里实现)。 代码运行到了Main()之后,在这个函数里面将完成操作系统(rex)的初始化 工作,其实现方法是调用 rex_init()。Rex_init()完成的工作很简单: 1.完成操作系统必要的一些数据结构(timer 链表、任务链表等))的初始化 之外; 2.接下来,它创建了三个任务,分别是:rex_idle_task、rex_dpc_task 和 tmc_task。 Idle 任务没什么好解释的