找回密码
 立即注册
搜索
搜索附件  
附件中心 知识学习 专业高阶深入 v2-7471f30a8fc876a551c3992d90f57250_1440w.jpg

v2-7471f30a8fc876a551c3992d90f57250_1440w.jpg

附件信息右侧广告
附件下载与主题内容间广告

 

存储芯片 emmc:
eMMC是什么

eMMC是embedded MultiMediaCard的简称,即嵌入式多媒体卡,是一种闪存卡的标准,它定义了基于嵌入式多媒体卡的存储系统的物理架构和访问接口及协议,具体由电子设备工程联合委员会JEDEC订立和发布。它是对MMC的一个拓展,具有体积小,功耗低,容量大等优点,非常适合用作智能手机、平板电脑、移动互联网设备等消费类电子设备的存储介质。
eMMC的构成
eMMC是一种嵌入式、非易失的存储系统,它主要由闪存、闪存控制器和eMMC协议接口等组成,以BGA的形式封装在一起。eMMC的构成如下图所示:

图1 eMMC 系统结构图
2.1 闪存
闪存是一种非易失性存储器,通常用来存放数据,应用和系统程序等。eMMC内部的闪存一般都属于Nand Flash。
2.2 闪存控制器闪存控制器主要用来对内部的Nand Flash进行操作和管理。由于Nand Flash自身的物理特性,需要实现坏块管理、磨损均衡、ECC等诸多功能,这些功能就是由FTL(Flash Translation Layer)来实现。eMMC内部集成的闪存控制器则实现了FTL等功能,减少了由于不同型号Nand Flash的各种特性差异,造成的软件开发复杂度;同时闪存控制器也提供了Cache、Memory array、interleave等多种功能,大大提高了Nand Flash读写操作性能。2.3 eMMC接口
eMMC接口主要实现将eMMC接入到Host的MMC总线上,与Host进行通信,实现eMMC的协议逻辑。
eMMC接口与Host之间的连接如下图:

eMMC 接口图
接口中各信号线的作用如下:
CLK:时钟信号,用于Host与Device间的同步。
Data Strobe:数据锁存信号,Device端的输出信号,用于HS400模式下,频率与CLK相同,主要用于同步从Device端输出的数据。
CMD:用于传输从Host端发出的command和Device端发出的response。
DATA0 ~ DATA7:用于在Host和Device间传输数据。
Reset:复位信号线,主要用于Host对Device进行复位操作。
3 eMMC的工作模式
eMMC共有5种不同的工作模式,具体如下表:
表1 eMMC工作模式




一、eMMC 存储分区结构图

   
      
分区
用途
Boot Area Partitions
存储引导加载程序,支持安全启动和恢复模式
RPMB Partition
存储安全关键数据,防止重放攻击
General Purpose Partitions
OEM 自定义数据分区,用于特定功能或镜像存储
User Data Area
应用程序和用户数据存储

   
   二、分区介绍
  1、Boot Area 分区   
        Boot Area 分区主要存储引导程序(Bootloader)的第一阶段(Primary Bootloader),也称为 BL1 或 PBL(Primary Boot Loader)。这个阶段的引导程序通常非常小,负责加载更复杂的二级引导程序(如 U-Boot、LK 等)   
在设备加电后,SoC 的引导 ROM 会从 Boot Area 分区读取引导代码并加载到内存中执行。   
   
系统启动Boot Area 分区的读取流程   
  • SoC 的内置 Boot ROM 会尝试从 eMMC 的 Boot Area 分区加载启动代码。
  • 如果找到有效的引导代码,就将其加载到 RAM 并执行。
  • 第一阶段引导程序会继续加载更复杂的二级引导程序(如 U-Boot 或其他启动代码),通常从用户数据区或 General Purpose 分区加载。
  • 引导程序最终会加载操作系统的内核并交出控制权。
   
   2、RPMB 分区   
