eMMC的这种将Nand Flash芯片和控制芯片封装在一起的设计概念,就是为了简化产品内存储器的使用,客户只需要采购eMMC芯片放进产品中,不需要处理其它复杂的Nand Flash兼容性和管理问题,减少研发成本和研发周期。
图1-1 EMMC的框架
二、EMMC的分区EMMC的分区主要分为四个部分,支持的硬件分区可以达到8个,具体的如下图所示:
图1-2 分区示意图
1、BOOT1&BOOT2 ROM此分区的主要作用是支持emmc启动系统而设计的。该分区的数据,在EMMC上电后,可以通过很简单的协议读取出来,同时在各个platform中都可以支持将ROM代码在上电之后,将EMMC BOOT分区的内容加载到SOC内部的SRAM中执行。
2、RPMB partitionRPMB 是 Replay Protected Memory Block 的简称,它通过 HMAC SHA-256 和 Write Counter 来保证保存在 RPMB 内部的数据不被非法篡改。在实际的应用中,RPMB分区通常用来保存安全相关的数据,例如指纹数据、安全支付相关的秘钥等。
3、General Purpose Partition 1~4此区域则主要用于存储系统或者用户数据。General Purpose Partition 在芯片出厂时,通常是不存在的,需要主动进行配置后,才会存在。
4、User Data Area此区域则主要用于存储系统和用户数据。UDA分区通常会进行更加细致的划分,在安卓系统中,通常会在此区域中分出BOOT/system/userdata等分区。
上面介绍的BOOT分区和RPMB的容量大小通常都为4MB,部分芯片厂家也会提供配置的机会,GPP分区在出厂时默认不被支持,即不支持这些分区,需要用户主动去使能,并配置其所有使用的GPP容量的大小,GPP的数量可以为1-4,各个GPP的容量大小可以不一样,UDA的分区的容量的大小则为总容量的大小减去其它分区所占用的容量。三、BOOT area partitonsBoot Area 包含两个 Boot Area Partitions,主要用于存储 Bootloader,支持 SOC 从 eMMC 启动系统。
两个 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。
四、RPMBRPMB(Replay Protected Memory Block)Partition 是 eMMC 中的一个具有安全特性的分区。
eMMC 在写入数据到 RPMB 时,会校验数据的合法性,只有指定的 Host 才能够写入,同时在读数据时,也提供了签名机制,保证 Host 读取到的数据是 RPMB 内部数据,而不是攻击者伪造的数据。
RPMB 在实际应用中,通常用于存储一些有防止非法篡改需求的数据,例如手机上指纹支付相关的公钥、序列号等。RPMB 可以对写入操作进行鉴权,但是读取并不需要鉴权,任何人都可以进行读取的操作,因此存储到 RPMB 的数据通常会进行加密后再存储。
两个 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。
使用 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。
五、GPPeMMC 提供了 General Purpose Partitions (GPP),主要用于存储系统和应用数据。在很多使用 eMMC 的产品中,GPP 都没有被启用,因为它在功能上与 UDA 类似,产品上直接使用 UDA 就可以满足需求。
六、UDAUser Data Area (UDA) 通常是 eMMC 中最大的一个分区,是实际产品中,最主要的存储区域。
UDA的容量大小不需要设置,在配置完其他分区大小后,再扣除设置Enhanced attribute所损耗的容量,剩下的就是UDA的容量。
软件分区:为了更合理的管理数据,满足不同的应用需求,UDA 在实际产品中,会进行软件再分区。目前主流的软件分区技术有 MBR(Master Boot Record)和 GPT(GUID Partition Table)两种。这两种分区技术的基本原理类似。
软件分区技术一般是将存储介质划分成了多个SW partitions,然后通过一个partiton table来维护这些SW partitions,在partiton table中,每个条目都保存着一个SW partition的起始地址、大小等属性信息,软件系统在系统后,会去扫描partition table,获取存储介质上的各个SW partition信息,然后根据这些信息,将各个partitions加载到系统中,进行数据存储。
七、EMMC的分区实例在一个 Android 手机系统中,各个分区的呈现形式如下:
1、mmcblk0为eMMC的块设备
2、mmcblk0boot0和mmcblk0boot1对应两个BOOT分区
3、mmcblkrpmb则为RPMB partiton
4、mmcblk0px则为UDA划分出来的SW partitions
5、如果存在GPP,名称则为mmcblk0gp1/mmcblk0gp2/mmcblk0gp3/mmcblk0gp4
每一个分区会根据实际的功能来设定名称。
,