eMMC协议
eMMC,UFS,USB是常见的nand Flash的封装接口。也就是说使用一个颗flash控制器管理nand Flash,并且将Flash的接口转换为eMMC接口,UFC接口或者USB接口与另一端的处理器对接。
eMMC是什么
eMMC 是 embedded MultiMediaCard 的简称。MultiMediaCard,即MMC, 是一种闪存卡(Flash Memory Card)标准,它定义了 MMC 的架构以及访问Flash Memory 的接口和协议。而eMMC 则是对 MMC 的一个拓展,以满足更高标准的性能、成本、体积、稳定、易用等的需求。
eMMC架构组成
- NAND Flash存储单元
- 闪存控制器
- 坏块管理(Bad Block Management, BBM):自动屏蔽失效存储块,防止数据丢失。
- 纠错码(ECC):检测并修复数据传输中的错误,提高数据完整性。
- 磨损均衡(Wear Leveling):均匀分配写入操作,延长闪存寿命。
- 垃圾回收(Garbage Collection):优化存储空间利用率,减少写入放大问题。
- 标准MMC接口
- 半双工并行总线
- 最高速率支持400MB/s
- 统一不同nand Flash的访问接口
eMMC和SSD的区别
SSD(Solid State Drive),即固态硬盘,是一种基于闪存(Flash Memory)技术的非易失性存储设备,区别于机械硬盘(HDD)没有旋转磁盘和机械读写头。
狭义SSD的组成
- 多通道nand Flash阵列
- 独立主控芯片
- 支持多种协议:PCIE,NVMe等
区别
- SSD是一种存储介质,可以使用多种接口:M.2、SATA、USB。而eMMC是一套标准,包括专用的总线接口。
- eMMC将闪存颗粒、主控芯片及接口协议集成于单一BGV封装;SSD由独立主控芯片与多通道闪存阵列构成。如果要采用SSD,必须购买好几块闪存芯片,一块主控,然后把它们都焊接到主板上,然后复杂的布线,当然还必须考虑到主控芯片与闪存是否兼容的问题·。而eMMC,只要买一块eMMC芯片,然后链接专用的eMMC总线就可以了,无兼容烦恼,难度和占用体积以及主板的复杂度都会降低。
- 性能上,SSD要大幅优于eMMC。
![SSD]()
SSD

eMMC
eMMC接口引脚定义
- CLK:用于主机和eMMC卡间同步
- Data Strobe:只在HS400模式下使用,数据锁存信号,eMMC卡端输出的信号
- CMD:命令线,此信号是双向命令通道,用于设备初始化和命令传输。CMD信号有两种工作模式:用于初始化模式开漏模式和快速命令传输推拉模式
- DAT0-7:这些是双向的数据通道。DAT 信号以推拉模式工作。缺省状态,只有DAT0处于推拉模式,DAT1-7处于上拉(内含上拉),进入4bit后,DAT0-3处于推拉
- Reset:复位信号线,用于主机对额MMC卡进行复位操作
eMMC配置寄存器

CID:设备识别(CID)寄存器宽度为128位。包含了EMMC识别阶段(EMMC协议指定了阶段)中使用的设备识别信息。每个单独的闪存或I/O设备都会有一个唯一对应的识别号码。每种类型的EMMC设备都应该有一个唯一的识别号码。
- CID:设备识别(CID)寄存器宽度为128位。包含了EMMC识别阶段(EMMC协议指定了阶段)中使用的设备识别信息。每个单独的闪存或I/O设备都会有一个唯一对应的识别号码。每种类型的EMMC设备都应该有一个唯一的识别号码。
- RCA:可写的16位相对设备地址(RCA)寄存器携带在设备标识期间由主机分配的设备地址。此地址用于设备标识程序之后的寻址主机-设备通信。RCA寄存器的默认值为0x0001。
- DSR:16位驱动位寄存器(DSR)。它可选地用于提高扩展运行条件下的总线性能(取决于总线长度、传输速率或设备数量等参数)。CSD寄存器携带着有关DSR寄存器使用情况的信息。DSR寄存器的默认值为0x404。
- CSD:设备特定数据(CSD)寄存器提供有关如何访问设备内容的信息。同时也定义了数据格式、纠错类型、最大数据访问时间、数据传输速度、是否可以使用DSR寄存器等内容。寄存器的可编程部分可以通过host 下发 CMD27更改。
- OCR:32位操作条件寄存器(OCR)存储着EMMC的VDD电压数据和访问模式。此外,该寄存器包括一个状态信息位。如果EMMC上电过程已经完成,则设置此状态位。
- EXT_CSD:外扩CSD寄存器定义了EMMC的属性和需要设定的工作模式。其长度为512字节。最高位有效的320字节表示的是属性段,用于定义EMMC的功能,不可以被host侧修改。较低的192字节是模式段,用于定义EMMC正在工作的配置条件。这些模式可以通过SWITCH命令由host进行更改。
eMMC工作模式