RPMB(Replay Protected Memory Block)分区是一种特殊的存储区域,通常用于嵌入式存储设备(如eMMC或UFS),其主要功能是提供一种安全的、不可篡改的存储空间,用于存储敏感数据或运行安全相关的操作
   特性   
  • 防篡改性:RPMB 使用基于硬件的消息认证码(MAC)机制,确保数据在传输和存储过程中未被篡改。
  • 回放保护:通过计数器机制,防止旧数据包被重复写入(Replay Attack)。
  • 安全访问:只有经过授权的设备和软件可以访问 RPMB 区域
   访问机制   
  • RPMB 不能像普通存储分区一样直接读取或写入,而是通过专门的命令和协议(如 MMC/JEDEC 标准)与设备通信
  • 每次访问需要通过认证,包括读、写、计数器检查等操作。
   认证与密钥   
  • RPMB 区域基于对称加密技术(如 HMAC),访问权限通过预设的共享密钥控制。
  • 钥通常在设备生产时写入,设备运行时不会暴露给软件层。
   使用限制   
  • 容量有限:通常只有几百 KB,适合存储少量关键数据。
  • 不可格式化:一旦配置为 RPMB 分区,无法通过普通手段修改或格式化
   读写流程   
   
RPMB 数据读取的流程如下:
   
  • Host 向 eMMC 发起读 RPMB 的请求,同时生成一个 16 bytes 的随机数,发送给 eMMC。
  • eMMC 将请求的数据从 RPMB 中读出,并使用 Secure Key 通过 HMAC SHA-256 算法,计算读取到的数据和接收到的随机数拼接到一起后的签名。然后,eMMC 将读取到的数据、接收到的随机数、计算得到的签名一并发送给 Host。
  • Host 接收到 RPMB 的数据、随机数以及签名后,首先比较随机数是否与自己发送的一致,如果一致,再用同样的 Secure Key 通过 HMAC SHA-256 算法对数据和随机数组合到一起进行签名,如果签名与 eMMC 发送的签名是一致的,那么就可以确定该数据是从 RPMB 中读取到的正确数据,而不是攻击者伪造的数据。
   
   
RPMB 数据写入的流程如下:
   
  • Host 按照上面的读数据流程,读取 RPMB 的 Write Counter。
  • Host 将需要写入的数据和 Write Counter 拼接到一起并计算签名,然后将数据、Write Counter 以及签名一并发给 eMMC。
  • eMMC 接收到数据后,先对比 Write Counter 是否与当前的值相同,如果相同那么再对数据和 Write Counter 的组合进行签名,然后和 Host 发送过来的签名进行比较,如果签名相同则鉴权通过,将数据写入到 RPMB 中。
      3、General Purpose Partitions 分区   
  • 用于存储 OEM 自定义数据、分区镜像或特定的系统功能数据。
  • 可以根据设备需求进行配置和分配。
      4、User Data Area 分区   
  • 最大的存储区域,用于存储用户数据和文件系统(如 Android 的 /data 分区)。
  • 读写操作与普通存储类似,是主要的应用程序存储区。

MMC 标准中,将内部的 Flash Memory 划分为 4 类区域,最多可以支持 8 个硬件分区,

概述
一般情况下,Boot Area Partitions 和 RPMB Partition 的容量大小通常都为 4MB,部分芯片厂家也会提供配置的机会。General Purpose Partitions (GPP) 则在出厂时默认不被支持,即不存在这些分区,需要用户主动使能,并配置其所要使用的 GPP 的容量大小,GPP 的数量可以为 1 - 4 个,各个 GPP 的容量大小可以不一样。User Data Area (UDA) 的容量大小则为总容量大小减去其他分区所占用的容量。
2. Boot Area Partitions
Boot Area 包含两个 Boot Area Partitions,主要用于存储 Bootloader,支持 SOC 从 eMMC 启动系统。
2.1 容量大小

两个 Boot Area Partitions 的大小是完全一致的,由 Extended CSD register 的 BOOT_SIZE_MULT Field 决定,大小的计算公式如下:
Size = 128Kbytes x BOOT_SIZE_MULT
一般情况下,Boot Area Partition 的大小都为 4 MB,即 BOOT_SIZE_MULT 为 32,部分芯片厂家会提供改写 BOOT_SIZE_MULT 的功能来改变 Boot Area Partition 的容量大小。BOOT_SIZE_MULT 最大可以为 255,即 Boot Area Partition 的最大容量大小可以为 255 x 128 KB = 32640 KB = 31.875 MB。
2.2 从 Boot Area 启动
eMMC 中定义了 Boot State,在 Power-up、HW reset 或者 SW reset 后,如果满足一定的条件,eMMC 就会进入该 State。进入 Boot State 的条件如下:
Original Boot Operation
CMD 信号保持低电平不少于 74 个时钟周期,会触发 Original Boot Operation,进入 Boot State。

