问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

eMMC技术详解:架构、功能与应用

创作时间:
作者:
@小白创作中心

eMMC技术详解:架构、功能与应用

引用
CSDN
1.
https://m.blog.csdn.net/l00102795/article/details/137818370

eMMC(Embedded Multi Media Card)是一种内嵌式存储器标准规格,由MMC协会订立,主要用于手机、平板电脑等移动设备。它将NAND Flash存储器、控制器和接口集成在一个小型BGA封装中,具有高速、低功耗和易于集成的特点。本文将详细介绍eMMC的架构、各组成部分的功能以及与其他存储技术的对比。

eMMC是什么

eMMC(Embedded Multi Media Card)是MMC协会订立、主要针对手机或平板电脑等产品的内嵌式存储器标准规格。由一个嵌入式存储解决方案组成,带有MMC(多媒体卡)接口、快闪存储器设备及主控制器,所有都在一个小型的BGA(Ball Grid Array,球栅阵列)封装。接口速度高达每秒52MBytes,eMMC具有快速、可升级的性能。同时其接口电压可以是1.2V、1.8V或者是3.3V。它是在NAND闪存芯片的基础上,额外集成了控制器,并将二者“打包”封装成一颗BGA芯片,从而减少了对PCB主板的空间占用,也是移动设备中普及度最高的存储单元。

简单地说,eMMC = NAND Flash + 控制器 + 标准封装

eMMC的整体架构

eMMC的整体架构如下:

eMMC内部是把NAND Flash芯片(Flash内存阵列)、Device Controller芯片(也叫Flash控制器、eMMC控制器)封装在一块。Flash控制器负责管理内存,并且提供标准接口,使得EMMC能够自动调整主机与从机的工作方式,没有位数限制,不需要处理其他繁杂的NAND Flash兼容性和管理问题,同时,控制器是其卡的应用和多媒体总线之间的联系介质,它能在应用程序总线和标准多媒体总线之前完成协议转换。他的通信基于先进的10个信号总线,通信协议被定义为这个标准的一部分,简称多媒体模式。eMMC的主要用处,看看下面各模块的作用也基本可以清楚了。

各组成部分

NAND Flash

NAND Flash是一种非易失性的存储器,通常在嵌入式系统中用于存放系统、应用和数据等,类似于PC系统中的硬盘。eMMC在内部对NAND Flash划分了几个主要区域:

  • BOOT Area Partition 1 & 2
    此分区主要是为了支持从eMMC启动系统而设计的。该分区的数据,在eMMC上电后,可以通过很简单的协议就可以读取出来。同时,大部分的SOC都可以通过GPIO或者FUSE的配置,让ROM代码在上电后,将eMMC BOOT分区的内容加载到SOC内部的SRAM中执行。所以启动分区的数据是需要MCU解析的。
    Boot Area包含两个Boot Aera Partions, 主要用于存储BootLoader,支持SOC从eMMC启动系统。这两个分区是由厂家在生产过程中配置好的,并且其大小是不能由AP进行配置的。两个Boot Area Partions的大小是完全一致的,由Extend CSD register的BOOT_SIME_MULT Field决定,大小的计算公式如下:
    Size = 128Kbytes x BOOT_SIZE_MULT。
    一般情况下,Boot Area Partions的大小都是4MB,即BOOT_SIZE_MULT为32,部分芯片厂家会提供改写BOOT_SIZE_MULT的功能来改变Boot Area Partion的容量大小。即BOOT_SIZE_MULT最大可以为255,即BOOT Area Partion的最大容量可以为128KB*255=31.875MB。
    Boot1和Boot2这两个区域在存储的稳定性、可靠性及擦除次数上都远比UDA要好,所以很多chipset上都会使用这两个区域来存放一下关键数据,如boot image,default配置参数等等。当然不通的chipset的配置方法也不尽相同。这个可以找chipset的工程师询问。据笔者所知:以大陆市占最大的两家chipset为例,MTK使用UDA来存放boot data,而使用boot area来存放配置参数;Qualcomm则使用Boot1来存放boot data,boot2来存放配置参数。
    另外,不通的eMMC版本一般对Boot Area和RPMB的容量大小需求也不通,如下作一个简单的参考:

  • RPMB Partition
    RPMB是Replay Protected Memory Block的简称,它通过HMAC SHA-256和Write Counter来保证保存在RPMB内部的数据不被非法篡改。
    在实际应用中,RPMB分区通常用来保存安全相关的数据,例如指纹数据、安全支付相关的密钥等。

  • General Purpose Partition 1~4
    此区域则主要用于存储系统或者用户数据。General Purpose Partition在芯片出厂时,通常是不存在的,需要主动进行配置后,才会存在。

  • User Data Area
    此区域则主要用于存储系统和用户数据。
    User Data Area通常会进行再分区,例如Android系统中,通常在此区域分出boot、system、userdata等分区

