eMMC memory介绍
摘要:eMMC是一种集成NAND闪存与控制芯片的嵌入式存储解决方案,采用BGA封装技术。eMMC 5.1标准下顺序读写速度最高可达330MB/s和290MB/s。其架构包含电源管理、控制器及NAND存储三部分,具有启动分区、RPMB安全分区等功能模块。电路设计注重信号完整性,采用阻抗匹配电阻、多级滤波等措施确保高速稳定运行。相比传统存储,eMMC具有体积小、功耗低等优势,但存在擦写次数有限的缺点,
目录
一. eMMC是什么
eMMC(embedded MultiMediaCard 嵌入式多媒体卡)是MMC协会订立。集成NAND(NOT AND 名字源于逻辑门中的与非门)与控制芯片的采用BGA封装(球珊整列封装)的芯片。
目前主流的 eMMC 5.1 标准下,顺序读取速度最高可达 330 MB/s,顺序写入速度最高可达 290 MB/s;其理论峰值传输速度可达 400 MB/s(基于 HS400 模式的理论上限)。不同厂商的产品在实际性能上会有一定差异,例如三星的 eMMC 5.1 顺序读取速度可达 330 MB/s,顺序写入速度可达 200 MB/s,忆联的 eMMC 5.1 顺序写入速度最高可达 290 MB/s。
二 什么是BGA?
BGA 的全称是 球栅阵列封装。
它是一种先进的集成电路芯片封装技术。
传统封装(如QFP):芯片的引脚从封装体的四周像“螃蟹脚”一样伸出来,然后焊接在电路板的表面。
BGA封装:芯片的“引脚”不是外伸的脚,而是在封装体的底部,以阵列式排列的许多个小小的锡球。
BGA的主要特点与优势:
高密度引脚:因为引脚(锡球)在底部以平面阵列排列,所以在同样大小的芯片面积下,BGA可以做出比传统封装多很多的引脚。这对于需要连接大量信号线的复杂芯片(如处理器、存储芯片)至关重要。
性能更好:引脚更短,减少了信号传输的距离和电感,有利于芯片在高频率下稳定工作,提升电气性能。
散热更佳:芯片的背面(即封装体的顶部)可以直接接触散热片,热量更容易传导出去。
体积更小:相比于拥有同样多引脚的传统封装,BGA的体积要小得多,非常适合手机、平板等紧凑型移动设备。
缺点:
焊接工艺要求高,且一旦焊接完成,检查(需要X光)和维修的难度都比较大。
三. NAND的详细解释
1 名字的由来:“非与”
它的名字来源于其使用的逻辑门——与非门。
在数字电路里,有一种基本电路叫“与门”,另一种叫“非门”。
NAND 是 “NOT AND” 的缩写,即“与非”,它是“与”操作后再进行“非”操作的结果。
这种电路结构非常适合高密度地构建存储单元,所以被选为闪存的技术基础。
2 它是如何存储数据的?
基本单位:晶体管
NAND闪存的基本构建块是一种特殊的金属-氧化物半导体场效应晶体管。与普通晶体管不同,这种晶体管有一个“浮栅”。浮栅的作用:捕获电子
你可以把“浮栅”想象成一个小水池。向里面注入电子(充电)就代表存储了数据;把电子抽走(放电)就代表擦除了数据。
浮栅有电子 -> 表示存储了 bit
0浮栅无电子 -> 表示存储了 bit
1
(实际上的定义可能相反,但原理相通)非易失性:
因为浮栅被绝缘体包围,电子一旦被注入,在没有外部高电压的情况下,可以被困在里面很多年。这就是为什么你关掉手机,照片和App依然还在的原因。
3 NAND的主要特点
优点:
容量大、成本低: 单元结构简单,可以在硅片上高密度制造,从而实现巨大的存储容量和低廉的每GB成本。
读写速度快: 相比于传统的机械硬盘,速度快了几个数量级。
抗震、无噪音: 纯固态结构,没有机械部件。
功耗低: 非常适合移动设备。
缺点:
寿命有限(擦写次数): 每次编程和擦除操作都会对氧化层造成微小的损耗。当损耗积累到一定程度,存储单元就无法可靠地存储数据了。这就是SSD和手机用久了会“写死”的原因。
需要“块”操作: 数据不能像内存那样以单个字节为单位进行覆盖。必须先擦除一整“块”(通常包含数十万到数百万个单元),然后再写入。这导致了“写入放大”等问题。
需要坏块管理: 在生产和使用中会产生一些坏掉的存储块,需要有额外的机制来标记和替换它们。
4 核心比喻:仓库与图书馆
NAND闪存 就像是一个巨大的仓库。
这个仓库里有无数的货架单元(存储单元) 来存放货物(数据)。
它的主要目标是:用最低的成本,实现最大的存储容量,并且保证数据在断电后也不会消失。
四. eMMC的架构

