eMMC 标准中,将内部的 Flash Memory 划分为 4 类区域,多可以支持 8 个硬件分区,如下图所示:
1.1. 概述
一般情况下,Boot Area Partitions 和 RPMB Partition 的容量大小通常都为4MB,部分芯片厂家也会提供配置的机会。General Purpose Partitions (GPP)则在出厂时默认不被支持,即不存在这些分区,需要用户主动使能,并配置其所要使用的 GPP 的容量大小,GPP 的数量可以为 1 - 4个,各个 GPP 的容量大小可以不一样。User Data Area (UDA)的容量大小则为总容量大小减去其他分区所占用的容量。更多各个分区的细节将在后续小节中描述。
1.2分区编址
eMMC 的每一个硬件分区的存储空间都是独立编址的,即访问地址为 0 - partitionsize。具体的数据读写操作实际访问哪一个硬件分区,是由 eMMC 的 Extended CSD register 的PARTITION_CONFIG Field 中 的 Bit[2:0]: PARTITION_ACCESS 决定的,用户可以通过配置PARTITION_ACCESS 来切换硬件分区的访问。也就是说,用户在访问特定的分区前,需要先发送命令,配置PARTITION_ACCESS,再发送相关的数据访问请求。更多数据读写相关的细节,请参考 2.3总线协议章节。
eMMC 的各个硬件分区有其自身的功能特性,多分区的设计,为不同的应用场景提供了便利。
2.BootArea 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 x128 KB = 32640 KB = 31.875 MB。
2.2从 Boot Area 启动
eMMC 中定义了 Boot State,在 Power-up、HW reset 或者 SW reset后,如果满足一定的条件,eMMC 就会进入该 State。进入 Boot State 的条件如下:
图8.Original Boot启动时序图
图9. AlternativeBoot启动时序图
在 Boot State 下,如果有配置 BOOT_ACK,eMMC 会先发送 “010” 的 ACK 包,接着 eMMC会将 为 128Kbytes xBOOT_SIZE_MULT 的 Boot Data 发送给 Host。传输过程中,Host 可以通过拉高 CMD 信号(Original Boot 中),或者发送 Reset 命令 (Alternative Boot 中) 来中断 eMMC的数据发送,完成 Boot Data 传输。
Boot Data 根据 Extended CSD register 的 PARTITION_CONFIG Field 的Bit[5:3]:BOOT_PARTITION_ENABLE 的设定,可以从 Boot Area Partition 1、BootArea Partition 2 或者 User Data Area 读出。
Boot Data 存储在 Boot Area 比在 User Data Area中要更加的安全,可以减少意外修改导致系统无法启动,无法更新系统的情况出现。