eMMC存储器的市场和技术分析

eMMC存储器的市场和技术分析

1.概述

eMMC的全称是嵌入式多媒体卡,其设计目标是将存储器芯片和控制器集成在一起,简化了设计流程,降低了系统成本,这种集成方式使得eMMC具有体积小、功耗低、容量大等特点,非常适合用于空间受限和功耗敏感的嵌入式应用中。

在物理架构上,eMMC由NAND Flash存储阵列和存储控制器组成,控制器负责管理数据的读写操作,并提供标准接口以简化与主控芯片的通信,eMMC协议支持以块为单位进行数据读写,每个块的大小通常为512字节。

eMMC基于MMC(多媒体卡)标准规范发展而来,MMC定义了访问Flash Memory的接口和协议,而eMMC则是对MMC的一个拓展,以满足更高标准的性能。

eMMC接口协议主要包括以下几个方面:

总线接口:

CLK(时钟信号):用于从Host端输出时钟信号,进行数据传输的同步和设备运作的驱动。

CMD(命令信号):此信号用于发送Host的command和Device的response。

DAT0-7(数据信号):用于传输数据的8位总线,支持单倍数据速率(SDR)和双倍数据速率(DDR)传输模式。

Data Strobe:在eMMC 5.0及更高版本中引入的数据选通信号,用于在HS400模式下进行双倍速率传输。

通信流程:

所有通信都是以Host发送一个Command给eMMC开始的。

eMMC对于收到的不同Command会有不同的响应,包括数据响应和状态响应。

数据传输可以是单向的(从eMMC到Host或从Host到eMMC),也可以是双向的。

初始化过程:

系统上电复位后,Host必须使用eMMC总线协议指定的消息来初始化eMMC设备。

初始化过程包括Device Identification Mode(设备识别模式),该模式包括Idle State(空闲状态)、Ready State(就绪状态)和Identification State(识别状态)。

在识别状态下,Host会发送CMD3命令为eMMC设备分配RCA(卡地址寄存器),完成设备识别并进入数据传输模式。

数据传输和校验:

在写数据传输中,eMMC Device接收到Host发送的一个Data Block后,会进行CRC校验。

如果校验成功,eMMC会在对应的Data Line上向Host发回一个Positive CRC status token(010);如果校验失败,则会在对应的Data Line上发送一个Negative CRC status token(101)。

2.市场分析

半导体存储器类型如下:

其中,NAND Flash和DDR占了半导体存储器97%的市场份额,NAND Flash占了约40%的市场份额,而eMMC和eMCP占据NAND Flash的40%左右的市场,SSD固态硬盘占了约20%的市场份额。

全球前五大嵌入式多媒体卡(eMMC)厂商包括三星、SK海力士、铠侠、西部数据、美光科技,共占75%以上的市场份额。中国地区是全球最主要的嵌入式多媒体卡(eMMC)消费市场,市场份额达到40%以上。

国内主要的eMMC生产商包括江波龙、佰维存储等,2022年,江波龙的eMMC产品市场份额提升至第六名,占市场份额的大约4%,国内很多车载ECU的大容量存储器,都在使用江波龙的产品。

点击图片可查看完整电子表格

上表为2021年数据,最新数据在互联网并未找到。

就类型而言,大于256GB的市场份额占比超过30%。在应用领域,智能手机的市场份额占比达到50%以上。

按eMMC使用产品划分,从高到低,分别为智能手机、平板电脑、智能电视、机顶盒、车载系统、工业控制设备、医疗设备、智能家居设备等。

3.技术分析

概述

下面将分析国产江波龙的eMMC产品FEMDME016G,这是一款16GB的eMMC,采用eMMC5.1标准,也兼容eMMC4.41/4.5/5.0标准,可支持1bit、4bit、8bit数据传输宽度,最大传输频率400MHZ,写入速度最高115 MB/s,读取速度最高290 MB/s,存储阵列供电电压2.7-3.6V,控制器可选择1.7 ~ 1.95V 或2.7 ~ 3.6V供电,支持掉电保护,数据ECC校验,支持软件或硬件复位,支持休眠唤醒,待机电流仅130uA(存储器)和150uA(控制器),休眠电流为0uA(存储器)和150uA(控制器)。

引脚排布

DATA0-DATA7双向数据信号,以推挽模式工作,同一时刻只有设备或主机在驱动这些信号,上电或复位后,仅使用DAT0进行数据传输,可以配置使用DAT0-DAT3或DAT0-DAT7,eMMC设备为数据线DAT1-DAT7设置内部上拉电阻,在进入4位模式后,断开DAT1、DAT2和DAT3线的内部上拉电阻,进入8位模式后,断开DAT1-DAT7线的内部上拉电阻。

RSTN硬件复位输入引脚

VCCQ控制器供电,支持高压模式2.7 ~ 3.6V和低压模式1.7 ~ 1.95V

VCCFlash存储矩阵供电,1.7 ~ 1.95V

