存储相关知识②---eMMC协议
摘要:本文深入介绍了 eMMC(嵌入式多媒体控制器)的核心概念、内部架构、接口协议与速度模式。文章详细解析了 eMMC 的四层协议架构(物理层、传输层、命令层),包括信号线定义、电压规范、总线宽度、数据块格式、传输模式及 CRC 校验机制。最后,文章梳理了 eMMC 从复位到进入高速模式的完整初始化流程,为嵌入式开发者提供了全面的技术参考。
基础概念与定义
一、eMMC (embedded Multi-Media Controller) :它把NAND Flash和控制芯片打包成一个BGA封装,通过并行总线与Host通信。
二、eMMC 内部主要由三大核心组件构成 :
①NAND 闪存阵列------Flash Memroy(负责实际的数据存储,采用 SLC/MLC/TLC/QLC 等不同类型的 NAND 闪存颗粒)
②闪存控制器(核心大脑)-Flash Controller(控制器是 eMMC 性能和可靠性的关键,通常基于 ARM Cortex-M 核心,内置专用硬件加速单元)
③主机接口------Interface(提供标准 MMC 接口,与主机处理器通信)

三、接口协议与速度模式
eMMC 采用并行总线架构,支持多种传输模式:

①HS400 模式是 eMMC 的最高速度模式,在 200MHz 时钟下,利用时钟的上升沿和下降沿同时传输数据,实现 400MB/s 的理论最大带宽。
②HS400ES(Enhanced Strobe) 模式在 HS400 基础上增加了由 eMMC 设备返回的选通信号,主机使用该信号进行数据采样,大幅提高了高速传输的可靠性和抗干扰能力。
eMMC协议
eMMC采用分层架构设计,将复杂的存储操作抽象为简单的命令 - 响应机制,同时屏蔽了 NAND 闪存的底层物理特性。
一、协议分层架构
eMMC 协议采用四层结构,从下到上依次为:

物理层
一、信号线定义
eMMC 总线共包含11 条信号线,其中 10 条为标准信号线,1 条为可选复位线:

关键特性:
①CMD 线支持两种工作模式:开漏模式(初始化阶段)和推拉模式(高速传输阶段)
②DAT 线始终工作在推拉模式
③DQS 信号仅在 HS400 及以上模式下使用,由 eMMC 设备驱动
二、电压规范
eMMC 支持双电压操作:
①VCC:核心电源,典型值 3.3V(范围 2.7V~3.6V)
②VCCQ:I/O 接口电源,支持 3.3V 和 1.8V 两种电平
高速模式(HS200/HS400)必须使用 1.8V VCCQ
三、总线宽度
①默认上电后为1 位模式(仅 DAT0 工作)
②可通过 CMD6 命令切换为4 位模式或8 位模式
③HS400 模式强制要求使用8 位总线宽度以达到最大吞吐量
传输层
一、 数据块格式
eMMC 以数据块为基本传输单位,典型块大小为 512 字节。
每个数据块包含:
①起始位:1bit,固定为 0
②数据负载:512 字节(或其他配置大小)
③CRC16:16 位循环冗余校验,保护数据块的完整性
④停止位:1bit,固定为 1
二、 传输模式
eMMC 支持多种数据传输模式,速度从低到高依次为:
① 单数据速率 (SDR -Single Data Rate) 模式:在时钟的上升沿传输数据
包括:标准 SDR (0-26MHz)、高速 SDR (0-52MHz)、HS200 (0-200MHz)
②双数据速率 (DDR -Double Data Rate) 模式:在时钟的上升沿和下降沿同时传输数据
包括:高速 DDR (DDR52, 0-52MHz)、HS400 (0-200MHz)
③HS400ES (Enhanced Strobe) 模式:eMMC 5.1 引入的增强模式
使用设备输出的DQS 信号进行数据采样,而非主机时钟,大幅提高了高速传输的可靠性和抗干扰能力
三、CRC 校验机制
①命令和响应使用CRC7校验
②数据块使用CRC16校验
③SDR 模式下每个数据块附加一个 CRC16
④DDR 模式下每个数据块附加两个 CRC16(偶数字节和奇数字节各一个)
命令层
一、命令帧格式
所有 eMMC 命令均为48 位固定长度,在 CMD 线上串行传输:
bash
起始位(1bit) + 传输方向(1bit) + 命令索引(6bit) + 参数(32bit) + CRC7(7bit) + 停止位(1bit)
1.起始位:固定为 0,表示命令开始
2.传输方向:固定为 1(主机→设备)
3.命令索引:0~63,标识不同的命令
4.参数:32 位,携带命令相关的地址、模式等信息
5.CRC7:7 位循环冗余校验,保护命令帧的完整性
6.停止位:固定为 1,表示命令结束
二、命令分类
eMMC 5.1 协议定义了11 类命令,按功能划分:

三、响应命令
每个命令都有对应的响应类型,eMMC 共定义了8 种响应格式,长度为 48 位或 136 位

R1 响应状态位:R1 响应的 32 位状态字段包含了设备的详细状态信息,如操作成功、擦除错误、写保护等。
eMMC完整初始化流程
eMMC 上电后必须经过严格的初始化流程才能进入正常工作状态,
完整步骤如下:
①上电复位 :VCC 和 VCCQ 上电稳定后,主机提供时钟信号(频率 < 400kHz)
②软件复位 :主机发送CMD0 ,将 eMMC 设备复位到空闲状态
③电压协商 :主机发送CMD8 ,检测设备支持的电压范围
④初始化完成检测 :主机循环发送CMD1 ,直到设备返回 OCR 寄存器且忙位清零
⑤获取设备 ID :主机发送CMD2 ,获取设备的唯一 CID 号
⑥分配相对地址 :主机发送CMD3 ,为设备分配一个 16 位的相对地址 (RCA)
⑦获取 CSD 寄存器 :主机发送CMD9 ,获取设备的 CSD 寄存器(包含容量、速度等信息)
⑧选择设备 :主机发送CMD7 ,使用 RCA 选择该设备进入传输状态
⑨配置总线参数 :通过CMD6 命令配置总线宽度、速度模式等参数
⑩进入高速模式:切换到 HS200 或 HS400 模式,提高时钟频率