eMMC存储简介只是简介囧沙贝2012.9.21eMMC(EmbeddedMultiMediaCard)嵌入式多媒体卡MMC协会所订立的内嵌式存储器标准规格主要应用于智能手机和移动嵌入式产品什么是eMMC1、eMMC拥有存储以及取代NorFlash的开机功能,开机速度比传统的MCP要快几倍2、eMMC可以很好的解决对MLC和TLC的管理,ECC除错机制、区块管理、平均抹写储存区块技术、指令管理、低功耗管理等。3、厂商不用再为不同的NANDFlash重新设计规格、不用处理NANDFlash相容性和管理问题、缩短新品上市周期、研发成本eMMC的优点eMMC结构由一个嵌入式存储解决方案组成:标准MMC封装接口主控制器(控制芯片)快闪存储器设备(NANDFlash芯片)这三部分封装在一个JEDEC(固态技术协会)标准的BGA上。接口速度高达每秒52MB,eMMC具有快速、可升级的性能。同时其接口电压可以是1.8v或者是3.3v。eMMC的结构看图说话~CoreRegulator核心稳压器eMMC的结构MemoryNANDFlash存储介质控制信号数据总线MMCI/OBlockNANDI/OBlockCoreRegulator(requiredfor3.3v)CoreLogicBlockVCCVCCQRESETVDDiCLKCMDDAT[7:0]Creg1.I/O0~I/O7:用于输入地址/数据/命令,输出数据,有可能16位,但高8位只用于数据2.CLE:CommandLatchEnable,命令锁存使能,在输入命令之前,要先在模式寄存器中,设置CLE使能3.ALE:AddressLatchEnable,地址锁存使能,在输入地址之前,要先在模式寄存器中,设置ALE使能4.CE#:ChipEnable,芯片使能,在操作NandFlash之前,要先选中此芯片,才能操作5.RE#:ReadEnable,读使能,在读取数据之前,要先使CE#有效。6.WE#:WriteEnable,写使能,在写取数据之前,要先使WE#有效。7.WP#:WriteProtect,写保护8.R/B#:Ready/BusyOutput,就绪/忙,主要用于在发送完编程/擦除命令后,检测这些操作是否完成:忙,表示编程/擦除操作仍在进行中,就绪表示操作完成.9.Vcc:Power,电源10.Vss:Ground,接地11.N.C:Non-Connection,未定义,未连接。[小常识]在数据手册中,你常会看到,对于一个引脚定义,有些字母上面带一横杠的,那是说明此引脚/信号是低电平有效,比如你上面看到的RE头上有个横线,就是说明,此RE是低电平有效,此外,为了书写方便,在字母后面加“#”,也是表示低电平有效,比如上面写的CE#;如果字母头上啥都没有,就是默认的高电平有效,比如上面的CLE,就是高电平有效。NandFlash引脚(Pin)的说明1、SLC和MLCSLC每个存储单元只存储一个Bit数据MLC每个存储单元可以存储多个Bit数据根据电荷多少设定阀值,比如4V,可以用1234V分别表示数值2、如何识别SLC和MLC通过读取chipID,chipID最少4个字节,可以更多其中第3个字节中的信息如下Bit[1:0]内部芯片数1、2、4、8Bit[3:2]电平种类数2、4、8、16Bit[5:4]可同时编程页1、2、4、8Bit[6]多芯片交替编程是否支持0:不支持Bit[7]高速缓存编程(cacheProgram)是否支持0:不支持Nand的存储单元NandFlash的核心部件是FloatingGateFET(浮置栅场效应管)NANDFlash的擦写均是基于隧道效应:电子从源极穿过浮置栅极与硅基层之间的绝缘层,对浮置栅极充电(写数据‘0’)或放电(擦数据‘1’),NandFlash擦除以block为单位,写数据以page为单位。清除Flash的数据是写1,这与硬盘正好相反。NorFlash则反过来,电流从浮置栅极到源极,称为热电子注入NAND存储单元硬件原理1、NAND的闪存单元比NOR要小因为NOR的每个单元都需要独立的金属触点。NAND的与硬盘驱动器类似,基于扇区(页Page),也存在坏的扇区,需要ECC纠错2、因为单元小,所以NAND的写(编程)和擦除的速率快;而NOR的优点是具有随机存取和对字节执行写操作的能力,NAND的则比较慢。Nand和Nor物理上的区别块(Block)是擦除操作的最小单位(相当于硬盘的扇区)一个nandflash由很多个块(Block)组成,块的大小一般是128KB,256KB,512KB页(Page)是编程操作的最小单位每个块里面又包含了很多页(page)。页的大小256B、512B、2KB、4KB每一个页,对应还有一块区域,叫做空闲区域(sparearea)/冗余区域(redundantarea),而Linux系统中,一般叫做OOB(OutOfBand)。这个区域,是最初基于NandFlash的硬件特性:数据在读写时候相对容易错误,所以为了保证数据的正确性,必须要有对应的检测和纠错机制,此机制被叫做EDC(ErrorDetectionCode)/ECC(ErrorCodeCorrection,或者ErrorCheckingandCorrecting),所以设计了多余的区域,用于放置数据的校验值。OOB的第6个Byte标记为非0xff时,表示坏块ECC一般每256字节生成3字节ECC校验数据。(6bit列校验+16bit行校验+2bit保留)页的编程只能顺序进行:Page1-Page2-Page3NandFlash物理存储单元的阵列组织结构NandFlash物理存储单元的阵列组织结构以2Gb(128MB)NAND器件为例,它由2048个Block组成,1Block=64Page(128KB)1Page=2048Bytes+64Bytes(见下图)即128MB=2048(Block)*64(Page)*2048Bytes页寄存器(PageRegister):由于NandFlash读取和编程操作来说,一般最小单位是页,所以,nandflash在硬件设计时候,就考虑到这一特性,对于每一片,都有一个对应的区域,专门用于存放,将要写入到物理存储单元中去的或者刚从存储单元中读取出来的,一页的数据,这个数据缓存区,本质上就是一个buffer,但是只是名字叫法不同,datasheet里面叫做PageRegister,此处翻译为页寄存器,实际理解为页缓存,更为恰当些。NandFlash中的特殊硬件结构以三星的芯片为例:1、配置寄存器(NFCONF)0x4E0000002、命令寄存器(NFCMD)0x4E0000043、地址寄存器(NFADDR)0x4E0000084、数据寄存器(NFDATA)0x4E00000C5、状态寄存器(NFSTAT)0x4E0000106、ECC校验寄存器(NFECC)0x4E000014NandFlash中的特殊硬件结构Function1stCycle地址周期数2ndCycle忙碌时可用Read00h530hReadforCopyBack00h535hReadID90h1-ResetFFh--oPageProgram80h510hTwo-PlanePageProgram80h---11h81h---10hCopy-BackProgram85h510hTwo-PlaneCopy-BackProgram85h---11h81h---10hBlockErase60h3D0hTwo-PlaneBlockErase60h-60hD0hRandomDataInput85h2-RandomDataOutput05h2E0hReadStatus70h-0ReadEDCStatus7Bh-0Chip1StatusF1h-0Chip2StatusF2h-0NandFlash的命令合集(某款芯片)Nandflash的写操作叫做编程(Program),一般以页为单位的。写操作只能在空页面或者已经被擦除的页面进行(全0xFF)擦除的步骤(以块为单位)1、发送擦除设置命令0x602、发送要擦除的块地址3、发送开始擦除命令0xD0写操作的步骤(以页为单位)1、发送写命令0x802、发送要编程的页地址和数据(1个Page)3、发送开始写命令0x10NANDFlash的编程操作(写)步骤同写操作1、发送写命令0x002、发送要读取的页地址3、发送开始写命令0x304、查看寄存器状态,R/B#为ready(1)时,可以从缓存中取数据时序图NandFlash的读操作以K9K8G08U0A为例此nandflash,一共有8192个块,每个块内有64页,每个页是2K+64Bytes假设我们要访问第7000个块中的第25页中的1208字节的地址物理地址=块号×块大小+页号×页大小+页内地址=7000×128K+25×2K+1208=0x36B0CCB8(917556408)计算地址的时候计算OOB的大小吗?不计算如何计算地址1、地址周期的说明(不同的Flash可能会有不同)0x36B0CCB8=00110110101100001100110010111000地址:1、A7~A0:101110002、A11~A8:00001100(A10~A0:10010111000:1208页地址)3、A19~A12:00001100(A16~A11:011001:25页)4、A27~A20:011010115、A29~A28:00000011(A29~A17:1101101011000:7000Block)A10~A0:页内地址0~2047;A11用于表示2048~2112OOBA16~A11:页地址;A29~A17:块地址如何传输地址CycleI/O7I/O6I/O5I/O4I/O3I/O2I/O1I/O0FirstA7A6A5A4A3A2A1A0ColumnSecondLOWLOWLOWLOWA11A10A9A8ColumnThirdA19A18A17A16A15A14A13A12RowFourthA27A26A25A24A23A22A21A20RowfifthLOWLOWLOWLOWLOWLOWA29A28Row1、自从NAND结构被设计以来,标准规范中是允许存在坏块的,只要坏块比例小于总容量的2%就是允许的。2、坏块列表是被要求的,因为NANDFlash只能执行有限次数的读和擦除次数(10w~100w),所有的Flash存储器最终都会被磨损且不再能使用,坏块列表用来跟踪记录坏块。3、坏块分为两种:1)生产过程中产生的一般在该块的前两个Page的滴517字节处用非FF来标识(每页512字节)2)使用过程中产生的如果一个块在擦除整块或写一个页失败时,会被标志为坏块,并且以后不再访问如果擦除了坏块,即标识位被改为0xff,那么在无法单独对块测试的情况下是很难重新标识的,所以坏块表(invalidblocktable)是很重要的InvalidBlock(坏块)的管理4、嵌入式系统中对坏块的处理方式1)SkipBlockMethod(跳过坏块模式)在写入之前读取所有坏块的地址,然后写入数据,当目标地址是坏块地址时,跳过坏块,写入下一个好的块中,继续保留坏块中的标识信息。所以在程序导入执行前,要先读取OOB中的坏块信息,建立列表。InvalidBlock(坏块)的管理4、嵌入式系统中对坏块的处理方式2)ReservedBlockAreaMethod(保留块区域方式)这种烧录算法,首先决定哪些块用来做UBA(UserBlockArea),这些块被RBAmaptable记录,并保留。接下来读取OOB建立一个map到RBARBA第一第二块被用于存储列