Flash Controller

NAND Flash直接接入Host时,Host端通常需要有NAND Flash Translation Layer,即NFTL或者NAND Flash文件系统来做坏块管理、ECC等的功能。
eMMC则在其内部集成了Flash Controller,用于完成擦写均衡、坏块管理、ECC校验等功能。
相比于直接将NAND Flash接入到Host端,eMMC屏蔽了NAND Flash的物理特性,可以减少Host端软件的复杂度,让Host端专注于上层业务,省去了对NAND Flash进行特殊的处理。同时,eMMC通过使用Cache、Memory Array等技术,在读写性能上也比NAND Flash要好很多。
传统Nand Flash与eMMC存储方案对比如下:
传统NAND FLASH一般使用SPI总线,而eMMC使用自己的总线协议。

标准接口

其中包括Card Interface(CMD,DATA,CLK)、Memory core interface,总线接口控制、电源控制、寄存器组。
eMMC与Host之间的通信线,如下:

eMMC的四类信号功能描述如下:

时钟信号
CLK:给eMMC提供数据交互的时钟;

控制信号
DS:DS是由eMMC向主控端传输,频率和CLK信号相同,用于同步从Device端输出的数据,在HS400模式下使用,在主控端实现数据同步功能。该信号在eMMC5.0中引入。
CMD:命令交互信号,用户传输控制命令或者回应主机(发送Host的command和Device的response),双向信号。Host与eMMC之间的通信都是Host以一个Command开始发起的,针对不通的Command,Device会做出不通的响应。
RST_n:复位信号。

数据信号:
DAT[7:0]:双向接口,数据收发。
eMMC的双向数据总线,用于主机和设备之间的数据通信。它工作在应对快速的命令传输的推挽模式。
DAT线在某一时刻只能支持单项传输,只能被设备或eMMC HOST一方控制。默认下,当用户上电或者复位的时候,仅能用DAT0一根线传输数据。同时,用户可以自己配置想要的DAT线的数量,也可以选择4根或者8根。当用户选择4根时,eMMC设备会断开DAT1-3的内部上拉,如果用户选择8根,那么同理会断开DAT1-7的上拉。

电源信号:
VCC:eMMC的Core电源。
VCCQ:IO电源。

图中寄存器组的功能见下表:

CID

卡身份识别寄存器,128bit,只读,厂家号,产品好,串口,生产日期;
这是128bits的寄存器,里面存放单个设备独一无二的信息,它符合eMMC协议,当设备处于识别状态的时候,信息能够被主机访问。具体信息见下表:

RCA

卡地址寄存器,可写的16bit寄存器,存有Device identification模式由host分配的通信地址,host会在代码里面记录这个地址,MMC则存入RCA寄存器,默认值为0x0001。保留0x0000用来将all device设置为等待CMD7命令状态。
这是16bits的寄存器,一旦设备被识别,设备会被主机指定相对的地址,它存在其中。当传输数据的时候,主机利用这些信息选择设备,规定这个寄存器默认的值为0X0001。如果地址变成0X0000,那么只有发送CMD7指令才可让设备处于Stand-by State才可用。

CSD

卡专有数据寄存器部分,可读写128bit,卡容量,最大传输速率,读写操作的最大电流、电压、读写擦除块的最大长度等。
这是128bits的寄存器,它提供了主控如何去访问设备的信息。它规定了数据格式、错误类型、最大数据访问时间、数据传输速率、DSR寄存器是否可用等。其具体内容如下表:

DSR

驱动等级寄存器。
这是16bits的寄存器,它规定设备的等级,设备能通过主机进行设置来增强设备的性能,例如总线的长度、传输的速率等参数。在设备具体数据寄存器中包括了这个寄存器使用方式的内容。这个寄存器的默认值是0x404。

SCR

卡配置寄存器,可写的64bit,是否用Security特性,一句数据位宽(1bit或4bit)

OCR

这是32bits的寄存器,此寄存器包含eMMC Device支持的电压模式、数据寻址模式(按Byte寻址or按Sector寻址)以及Busy标志位。
卡操作电压寄存器32位,只读,每隔0.1V占1位,第31位表示卡上电过程是否完成。

eMMC电源设计

先了解什么是HS200和HS400模式

eMMC的HS200模式和HS400模式是比较特殊的工作情况,它们会影响eMMC的供电设计,我们先来看看这两个模式的细节。

HS200模式:
HS200是eMMC的高速通信模式,该模式下时钟频率为200MHz,数据在时钟单边沿有效,最大数据率吞吐率为200MB/s,此时IO电平为1.8V或者1.2V,时序图如下。

HS400模式:
HS400是eMMC的高速通信模式,时钟频率也为200MHz,数据在时钟双边沿有效,最大数据率吞吐率为400MB/s,此时IO电平为1.8V或者1.2V,时序图如下。