VDDi内部供电节点,非外部电源供应点

CMD双向命令通道,用于设备初始化和命令传输。命令从主机发送到设备,而响应则从设备发送回主机。CMD信号有两种操作模式:初始化时采用开漏模式,命令传输时采用推挽模式。

DS数据选通信号,是HS400模式下新分配的一个引脚,数据选通信号由eMMC设备生成并发送给主机,在HS400模式下,读取的数据和CRC校验响应都与数据选通信号同步。

CLK每个时钟周期指示命令线上一个位(bit),指示所有数据线上一个位(1x)或两个位(2x)的传输。

VSS接地引脚

功能概述

主机无需关注NAND闪存操作的具体细节

eMMC控制器已经包含了闪存管理技术,如数据存储和检索、缺陷处理与诊断以及电源管理,主机无需再考虑NAND闪存数据操作的具体细节,可以专注于更高层次的应用和数据处理任务。

内置ECC以纠正NAND闪存中的缺陷

在NAND闪存中,由于存在磨损、噪声等因素,可能导致读取或写入数据的错误,eMMC控制器内置了硬件错误校正码(ECC)功能,能够在数据传输或存储过程中检测和纠正错误,确保数据的完整性和准确性。

断电保护

为了防止数据丢失,eMMC中增加了一种名为“突然断电保护”的机制,在突然断电的情况下,eMMC能够在电源重新接通后正常工作。

全局磨损均衡

为了达到最佳的稳定性和设备耐用性,eMMC采用了全局磨损均衡算法,该算法确保不仅普通区域,还包括频繁访问的区域(如文件分配表FAT)都能得到均匀的编程和擦除处理。

初始数据加速

IDA是一种技术,如果eMMC被SMT安装到电路板上之前,客户已经向eMMC预烧录了数据,该技术能够防止这些数据丢失。IDA技术确保了eMMC在经历SMT等制造过程时,其内部预存的数据能够得到保护,不会因为制造过程中的各种因素而丢失。

缓存

eMMC通过缓存技术增强了数据写入性能,使得客户能够获得更高的耐用性和可靠性。缓存技术通过暂时存储即将写入NAND闪存的数据,减少了直接对NAND闪存的写入操作,从而延长了eMMC的使用寿命。同时,缓存还可以加速数据的读取速度,频繁访问的数据可以被存储在缓存中,从而减少了从NAND闪存中读取数据的次数。

功能框图

寄存器

卡识别(CID)寄存器是128位宽的。它包含了在卡识别阶段(协议)中使用的卡识别信息。每个单独的闪存卡或I/O卡都应具有唯一的识别号。每种类型的ROM卡(由内容定义)也应具有唯一的识别号。CID寄存器的结构将在以下部分中定义。

卡特定数据寄存器CSD提供了关于如何访问卡内容的信息。CSD 定义了数据格式、错误校正类型、最大数据访问时间、数据传输速度、以及是否可以使用 DSR 寄存器等。寄存器的可编程部分(由 W 或 E 标记的条目,见下文)可以通过 CMD27 命令进行更改。

扩展CSD寄存器定义了卡的属性和选定的工作模式,长512字节,其中最重要的320字节是属性段(Properties segment),它定义了卡的能力,并且不能被主机修改。剩余的192字节是模式段(Modes segment),它定义了卡当前的工作配置,这些模式可以通过主机发送的SWITCH命令来更改。

操作条件寄存器OCR存储了eMMC的VCCQ电压配置文件。此外,该寄存器还包含一个状态信息位。如果eMMC的上电过程已完成,则设置此状态位。OCR寄存器应由eMMC实现。

固件升级

eMMC控制器的固件可以通过发送特定的命令序列进行升级。

故障监测

S.M.A.R.T.(Self-Monitoring, Analysis, and Reporting Technology)是一种监测系统,用于检测和报告eMMC可靠性的各种指标(包括原始坏块、增加的坏块、上电次数、断电次数等),旨在预测硬件故障。我们可以利用记录的S.M.A.R.T.数据来发现故障所在,确保如何解决问题,并在未来的eMMC设计中防止这些问题再次发生

4.eMMC协议及命令

eMMC协议要求主机到设备的控制命令通过CMD线进行串行传输,CMD命令格式如下表:

CMD总长度48bits,固定以0开始,以1结束。

transmiter bit表示数据的传输方向,0表示从设备到主机(读操作),1表示从主机到设备(写操作)。

command index用6个bits指示了command的索引,取值范围0~63。

arguments表示CMD的参数。

CRC7是包含Start Bit、Transmission Bit、Command Index和Argument内容的CRC校验值。

eMMC协议将command index分成12个class,每个class代表一类功能,包含所有commands的一个子集。具体某一个设备支持哪些class的命令,可以通过CSD寄存器的CCC[95:84]feilds来查询,如bit84为1则表示支持class0。

命令分类

点击图片可查看完整电子表格

5.eMMC分区和启动支持

分区