3. RPMB Partition
RPMB(Replay Protected Memory Block)Partition 是 eMMC 中的一个具有安全特性的分区。
eMMC 在写入数据到 RPMB 时,会校验数据的合法性,只有指定的 Host 才能够写入,同时在读数据时,也提供了签名机制,保证 Host 读取到的数据是 RPMB 内部数据,而不是攻击者伪造的数据。
RPMB 在实际应用中,通常用于存储一些有防止非法篡改需求的数据,例如手机上指纹支付相关的公钥、序列号等。RPMB 可以对写入操作进行鉴权,但是读取并不需要鉴权,任何人都可以进行读取的操作,因此存储到 RPMB 的数据通常会进行加密后再存储。
3.1 容量大小
两个 RPMB Partition 的大小是由 Extended CSD register 的 BOOT_SIZE_MULT Field 决定,大小的计算公式如下:
Size = 128Kbytes x BOOT_SIZE_MULT
一般情况下,Boot Area Partition 的大小为 4 MB,即 RPMB_SIZE_MULT 为 32,部分芯片厂家会提供改写 RPMB_SIZE_MULT 的功能来改变 RPMB Partition 的容量大小。RPMB_SIZE_MULT 最大可以为 128,即 Boot Area Partition 的最大容量大小可以为 128 x 128 KB = 16384 KB = 16 MB。
3.2 Replay Protect 原理
使用 eMMC 的产品,在产线生产时,会为每一个产品生产一个唯一的 256 bits 的 Secure Key,烧写到 eMMC 的 OTP 区域(只能烧写一次的区域),同时 Host 在安全区域中(例如:TEE)也会保留该 Secure Key。
在 eMMC 内部,还有一个RPMB Write Counter。RPMB 每进行一次合法的写入操作时,Write Counter 就会自动加一 。
通过 Secure Key 和 Write Counter 的应用,RMPB 可以实现数据读取和写入的 Replay Protect。
最新的 eMMC 5.1 版本提供更高的读写速度、命令队列(CMDQ)、高优先级数据处理等功能。虽然 eMMC 仍然广泛用于嵌入式设备,但 UFS(Universal Flash Storage)正在逐步取代它,特别是在高端设备中。
JEDEC的官网如下:
https://www.jedec.org/
官网上关于eMMC 5.1 标准的PDF文档下载地址如下:
https://www.jedec.org/sites/default/files/docs/JESD84-B51.pdf


emmc:全称为embeded MultiMedia Card,是一种嵌入式非易失性存储器系统,由Nand flash和Nand flash控制器组成,以BGA方式封装在一款chip上。
Nand flash:一种存储数据介质;若要读取其中的数据,需要外接的主控电路。
Nor flash:也是一种存储介质;它的存储空间一般比较小,但它可以不用初始化,可以在其内部运行程序,一般在其存储一些初始化内存的固件代码。
在功能上:eMMC则在其内部集成了 Flash Controller,包括了协议、擦写均衡、坏块管理、ECC校验、电源管理、时钟管理、数据存取等功能。相比于直接将NAND Flash接入到Host 端,eMMC屏蔽了 NAND Flash 的物理特性,可以减少 Host 端软件的复杂度,让 Host 端专注于上层业务,省去对 NAND Flash 进行特殊的处理。同时,eMMC通过使用Cache、Memory Array 等技术,在读写性能上也比 NAND Flash要好很多。而NAND Flash 是直接接入 Host 端的,Host 端通常需要有 NAND Flash Translation Layer,即 NFTL 或者 NAND Flash 文件系统来做坏块管理、ECC等的功能。另一方面,emmc的读写速度也比NAND Flash的读写速度快,emmc的读写可高达每秒50MB到100MB以上;

在eMMC器件里,有两种存储器,SRAM(静态随机访问存储器)和NAND闪存。SRAM是位于控制器ASIC里面为了数据暂时保存以及被控制器微处理器快速访问的易失性存储器。NAND阵列是由一个或者多个晶片组成的非易失性存储器
从功能角度来看,NAND阵列空间可以被分成两类,一个是用户可以访问的,一个是用户不可见的。一些用户不可以见的空间被eMMC器件自己用来存储一些重要信息,比容控制金额映射表,固件,寄存器。另外一些用户不可见的NAN存储块可以被用来做加速的SLC块,或者为实时产生的坏块做备份用的保留块。
至于说用户可访问存储空间,隐入了一个新的概念,分区。在一个分区里面,逻辑块的起始地址总是0x00000000; 访问不同的分区需要用到切换指令CMD6;每个分区里面支持的指令是是不完全相同的。eMMC规范一共有四种不同的分区,用户区域分区,通用目的分区,启动分区和RPMB分区。通用目的分区(也叫GPP)是可选的,由用户配置,而其他的三个分在eMMC器件出厂的时候是强制要求的。
启动分区包含两个驱动区域来存储启动代码,这两个启动区域是独立的,可以被用来存储彼此的冗余备份数据。
RPMB分区用来存储保密信息。
启动分区和RPMB分区的大小都是128KB的整数倍。

