《eMMC存储简介.pptx》由会员分享,可在线阅读,更多相关《eMMC存储简介.pptx(31页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、eMMC存储简介只是简介 囧沙贝2012.9.21eMMC(Embedded Multi Media Card)嵌入式多媒体卡MMC协会所订立的内嵌式存储器标准规格主要应用于智能手机和移动嵌入式产品什么是eMMC1、eMMC拥有存储以及取代Nor Flash的开机功能,开机速度比传统的MCP要快几倍2、eMMC可以很好的解决对MLC和TLC的管理,ECC除错机制、区块管理、平均抹写储存区块技术、指令管理、低功耗管理等。3、厂商不用再为不同的NAND Flash重新设计规格、不用处理NAND Flash相容性和管理问题、缩短新品上市周期、研发成本eMMC的优点eMMC 结构由一个嵌入式存储解决方
2、案组成:标准MMC封装接口主控制器(控制芯片)快闪存储器设备(NAND Flash芯片)这三部分封装在一个JEDEC(固态技术协会)标准的BGA上。接口速度高达每秒52MB,eMMC具有快速、可升级的性能。同时其接口电压可以是1.8v 或者是3.3v。eMMC的结构看图说话Core Regulator 核心稳压器eMMC的结构MemoryNAND Flash存储介质控制信号数据总线MMC I/O BlockNAND I/O BlockCore Regulator(required for 3.3v)Core Logic BlockVCCVCCQRESETVDDiCLKCMDDAT7:0Creg
3、1.I/O0 I/O7I/O0 I/O7:用于输入地址/数据/命令,输出数据,有可能16位,但高8位只用于数据2.CLECLE:Command Latch Enable,命令锁存使能,在输入命令之前,要先在模式寄存器中,设置CLE使能3.ALEALE:Address Latch Enable,地址锁存使能,在输入地址之前,要先在模式寄存器中,设置ALE使能4.CE#CE#:Chip Enable,芯片使能,在操作Nand Flash之前,要先选中此芯片,才能操作5.RE#RE#:Read Enable,读使能,在读取数据之前,要先使CE#有效。6.WE#WE#:Write Enable,写使能
4、,在写取数据之前,要先使WE#有效。7.WP#WP#:Write Protect,写保护8.R/B#R/B#:Ready/Busy Output,就绪/忙,主要用于在发送完编程/擦除命令后,检测这些操作是否完成:忙,表示编程/擦除操作仍在进行中,就绪表示操作完成.9.VccVcc:Power,电源10.VssVss:Ground,接地11.N.CN.C:Non-Connection,未定义,未连接。小常识小常识 在数据手册中,你常会看到,对于一个引脚定义,有些字母上面带一横杠的,那是说明此引脚/信号是低电平有效,比如你上面看到的RE头上有个横线,就是说明,此RE是低电平有效,此外,为了书写方便
5、,在字母后面加“#”,也是表示低电平有效,比如上面写的CE#;如果字母头上啥都没有,就是默认的高电平有效,比如上面的CLE,就是高电平有效。Nand Flash引脚(Pin)的说明1、SLC 和 MLCSLC每个存储单元只存储一个Bit数据MLC每个存储单元可以存储多个Bit数据根据电荷多少设定阀值,比如4V,可以用1234V分别表示数值2、如何识别SLC和MLC通过读取chip ID,chip ID 最少4个字节,可以更多其中第3个字节中的信息如下Bit1:0 内部芯片数 1、2、4、8Bit3:2 电平种类数 2、4、8、16Bit5:4 可同时编程页1、2、4、8Bit6 多芯片交替编程
6、是否支持 0:不支持Bit7 高速缓存编程(cache Program)是否支持 0:不支持Nand 的存储单元Nand Flash 的核心部件是 Floating Gate FET(浮置栅场效应管)NAND Flash 的擦写均是基于隧道效应:电子从源极穿过浮置栅极与硅基层之间的绝缘层,对浮置栅极充电(写数据 0)或放电(擦数据 1),Nand Flash 擦除以block为单位,写数据以page为单位。清除Flash的数据是写1,这与硬盘正好相反。Nor Flash 则反过来,电流从浮置栅极到源极,称为热电子注入NAND 存储单元硬件原理1、NAND的闪存单元比NOR要小因为NOR的每个单
7、元都需要独立的金属触点。NAND的与硬盘驱动器类似,基于扇区(页Page),也存在坏的扇区,需要ECC纠错2、因为单元小,所以NAND的写(编程)和擦除的速率快;而NOR的优点是具有随机存取和对字节执行写操作的能力,NAND的则比较慢。Nand 和 Nor 物理上的区别块(Block)是擦除操作的最小单位(相当于硬盘的扇区)一个nand flash由很多个块(Block)组成,块的大小一般是128KB,256KB,512KB页(Page)是编程操作的最小单位每个块里面又包含了很多页(page)。页的大小256B、512B、2KB、4KB每一个页,对应还有一块区域,叫做空闲区域(spare ar
8、ea)/冗余区域(redundant area),而Linux系统中,一般叫做OOBOOB(Out Of Band)。这个区域,是最初基于Nand Flash的硬件特性:数据在读写时候相对容易错误,所以为了保证数据的正确性,必须要有对应的检测和纠错机制,此机制被叫做EDC(Error Detection Code)/ECC(Error Code Correction,或者Error Checking and Correcting),所以设计了多余的区域,用于放置数据的校验值。OOB的第6个Byte标记为非0 xff时,表示坏块ECC一般每256字节生成3字节ECC校验数据。(6bit列校验+1
9、6bit行校验+2bit保留)页的编程只能顺序进行:Page1-Page2-Page3Nand Flash物理存储单元的阵列组织结构Nand Flash物理存储单元的阵列组织结构以2Gb(128MB)NAND器件为例,它由2048个Block组成,1Block=64 Page(128KB)1Page=2048Bytes+64Bytes(见下图)即128MB=2048(Block)*64(Page)*2048Bytes页寄存器(Page Register):由于Nand Flash读取和编程操作来说,一般最小单位是页,所以,nand flash在硬件设计时候,就考虑到这一特性,对于每一片,都有一
10、个对应的区域,专门用于存放,将要写入到物理存储单元中去的或者刚从存储单元中读取出来 的,一页的数据,这个数据缓存区,本质上就是一个buffer,但是只是名字叫法不同,datasheet里面叫做Page Register,此处翻译为页寄存器,实际理解为页缓存,更为恰当些。Nand Flash中的特殊硬件结构以三星的芯片为例:1、配置寄存器(NFCONF)0 x4E0000002、命令寄存器(NFCMD)0 x4E0000043、地址寄存器(NFADDR)0 x4E0000084、数据寄存器(NFDATA)0 x4E00000C5、状态寄存器(NFSTAT)0 x4E0000106、ECC校验寄存
11、器(NFECC)0 x4E000014Nand Flash中的特殊硬件结构Function1st Cycle地址周期数地址周期数2nd Cycle忙碌时可用忙碌时可用Read00h530hRead for Copy Back00h535hRead ID 90h1-ResetFFh-oPage Program80h510hTwo-Plane Page Program80h-11h81h-10hCopy-Back Program85h510hTwo-Plane Copy-Back Program85h-11h81h-10hBlock Erase60h3D0hTwo-Plane Block Eras
12、e60h-60hD0hRandom Data Input85h2-Random Data Output05h2E0hRead Status70h-0Read EDC Status7Bh-0Chip1 StatusF1h-0Chip2 StatusF2h-0Nand Flash 的命令合集(某款芯片)Nand flash的写操作叫做编程(Program),一般以页为单位的。写操作只能在空页面或者已经被擦除的页面进行(全0 xFF)擦除的步骤(以块为单位)1、发送擦除设置命令 0 x602、发送要擦除的块地址3、发送开始擦除命令 0 xD0写操作的步骤(以页为单位)1、发送写命令 0 x802、发
13、送要编程的页地址和数据(1个Page)3、发送开始写命令 0 x10NAND Flash 的编程操作(写)步骤同写操作1、发送写命令 0 x002、发送要读取的页地址3、发送开始写命令 0 x304、查看寄存器状态,R/B#为ready(1)时,可以从缓存中取数据时序图Nand Flash 的读操作以K9K8G08U0A为例此nand flash,一共有8192个块,每个块内有64页,每个页是2K+64 Bytes假设我们要访问第7000个块中的第25页中的1208字节的地址物理地址=块号块大小+页号页大小+页内地址=7000128K+252K+1208=0 x36B0CCB8(9175564
14、08)计算地址的时候计算OOB的大小吗?不计算如何计算地址1、地址周期的说明(不同的Flash可能会有不同)0 x36B0CCB8=0011 0110 1011 0000 1100 1100 1011 1000 地址:1、A7A0:1011 1000 2、A11A8:0000 1100 (A10A0:100 1011 1000:1208 页地址)3、A19A12:0000 1100(A16A11:011001:25页)4、A27A20:0110 10115、A29A28:0000 0011(A29A17:11 0110 1011 000:7000Block)A10A0:页内地址 02047;A
15、11用于表示20482112 OOBA16A11:页地址;A29A17:块地址 如何传输地址CycleI/O7I/O6I/O5I/O4I/O3I/O2I/O1I/O0FirstA7A6A5A4A3A2A1A0ColumnSecondLOWLOWLOWLOWA11A10A9A8ColumnThirdA19A18A17A16A15A14A13A12RowFourthA27A26A25A24A23A22A21A20RowfifthLOWLOWLOWLOWLOWLOWA29A28Row1、自从NAND结构被设计以来,标准规范中是允许存在坏块的,只要坏块比例小于总容量的2%就是允许的。2、坏块列表是被要
16、求的,因为NAND Flash只能执行有限次数的读和擦除次数(10w100w),所有的Flash存储器最终都会被磨损且不再能使用,坏块列表用来跟踪记录坏块。3、坏块分为两种:1)生产过程中产生的一般在该块的前两个Page的滴517字节处用非FF来标识(每页512字节)2)使用过程中产生的如果一个块在擦除整块或写一个页失败时,会被标志为坏块,并且以后不再访问如果擦除了坏块,即标识位被改为0 xff,那么在无法单独对块测试的情况下是很难重新标识的,所以坏块表(invalid block table)是很重要的Invalid Block(坏块)的管理4、嵌入式系统中对坏块的处理方式1)Skip Bl
17、ock Method(跳过坏块模式)在写入之前读取所有坏块的地址,然后写入数据,当目标地址是坏块地址时,跳过坏块,写入下一个好的块中,继续保留坏块中的标识信息。所以在程序导入执行前,要先读取OOB中的坏块信息,建立列表。Invalid Block(坏块)的管理4、嵌入式系统中对坏块的处理方式2)Reserved Block Area Method(保留块区域方式)这种烧录算法,首先决定哪些块用来做UBA(User Block Area),这些块被RBA map table记录,并保留。接下来读取OOB建立一个map到RBARBA第一第二块被用于存储列表。Map中包含了哪些保留块被用来替代坏块I
18、nvalid Block(坏块)的管理1、一般的嵌入式系统会使用NAND Flash来存储文件(file)、启动代码(boot code)、OS代码或简单的数据文件,这就需要像管理文件系统一样管理NAND FLASH。功能包括 格式化、碎片收集、磁盘整理等等。目前比较广泛的文件系统有fat、jffs2、yaffs2、ext4等等文件系统Yaffs文件系统(Yet Another Flash File System)Yaffs文件系统是一个开源的专为NAND Flash设计的文件系统,具有很好的可移植性,可以在Linux、WinCE中运行。Yaffs 对小页面(512+16Byte)支持很好,y
19、affs2对大页面支持较好(2K+64Byte)Yaffs 对文件系统上的所有内容都当做文件处理,每个文件都有一个页专门存放文件头,文件头包含了文件的模式、所有者ID、组ID、长度、文件名、Parent Object ID等,因为页的大小有限,所以对这些都有长度限制。一般都存放在OOB中文件系统字字节内容内容0511数据区域512515YAFFS TAG516坏块标志位517数据状态518、519YAFFS TAG520522后512字节的ECC校验结果1、硬盘的硬盘的组成组成一般说来,无论哪种硬盘,都是由盘片、磁头、盘片主轴、控制电机、磁头控制器、数据转换器、接口、缓存等几个部份组成。所有的
20、盘片都固定在一个旋转轴上,这个轴即盘片主轴。而所有盘片之间是绝对平行的,在每个盘片的存储面上都有一个磁头,磁头与盘片之间的距离比头发 丝的直径还小。所有的磁头连在一个磁头控制器上,由磁头控制器负责各个磁头的运动。磁头可沿盘片的半径方向动作,而盘片以每分钟数千转到上万转的速度在高 速旋转,这样磁头就能对盘片上的指定位置进行数据的读写操作。中间是起飞区,高速旋转后,磁头悬浮起来,然后移动到对应的位置读取数据硬盘的结构2、硬盘硬盘的工作的工作原理原理硬盘在逻辑上被划分为磁道、磁头以及扇区磁道由外向内0 xxx磁头由上到下0 xxx扇区由左到右1xxxx扇区头存放了3围坐标 磁道、磁头、扇区号硬盘的结
21、构1、Linux中MTD子系统在系统的硬件驱动程序和文件系统之间提供通用接口,常用的文件系统是yaffs22、MTD内存技术设备层次结构FLASH硬件驱动主要指NAND驱动Kernel/drivers/mtd/nand/MTD原始设备实际上是一种块设备,MTD字符设备的读写函数也调用原始设备的操作函数来实现Kernel/drivers/mtd/mtdcore.cMTD原始设备到具体设备之间存在的一些映射关系数据在drivers/mtd/maps/中包括分区信息、I/O映射及特定函数的映射MTD内存技术设备字符设备节点根文件系统MTD字符设备MTD原始设备(块设备)FLASH硬件驱动MTD块设备
22、块设备节点文件系统1、SD/MMC卡组成的存储系统是许多嵌入设备的主要存储设备,相当于PC机的硬盘,在嵌入设备上的SD/MMC卡控制器通过MMC协议来解析命令控制SD/MMC卡的操作。2、SD/MMC卡上有一些寄存器来控制卡的状态及读写操作。MMC协议规定的寄存器有:CID寄存器,128位,是卡的鉴别寄存器,存有卡的鉴别信息;CA寄存器,16位,存有卡的本地系统的相对地址,在初始化时由控制器动态指定。DSR寄存器,16位,是配置卡的驱动程序的寄存器,是可选的。CSD寄存器,卡特定数据信息描述寄存器,是可选的。OCR寄存器,操作控制寄存器。SD/MMC卡块设备驱动程序1、MMC驱动程序的层次结构
23、通用设备层对于块设备来说,主要负责设备内核对象在sysfs文件系统中的管理、请求队列管理、及与文件系统的接口;MMC抽象设备层抽出 MMC卡的共有特性,如:MMC卡的请求管理、电源管理等.MMC协议层将MMC操作分解成标准的MMC协议.具体设备层则负责具体物理设备的寄存器控制等。这种分层结构层次分明,管理有效。MMC驱动程序的层次结构如下图:SD/MMC卡块设备驱动程序通用设备层(device/drivers/resource)MMC描象设备层(mmc_host/mmc_driver/mmc_card)MMC协议层(将MMC操作分解成标准的MMC协议传给设备)具体设备层(用特定的物理设备的mm
24、ci_host/amba_driver/amba_device)1、MMC块设备驱动程序初始化mmc_blk_init()【drivers/mmc/card/block.c】它先将MMC块设备名注册到名称数组major_names中,然后,还把驱动程序注册到sysfs文件系统中的总线和设备目录中。一方面,sysfs文件系统中可显示MMC块设备相关信息,另一方面,sysfs文件系统以树形结构管理着 MMC块设备驱动程序。mmc_register_driver()【drivers/mmc/core/bus.c】注册一个媒介层驱动程序2、MMC块设备驱动程序探测函数mmc_blk_probe()【d
25、rivers/mmc/card/block.c】MMC控制器探测函数,它探测MMC控制器是否存在,并初始化控制器的结构,同时,还探测MMC卡的状态并初始化MMC抽象设备层抽象设备层MMC块设备驱动程序块设备驱动程序3、MMC卡请求的处理mmc_init_queue()【drivers/mmc/card/queue.c】mmc_prep_request()mmc_blk_prep_rq()【block.c】mmc_request()【queue.c】mmc_queue_threadmmc_blk_issue_rq初始化MMC块请求结构后,向卡发出请求命令,并等待请求的完成,函数分析mmc_car
26、d_claim_host为一套操作认领一个控制器mmc_wait_for_req【drivers/mmc/mmc.c】开始执行一个请求并等待请求完成mmc_start_request【drivers/mmc/core/core.c】开始排队执行一个在控制器上的命令MMC抽象设备层MMC块设备驱动程序1、board-qrd7627a.c【kernel/arch/arm/mach-msm/】msm_qrd_init()-msm7627a_init_mmc()-msm_add_sdcc(3,&sdc3_plat_data);-platform_device_register()2、Msm_sdcc.c【kernel/drivers/mmc/host/】Msmsdcc_probe(platform_device*pdev)MSM_SDCC的流程