eMMC协议规定,可将内部的 Flash Memory 划分为 4 类区域:BOOT Area Partition 1 & 2、RPMB Partition、User Data Area。

BOOT Area Partition 1 & 2一般为4MB,为了支持从 eMMC 启动SoC而设计,该分区的数据,在 eMMC 上电后,可以通过很简单的协议就可以读取出来,大部分的 SOC 都可以通过 GPIO 或者 FUSE 的配置,让 ROM 代码在上电后,将 eMMC BOOT 分区的内容加载到 SOC 内部的 SRAM 中执行。

RPMB 一般为4MB,通过 HMAC SHA-256 和 Write Counter 来保证保存在 RPMB 内部的数据不被非法篡改,eMMC 在写入数据到 RPMB 时,会校验数据的合法性,只有指定的 Host 才能够写入,同时在读数据时,也提供了签名机制,保证 Host 读取到的数据是 RPMB 内部数据,而不是攻击者伪造的数据。在实际应用中,RPMB 分区通常用来保存安全相关的数据,例如指纹数据、安全支付相关的密钥等。

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

分区编址

eMMC 的每一个硬件分区的存储空间都是独立编址的,访问地址都从逻辑地址0开始,地址空间为 0 - partition size。具体的数据读写操作实际访问哪一个硬件分区,由CMD6命令进行切换。

启动支持

eMMC 定义了 Boot State,在 Power-up、HW reset 或者 SW reset 后,如果满足一定的条件,eMMC 就会进入该 State,见流程图:

CMD 信号保持低电平≥ 74 个时钟周期后,会触发 Original Boot Operation,进入 Boot State,在 Boot State 下,如果有配置 BOOT_ACK,eMMC 会先发送 “010” 的 ACK 包,接着 eMMC 会将BOOT Area Partition的数据发送给 Host,传输过程中,Host 可以通过拉高 CMD 信号 (Original Boot 中),或者发送 Reset 命令 (Alternative Boot 中) 来中断 eMMC 的数据发送,完成 Boot Data 传输。

6.总结

本文对半导体存储器的一个类型分支eMMC进行了分析,了解了它的功能、市场、技术细节,帮助读者能对eMMC有一个全面的了解。

开源了几个项目:
基于UDS on CAN的Bootloader的刷写上位机:
https://github.com/sydyg/UDS-on-Bootloader.git
OSEKNM协议栈:
https://github.com/sydyg/OSEK_NM
嵌入式、汽车电子学习笔记:
https://github.com/sydyg/Vehicle_Soft_Class.git

  • 19
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要将eMMC存储器划分为多个存储区,可以按照以下步骤进行操作: 1. 使用fdisk等分区工具,以MB为单位创建三个分区,分别为SPL+U-Boot、Kernel和Rootfs分区。例如,可以使用以下命令创建三个分区: ``` $ fdisk /dev/mmcblk0 Command (m for help): n Select (default p): p Partition number (1-4, default 1): 1 First sector (2048-1507327, default 2048): Last sector, +sectors or +size{K,M,G} (2048-1507327, default 1507327): +64M Command (m for help): n Select (default p): p Partition number (2-4, default 2): 2 First sector (133120-1507327, default 133120): Last sector, +sectors or +size{K,M,G} (133120-1507327, default 1507327): +128M Command (m for help): n Select (default p): p Partition number (3-4, default 3): 3 First sector (266240-1507327, default 266240): Last sector, +sectors or +size{K,M,G} (266240-1507327, default 1507327): ``` 在这个例子中,第一个分区大小为64MB,用于存储SPL+U-Boot,第二个分区大小为128MB,用于存储Kernel,第三个分区大小为剩余的空间,用于存储Rootfs。 2. 格式化分区。例如,可以使用以下命令格式化分区: ``` $ mkfs.ext4 /dev/mmcblk0p1 $ mkfs.ext4 /dev/mmcblk0p2 $ mkfs.ext4 /dev/mmcblk0p3 ``` 在这个例子中,分别格式化三个分区。 3. 挂载分区并将文件复制到相应的分区中。例如,可以使用以下命令将文件复制到相应的分区中: ``` $ mount /dev/mmcblk0p1 /mnt $ cp SPL+U-Boot /mnt $ cp U-Boot /mnt $ umount /mnt $ mount /dev/mmcblk0p2 /mnt $ cp Kernel /mnt $ umount /mnt $ mount /dev/mmcblk0p3 /mnt $ cp Rootfs /mnt $ umount /mnt ``` 在这个例子中,将SPL+U-Boot和U-Boot复制到第一个分区中,将Kernel复制到第二个分区中,将Rootfs复制到第三个分区中。 4. 完成后,将eMMC从计算机上卸载并插入到BMC开发板上。 5. 启动BMC开发板,BMC系统将从SPL+U-Boot分区中加载SPL程序和U-Boot,然后从Kernel分区中加载Kernel,最后从Rootfs分区中加载Rootfs并启动BMC系统。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南山墨客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值