eMMC总线通信协议
- 命令:启动一种操作的Token,命令从主机发往设备,在CMD线路上串行传输。
- 应答:从设备发往主机作为对上一命令的回答的Token,在CMD线路上串行传输。
- 数据:在主从机之间双向传输,总线宽度可以是1-bit(缺省)、4-bit 和 8-bit
命令格式

每一个Token,都是由一个起始位(’0’)前导,以一个停止位(’1’)终止。总长度是 48 比特。每一个 Token 都用CRC保护,因此可以检测到传输错误,可重复操作。

命令格式可以分为4种模式:
- 无应答广播命令(bc)
- 有应答广播命令(bcr)
- 点对点寻址命令(ac),无DAT数据
- 寻址数据传输命令(adtc),有DAT数据

应答格式
所有的应答均通过命令线CMD发送,编码的长度取决于应答类型,应答Token类型有有 5 种编码方案,分别为R1、R2、R3、R4、R5。Token 长度是 48 或 136 比特。
R1(正常应答类型)

编码长度48bit,bits 45:40 表示应答相对的命令索引,bit 8:39表示欲发送设备的状态信息。
R2(CID CSD寄存器)

编码长度136bit,CID寄存器的内容,作为对CMD2和CMD10的应答发送。CSD寄存器内容作为对CMD9应答发送。并且CID和CSD寄存器只有bit 127:1被发送。
R3(OCR寄存器)

编码长度48bit,OCR寄存器作为对CMD1的应答发送
R4(快速I/O)

编码长度48bit,参数域包含了被寻址设备的RCA、要读写的寄存器地址和内容。
R5(中断请求)

编码长度48bit,如果应答是主机生成的,参数的RCA应为0。
数据格式
1 Bit Bus SDR

CRC 为 Data 的 16 bit CRC 校验值,不包含 Start Bit
4 Bits Bus SDR

各个 Data Line 上的 CRC 为对应 Data Line 的 Data 的 16 bit CRC 校验值。
8 Bits Bus SDR

8 Bits Bus DDR

在DDR模式下,起始位和停止位只在上升沿采样,但占用一个时钟周期,也就是说,在下降沿不采样。
Data Line 在时钟的上升沿和下降沿都会传输数据,其中上升沿传输数据的奇数字节 (Byte 1,3,5 …),下降沿则传输数据的偶数字节(Byte 2,4,6 …)。此外,在 DDR 模式下,1 个 Data Line 上有两个相互交织的 CRC16,上升沿的 CRC 比特组成 odd CRC16,下降沿的 CRC 比特组成 even CRC16。odd CRC16 用于校验该 Data Line 上所有上升沿比特组成的数据,even CRC16 则用于校验该 Data Line 上所有下降沿比特组成的数据。
读数据操作
单块读
CMD17:直接发送读命令,参数为要写入的数据地址信息,只读一个块。
多块读
CMD18:直接发送读命令,参数为要写入的数据地址信息,并且一直读下去。
CMD12:停止命令,停止传输。

写数据操作
单块写
CMD24:直接发送写命令,参数为要写入的数据地址信息,只写一个块。
多块写
多块写的模式有两种:
一种是:设置要传输的数据块的个数,达到个数后,自动停止
CMD16:设置要传输的块长度
CMD25:开始发送CMD16指定长度的数据块,直到达到设置的数据块写入完成。
另一种是:一直传输数据,直到接收停止数据的命令
CMD25:开始发送数据块,一直等待数据发送完全
CMD12:停止命令,停止传输。

eMMC内部分区管理

BOOT Area Partition 1 & 2
此分区主要是为了支持从 eMMC 启动系统而设计的。该分区的数据,在 eMMC 上电后,可以通过很简单的协议就可以读取出来。同时,大部分的 SOC 都可以通过 GPIO 或者 FUSE 的配置,让 ROM 代码在上电后,将 eMMC BOOT 分区的内容加载到 SOC 内部的 SRAM 中执行。
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 等分区。


浙公网安备 33010602011771号