1. Boot Partition(引导分区)
  • 作用:用于存储引导加载程序(如U-Boot),系统启动时可以直接从该区域加载引导代码。当系统上电复位后,SoC(处理器)内部的 ROM Code(BootROM) 会检测 eMMC 设备,并尝试从 Boot 分区 读取 Bootloader。
  • 特点
    • eMMC通常提供两个Boot分区(Boot Partition 1 和 Boot Partition 2)。
    • 每个Boot分区的大小通常是固定的(如128KB、512KB或4MB,取决于eMMC规格)。
    • 可以通过EXT_CSD[179] BOOT_CONFIG配置哪个Boot分区用于启动。关于EXT_CSD[179] BOOT_CONFIG的详细介绍见本博文后面。
    • 只能通过特殊方式(如u-boot中的eMMC命令mmc bootpart enable或 Linux 系统下的命令dd if=uboot.img of=/dev/mmcblkXboot0)写入。
    • 不能用于普通数据存储。


2. RPMB(Replay Protected Memory Block,防重放保护存储区)
  • 作用
    • 主要用于存储安全相关数据,例如加密密钥、认证信息、防篡改数据等。
    • 具有防重放保护机制,可防止存储数据的回滚攻击。防重放保护通常是指防止攻击者通过回滚存储器内容,恢复到较早的状态,从而绕过安全检查或重现旧的、可能已被撤销的凭据。
  • 特点
    • 只能通过安全认证的方式访问,不能像普通块设备一样读写。
    • 通常容量较小,例如512KB或更大。
    • 不能直接挂载或用于普通存储。


3. General Purpose Partitions(通用分区)
  • 作用
    • 额外的可由用户定义的分区,可用于存储操作系统、应用程序或其他数据。
  • 特点
    • eMMC允许创建最多4个通用分区。
    • 大小可配置,但一旦分配就不能动态调整。
    • 适用于某些特殊用途,例如存放文件系统、日志或者特定数据。


4. User Data Area(用户数据区域)
  • 作用
    • 主要存储操作系统、根文件系统、用户数据等。
  • 特点
    • 这个区域是eMMC中容量最大的部分,相当于普通SD卡的存储空间。
    • 可以划分多个逻辑分区(如ext4、FAT等)。
    • 直接映射为Linux设备,例如 /dev/mmcblkX(裸设备)或 /dev/mmcblkXpY(分区)。
    • 采用可磨损均衡(Wear Leveling)坏块管理机制,以提高eMMC的寿命和稳定性。


5. Enhanced User Data Area(增强型用户数据区)
  • 作用
    • 允许将部分User Data Area转换为SLC模式,以提升写入寿命和可靠性。
  • 特点
    • 通过配置EXT_CSD寄存器来分配。
    • 牺牲存储容量换取更高的耐久性。
    • 适用于高频写入的数据,如日志、数据库等。



eMMC启动过程的两个阶段
读下面的内容的时候会涉及到EXT_CSD[179] 这个重要的配置寄存器字节,下个目录正是对EXT_CSD[179] 的介绍。
eMMC 启动过程通常分为两个阶段:
1. Boot 读取阶段(ROM Code 加载 Bootloader)
  • 触发方式:当系统上电复位后,SoC(处理器)内部的 ROM Code(BootROM) 会检测 eMMC 设备,并尝试从 Boot 分区 读取 Bootloader。
  • 数据来源:由 EXT_CSD[179] (BOOT_PARTITION_ENABLE) 决定,可能是:   
    • Boot 分区 1
    • Boot 分区 2
    • User Area(少见)
  • 数据传输模式:   
    • 普通模式(默认):SoC 使用 eMMC 标准读命令(如 CMD17)。
    • 快速启动模式(eMMC 4.4+ 支持):eMMC 直接将 Boot 分区数据发送到 SoC,无需主机发送额外的读命令。
  • Boot Acknowledge(可选):如果 EXT_CSD[179].BOOT_ACK=1,eMMC 会在 Boot 过程中发送确认信号。