架构模块分为三个部分:电源管理,接口与控制器,核心存储
1 电源管理
这是芯片稳定工作的基础。图中显示了多个电源域和滤波电容。
VccQ / VccQM:这是主机接口的供电电源。主要为eMMC与主机通信的I/O引脚(如CLK, CMD, DATA[7:0])供电。
VccQM可能代表该电源域的核心电压。
C1, C2, C3, C4:这些是去耦电容。它们的作用是滤除电源线上的噪声,提供稳定的瞬时电流,保证通信信号的纯净和稳定。
VDDiM / VccM:这是NAND闪存核心及其内部逻辑的供电电源。
C5, C6:同样是用于核心电源的去耦电容。
Core Regulator:核心电压调节器。它可能负责将外部输入的电源(如VccM)转换或稳定为内部NAND核心和控制器逻辑所需的各种工作电压。这是一个非常关键的电源管理模块。
2 接口与控制器
这是eMMC的“大脑”和“对外联络官”。
MMC Controller:MMC控制器。这是eMMC芯片的核心智能部分。它负责:
解析并执行主机通过CMD引脚发送的命令(如读、写、擦除命令)。
通过I/O Block与主机进行高速数据传输。
管理内部的NAND闪存,包括坏块管理、磨损均衡、错误校正码(ECC) 等。
处理上电初始化、睡眠模式等状态机控制。
I/O Block:输入/输出模块。这是物理上的信号收发器。它包含驱动CLK, CMD, DATA等信号线的电路,确保信号的电平、时序符合eMMC标准。
接口信号线:
CLK:时钟信号,由主机提供,同步所有通信。
CMD:命令线,用于主机发送命令和设备回复响应。
DATA[7:0]:8位宽的数据总线。这是eMMC 5.0及以上标准的重要特征,支持高速数据传输。数据在此总线上双向传输。
RST_n:复位信号(低电平有效)。主机可以通过此引脚强制eMMC芯片复位。
DS:可能代表Data Strobe。这是eMMC 5.0引入的特性,在HS400高速模式下,由设备发出DS信号,用于在高速传输中更精确地锁存数据,大幅提升稳定性。

-
ECC(Error Correction Code,错误校验与纠正):由于 NAND Flash 在读写过程中可能因物理损耗、干扰等出现比特错误,ECC 通过算法(如 BCH、LDPC)检测并纠正这些错误,保证数据完整性。
-
Bad Block Management(坏块管理):NAND Flash 存在 “坏块”(出厂或使用中损坏的存储块),控制器会识别并标记坏块,避免向其写入数据,同时规划 “替换块” 保障存储容量。
-
Wear Leveling(磨损均衡):NAND Flash 的擦写次数有限,控制器通过均匀分配各存储块的擦写频率,延长整体使用寿命(防止部分块过早磨损)。
3 核心存储
这是eMMC的“仓库”。
NAND:NAND闪存阵列。这是实际存储数据的物理介质,由海量的存储单元构成。
Core Logic Block:核心逻辑块。它可能包含与NAND阵列直接交互的底层电路,如地址解码器、页缓冲器等。
NAND Control Signals:NAND控制信号。这是MMC控制器向NAND闪存阵列发送的底层命令,如读/写使能(RE/WE)、地址锁存(ALE)、命令锁存(CLE)等。这些信号对主机是完全透明的。
NAND Data Bus:NAND数据总线。这是连接MMC控制器和NAND闪存阵列的内部数据通道,用于在它们之间传输要写入或读取的数据。