从上面总结下来,HS200和HS400都是高速模式,时钟都是200MHz,信号电平信号都仅支持1.8V和1.2V,HS400因为是时钟双边沿数据有效,所以速率相对HS200翻了一倍。

当然,eMMC的总线不止HS200和HS400模式,它还有另外的三种模式,另外的三种模式都兼容3V、1.8V、1.2V电平,如下。

电源设计

上面特地的先了解了HS200模式和HS400模式,目的是为了充分理解eMMC的复杂IO电平,上面我们知道,eMMC在HS200和HS400模式下,IO电平只能是1.8V或者1.2V,所以设计里如果主控芯片支持这两种模式控制,我们也想用这两种模式,那么IO的电源引脚VCCQ一定要使用1.8V或者1.2V供电,否则无法使用,如果不需要HS200或HS400模式,那就看主控的电平是什么就供什么电平,比如主控的IO电平是3.3V,那么就给eMMC的VCCQ供3.3V,如果主控的IO电平是1.8V,那么就给eMMC的VCCQ供1.8V。

eMMC VS Nand Flash

如前所述,eMMC是将Nand Flash和Flash Controller和eMMC接口等封装在一起的小型的存储系统,这样做的好处是:

  1. 简化系统存储设计,降低开发复杂度。生产Nand Flash的厂商众多,有samsung、hynix、micron等许多厂商,每家生产的产品的技术特性都稍有差异,需要针对这些特性做兼容开发,开发非常复杂;而eMMC则规定了统一的协议接口,我们只需要根据协议做开发,就能兼容各个厂商的eMMC产品,开发过程大大简化。
  2. 更新速度快。随着Nand Flash制程工艺的不断升级,主控的Flash Controller和NFTL也需要不停的更新,才能支持新的Nand Flash。而eMMC将Flash Controller和Nand Flash封装在了一起,屏蔽了由于Nand Flash制程工艺而带来的差异,主控的controller和driver不需要做过多修改就能支持。
  3. 读写性能更好。eMMC在Nand Flash的基础上,加入了Cache、Memory array等技术,大大提高了读写速度。

eMMC VS MMC

如前所述,eMMC即embedded MMC,就是从MMC拓展而来,做了小型化处理,方便嵌入到板上,且速度方面做了提升,从0 ~ 52MHz提升到了0 ~ 200MHz。

eMMC VS UFS

与eMMC一样,UFS也是一种将Nand Flash和Flash controller即协议接口封装在一起的存储系统。但是两者还是有很大的区别。

  1. 协议接口不一样。eMMC使用的是8bit的并行接口,而UFS使用的是串行接口。eMMC和主控之间只能进行半双工通信,而UFS与主控之间可以看下全双工通信。
  2. UFS的读写性能比eMMC高很多。如前所述,由于eMMC使用的是并行接口,这就限制了它的最高工作频率,目前eMMC能支持的最高工作频率是200MHz,及它的最大传输带宽为400MB/s。而UFS使用的是串行接口,则可以突破这个限制,且能进行全双工通信,大幅提高了读写性能。以下就是eMMC与UFS的读写性能的对比图。

VCC和VCCQ的区别

VCC和VCCQ电压的区别主要体现在它们的应用和电压范围上。

VCC电压

VCC(Volt Current Condenser)通常是指电路中的正电源电压输入端,为芯片、模块或电路提供工作电压。在不同的上下文中,VCC有不同的含义和电压值:

  • 在数字电路和模拟电路中,VCC通常指的是电路的供电电压,常见的电压值有3.3V和5V,但也可以有其他电压等级,如用于单片机电路中的+5V
  • 通常用于核心电压,如存储器部分电压。
  • 电压范围较宽,一般为2.7V至3.6V,适用于不同的设备和应用场景。
  • 在某些情况下,VCC电压需要大于或等于VCCQ电压,以确保设备的正常运行。

VCCQ电压

  • 主要用于接口电源及核电压,以及闪存输入输出和UFS控制器的供电。
  • 电压范围较窄,通常为1.8V或与VCC相同,但在某些情况下也可能为1.70V至1.95V。
    VCCQ电压由CPU的数据总线的VCCIO决定,且eMMC总线VCCIO值必须与VCCQ(voltage core clamp quad)保持一致,VCCIO是CPU侧的电压,VCCQ是外设上的电压。

总结来说,VCC和VCCQ电压虽然都是用于供电,但它们的应用场景和电压范围有所不同。VCC主要用于核心电路,而VCCQ则更多地用于接口和输入输出电路。了解这两种电压的区别对于正确设计和使用电子设备至关重要。VCC是给闪存电源供电的引脚,一般是3.3V;VCCQ是给存储器控制器供电的引脚。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号