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架构组成

  1. NAND Flash存储单元
  2. 闪存控制器
  • 坏块管理(Bad Block Management, BBM):自动屏蔽失效存储块,防止数据丢失。
  • 纠错码(ECC):检测并修复数据传输中的错误,提高数据完整性。
  • 磨损均衡(Wear Leveling):均匀分配写入操作,延长闪存寿命。
  • 垃圾回收(Garbage Collection):优化存储空间利用率,减少写入放大问题。
  1. 标准MMC接口
  • 半双工并行总线
  • 最高速率支持400MB/s
  • 统一不同nand Flash的访问接口

eMMC和SSD的区别

SSD(Solid State Drive),即固态硬盘,是一种基于闪存(Flash Memory)技术的非易失性存储设备,区别于机械硬盘(HDD)没有旋转磁盘和机械读写头。

狭义SSD的组成

  1. 多通道nand Flash阵列
  2. 独立主控芯片
  3. 支持多种协议:PCIE,NVMe等

区别

  1. SSD是一种存储介质,可以使用多种接口:M.2、SATA、USB。而eMMC是一套标准,包括专用的总线接口。
  2. eMMC将闪存颗粒、主控芯片及接口协议集成于单一BGV封装;SSD由独立主控芯片与多通道闪存阵列构成。如果要采用SSD,必须购买好几块闪存芯片,一块主控,然后把它们都焊接到主板上,然后复杂的布线,当然还必须考虑到主控芯片与闪存是否兼容的问题·。而eMMC,只要买一块eMMC芯片,然后链接专用的eMMC总线就可以了,无兼容烦恼,难度和占用体积以及主板的复杂度都会降低。
  3. 性能上,SSD要大幅优于eMMC。
    SSD

SSD

eMMC

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设备都应该有一个唯一的识别号码。

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

  1. 无应答广播命令(bc)
  2. 有应答广播命令(bcr)
  3. 点对点寻址命令(ac),无DAT数据
  4. 寻址数据传输命令(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寄存器的内容,作为对CMD2CMD10的应答发送。CSD寄存器内容作为对CMD9应答发送。并且CIDCSD寄存器只有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 等分区。

posted @ 2025-09-05 14:27  江子无怒  阅读(0)  评论(0)    收藏  举报  来源