1). 启动分区
-
功能:这是为了系统启动而设计的。在设备开机时,处理器(如手机SoC)可以运行一种特殊的“启动模式”,直接从eMMC的启动分区读取并执行初始引导程序,而无需将其先加载到内存中。这有助于简化设计、加快启动速度和降低功耗。
-
为什么有两个? 图中显示有两个启动分区(1和2),这是为了提供备份和可靠性。厂商可以将同一份引导程序的两个副本分别存放在两个分区中。如果Boot Area 1的内容损坏导致无法启动,系统可以自动尝试从Boot Area 2启动,提高了系统的鲁棒性。
-
特点:通常比较小(几MB到几十MB),并且是只读或具有严格的写保护机制,以防止病毒或意外操作破坏引导程序。
2). RPMB分区
-
功能:RPMB的全称是 Replay Protected Memory Block。这是一个高度安全的小容量分区,用于存储必须防篡改和防伪的关键数据。
-
工作原理:对RPMB的每一次读写操作都必须使用一个由设备和服务端共享的安全密钥进行HMAC认证。这确保了:
-
真实性:只有合法的持有者才能访问。
-
完整性:数据在传输过程中未被修改。
-
重放保护:攻击者无法记录一次合法的通信数据包并重复发送以达到非法目的(例如,重复刷写次数计数)。
-
-
典型用途:
-
存储设备的解锁次数/刷机次数。
-
存储系统软件版本信息,防止降级攻击。
-
用于移动支付的金融令牌或敏感信息。
-
存储DRM相关的密钥。
-
3). 通用分区
-
功能:这是为厂商或操作系统预留的“空白”区域,可以根据需要灵活使用。标准支持最多4个(GPP1~GPP4)。
-
特点:eMMC控制器将它们视为独立的逻辑单元,可以单独进行擦除、读写管理。
-
典型用途:
-
用于存储加密用户数据的密钥。
-
作为系统恢复分区。
-
用于存储OEM的特定数据。
-
作为交换空间或特定应用的缓存。
-
4). 用户数据区
-
功能:这是eMMC中容量最大的部分,也是面向最终用户的部分。
-
内容:操作系统、应用程序、用户文件(照片、视频、音乐、文档等)都存储在这个区域。
-
文件系统:这个区域通常会被格式化成手机操作系统所能识别的文件系统,如 EXT4(用于Android的系统分区)、F2FS 或 FAT 等。
4 简易数据流示例:
-
主机发起请求:手机处理器(主机)通过CMD线向MMC控制器发送一个“读数据”的命令,并附上要读取的地址。
-
控制器解析命令:MMC控制器解析该命令。
-
控制器访问NAND:控制器通过内部的NAND Control Signals和NAND Data Bus,向NAND闪存阵列发出寻址和读取指令。
-
NAND返回数据:NAND闪存将对应地址的数据通过内部NAND Data Bus传送给MMC控制器。
-
数据处理:控制器对读取到的原始数据进行ECC校验等操作,确保数据正确。
-
数据发送给主机:控制器通过I/O Block,将校验后的数据通过8位的DATA[7:0]总线,在CLK和DS信号的同步下,高速传输给手机处理器。
五. 电路设计