2. 正常数据操作阶段(OS 加载并运行)
  • Bootloader 运行后,它会进一步初始化硬件,并从 eMMC 加载 OS(如u-boot 或 Linux)。
  • 访问数据区域:操作系统通过标准 eMMC 命令访问 User Area其他分区,此时访问的数据分区称为叫当前访问分区(也称为叫“当前活动分区”)。
  • 分区切换:   
    • PARTITION_ACCESS(EXT_CSD[179] 低 3 位)控制当前访问的分区(当前活动分区)为哪个分区。
    • 默认 OS 访问 User Area(PARTITION_ACCESS=0x0)。
    • 若 OS 需要访问 Boot 分区或 RPMB,则需修改EXT_CSD[179] 的 PARTITION_ACCESS字段。


eMMC的EXT_CSD[179] BOOT_CONFIG是什么东西? 名字来源
EXT_CSD这个名字的来源是Extended CSD。CSD是Card-Specific Data的缩写,直译为“卡指定数据”,即为为设置存储卡指定的数据,实际上就是存储器的寄存器。
所以我们通常说:“eMMC 设备的 EXT_CSD寄存器。”
eMMC 设备的 EXT_CSD寄存器是一个 512 字节大小的寄存器空间,用于存储 eMMC 设备的各种扩展配置参数。EXT_CSD[179] 表示 EXT_CSD 寄存器的第 179 个字节(从 0 开始计算)。在 eMMC 规格中,EXT_CSD[179] 这个字节被定义为 BOOT_CONFIG(引导配置),所以出现了标题中的EXT_CSD[179] BOOT_CONFIG这个名字。
eMMC的哪些分区是不可调整的?哪些是可以调整的?
问:eMMC的存储区域是出厂时就划分好的,还是后来根据需要用工具或命令划分的?
答:
1. 出厂默认划分的区域
在 eMMC 出厂时,制造商已经预先划分了以下区域:
eMMC 区域出厂时状态
Boot Partition 1预设大小(如 4MB),无法调整
Boot Partition 2预设大小(如 4MB),无法调整
RPMB Partition预设大小(如 512KB),无法调整
User Data Area整个剩余容量,可以重新分区
General Purpose Partitions(通用分区)默认不存在,需要手动创建

2. 后续可手动调整的部分
虽然 Boot 分区和 RPMB 分区的大小是固定的,但用户可以使用工具或命令进行如下调整:
  • 用户数据区(User Area)划分逻辑分区 → 用 fdisk、parted 等工具对User Area区划分逻辑分区,如 /dev/mmcblk0p1(rootfs)、/dev/mmcblk0p2(data)。
  • 创建通用分区(General Purpose Partitions) → 通过修改 eMMC 的 EXT_CSD 寄存器,将一部分用户数据区转换为通用分区。
  • 转换部分用户数据区为增强型存储(Enhanced User Data Area, SLC模式) → 提升可靠性,但会减少容量。


1. eMMC 启动的基本原理
  • 分区结构
    eMMC设备通常具有特定的分区结构,常见分区包括:
    • Boot Partition: 存储启动程序(Bootloader),通常有两个独立的启动分区(Boot Partition 0 和 Boot Partition 1),用于冗余或备份。
    • RPMB Partition: 安全区域,用于存储加密数据和访问控制信息。
    • User Area: 存储用户数据和操作系统。
  • 启动过程
    • 硬件上电:系统上电后,处理器初始化。
    • ROM代码执行:处理器运行固化在芯片中的启动代码(Boot ROM),用于识别和初始化eMMC。
    • 选择启动分区:根据eMMC设备的配置寄存器,处理器选择从 Boot Partition 0 或 Boot Partition 1 加载启动程序。
v2-7471f30a8fc876a551c3992d90f57250_1440w.jpg
同一主题附件字上面广告
         同一主题附件:
    v2-7471f30a8fc876a551c3992d90f57250_1440w.jpg
    v2-44a74ca759c7043ba7d2aefb7daba354_1440w.jpg
    v2-2693bb4100ae9979635f271d33681eb9_1440w.jpg
    1da84d7ec51043d98fb2419be035afda.png
    d8a1bb59282f4c2b9bd296bf41d181c1.png
    5acd551156b742b1b24a46047d0dac31.png

Archiver|手机版|小黑屋|

GMT+8, 2025-5-6 06:33 Powered by Discuz! X3.5 Licensed