1、核心芯片(eMMC 存储芯片)
- 型号:SDINBDG4-8G-XA(8GB eMMC 存储芯片)
- 功能:集成 NAND 闪存和主控芯片,提供嵌入式存储功能,支持高速数据读写。
2、引脚说明
1). 数据引脚(DAT0~DAT7)
- DAT0~DAT7:8 位并行数据总线,用于主机与 eMMC 之间的双向数据传输。电路中通过 R1041~R1048(51KΩ)上拉到 P3V3_EMMC 电源,保证信号空闲时的电平稳定,增强驱动能力。
- SD4_DAT1~SD4_DAT7:与主芯片(如 SOC)连接的数据线,R1191、R1192 为 33Ω 匹配电阻,用于阻抗匹配,减少信号反射,保证数据传输的完整性。
2). 命令与时钟引脚
- CMD(SD4_CMD):命令信号线,用于主机向 eMMC 发送指令和接收响应。通过 R25(22Ω)串联电阻进行阻抗匹配,保证信号质量。
- CLK(SD4_CLK):时钟信号线,用于同步数据传输,频率最高可达 200MHz。R1040(22Ω)为匹配电阻,C813(22pF)为滤波电容,靠近 SOC 放置以减少寄生电感。
3). 电源引脚
- VCC1~VCC4、VDDIM:eMMC 的核心电源和 IO 电源引脚,由 P3V3_EMMC 供电(3.3V 左右)。电路中通过 C113~C116、C120 等电容滤波,L26、L27(MPZ1608S121ATDH5 磁珠)抑制电源噪声,保证供电稳定。
- GND:接地引脚,为芯片提供参考地,保证电路的电气稳定性。
4). 复位引脚
- RST_n(EMMC_RST):低电平有效的复位引脚,通过 R24(10KΩ)上拉到 P3V3_EMMC,保证默认高电平(不复位)。当需要复位时,该引脚被拉低,使 eMMC 恢复初始状态。
3、元器件说明
1. 电容
- C117、C116(4.7μF/6.3V):大容量滤波电容,用于滤除电源中的低频噪声,保证电源的稳定性。
- C118、C119、C113~C115、C815(100nF/16V)、C120(1μF/10V):小容量陶瓷电容,用于滤除电源和信号中的高频噪声,实现 “金字塔” 滤波效果,覆盖不同频段的噪声抑制。
- C813(22pF/50V):时钟信号的滤波电容,用于减少时钟信号的高频抖动。
2. 电阻
- R1041~R1048(51KΩ):数据引脚的上拉电阻,保证 DAT0~DAT7 空闲时为高电平,增强信号驱动能力。
- R24(10KΩ):复位引脚的上拉电阻,保证 RST_n 默认高电平。
- R25、R1040、R1191、R1192(22Ω/33Ω):阻抗匹配电阻,用于数据线和时钟线的信号匹配,减少反射和串扰,保证高速信号传输的完整性。
3. 磁珠与电感
- L26、L27(MPZ1608S121ATDH5):铁氧体磁珠,用于抑制电源线上的高频噪声,同时具有一定的限流作用,保证电源的纯净度。
4. 测试点(TP14~TP17)
- 用于电路调试和信号测量,可通过示波器等工具检测电源、数据、时钟等信号的波形和电平,方便排查故障。
4、电路设计要点
- 电源滤波:采用大、小电容并联和磁珠串联的方式,实现宽频段的电源噪声抑制,保证 eMMC 供电稳定。
- 信号完整性:通过串联匹配电阻和上拉电阻,保证数据、时钟、命令等高速信号的传输质量,避免反射和串扰。
- 复位控制:上拉电阻保证复位引脚默认高电平,防止误复位,确保 eMMC 正常工作。
六 测试eMMC通信
1. 首先找到 eMMC 对应的设备节点(通常为/dev/mmcblk0,若有分区则为/dev/mmcblk0p1等,测试时建议直接对设备节点操作,避免影响已有数据):
1. 用dd命令测试(简单直观,适合基础吞吐量测试)
dd可测试顺序读写速度,需注意缓存影响(oflag=direct可禁用缓存,更接近真实硬件速度)。
向 eMMC 写入一个大文件(如 1GB),测试写入吞吐量:
sudo dd if=/dev/zero of=/dev/mmcblk0 bs=1M count=1024 oflag=direct
if=/dev/zero:从空设备读取(生成 0 填充数据)。of=/dev/mmcblk0:写入 eMMC 设备。bs=1M:块大小为 1MB(可根据需求调整,如 4K、128K)。count=1024:写入 1024 个块,总大小 1GB。oflag=direct:禁用页缓存,测试裸设备速度。
从 eMMC 读取一个大文件(需先写入数据,避免读空设备):
sudo dd if=/dev/mmcblk0 of=/dev/null bs=1M count=1024 iflag=direct
of=/dev/null:将读取的数据丢弃。iflag=direct:禁用缓存读取。
2. 用fio工具测试(专业 IO 测试,支持多场景)
fio是 Linux 下强大的 IO 性能测试工具,可模拟顺序 / 随机读写、不同块大小、多线程等场景。
sudo apt-get install fio # Debian/Ubuntu
# 或 sudo yum install fio # CentOS/RHEL
创建xx.fio文件,执行通过fio xx.fio
FIO 配置文件采用 INI 文件格式,由
[section]和key=value键值对组成。
[global]段:全局设置,对所有作业生效
[job_name]段:定义具体的测试作业,可以定义多个作业配置继承规则
作业段会继承
[global]段的设置作业段可以覆盖全局设置
如果没有在全局或作业段中指定,使用 FIO 的默认值
1). I/O 引擎 (ioengine)
定义如何发起 I/O 操作:
ioengine=libaio # Linux 原生异步 I/O(推荐) ioengine=sync # 同步 I/O ioengine=posixaio # POSIX 异步 I/O ioengine=windows # Windows 专用
2). I/O 模式 (rw)
定义读写模式:
# 基本模式 rw=read # 顺序读 rw=write # 顺序写 rw=randread # 随机读 rw=randwrite # 随机写 # 混合模式 rw=randrw # 随机混合读写 rwmixread=70 # 混合中读的比例(%) rwmixwrite=30 # 混合中写的比例(%) # 特殊模式 rw=trim # 擦除/trim rw=randtrim # 随机擦除
3). 块大小 (bs)
定义每次 I/O 操作的数据块大小:
bs=4k # 固定 4KB bs=1M # 固定 1MB bs=4k,8k # 随机选择 4KB 或 8KB bs=4k-64k # 在 4KB 到 64KB 间随机 bs=1k:20%,4k:60%,8k:20% # 按比例分配
4). I/O 深度 (iodepth)
定义同时进行的 I/O 请求数量:
iodepth=1 # 单次 I/O(顺序测试) iodepth=32 # 32 个并发 I/O(随机测试) iodepth=8-64 # 在 8-64 间变化
5). 作业数量 (numjobs)
定义并发运行的相同作业数量:
numjobs=1 # 单线程 numjobs=4 # 4个并发线程 numjobs=8 # 8个并发线程
6). 重要参数分类
1> .文件相关参数
filename=/dev/sdb1 # 测试设备或文件 filename=/testfile size=1G # 每个作业的文件大小 filesize=4G # 总文件大小 offset=1G # 从文件开头跳过的偏移量
2>. 时间控制参数
runtime=300 # 运行时间(秒) time_based=1 # 即使完成所有I/O也继续运行直到超时 ramp_time=10 # 预热时间(秒),不计入统计
3>. 直接 I/O 参数
direct=1 # 绕过页面缓存(重要!) sync=1 # 使用同步I/O确保数据落盘 buffered=0 # 不使用缓冲I/O
4>. 输出和报告参数
group_reporting=1 # 合并报告所有作业 write_bw_log=test # 写入带宽日志 write_iops_log=test # 写入IOPS日志 write_lat_log=test # 写入延迟日志 log_avg_msec=1000 # 日志记录间隔(毫秒)
7). 示例(读写为例)
[global]
ioengine=libaio # IO引擎(libaio支持异步IO)
direct=1 # 禁用缓存
bs=1M # 块大小
size=1G # 测试数据大小
numjobs=1 # 并发任务数
time_based=1 # 按时间测试(可选,也可按size测试)
runtime=60 # 测试时长60秒
[seq_write]
rw=write # 顺序写
filename=/dev/mmcblk0
[seq_read]
rw=read # 顺序读
filename=/dev/mmcblk0
openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。
更多推荐



所有评论(0)