转载自:http://blog.sina.com.cn/s/blog_5c401a150101jcos.html
最近总结了一下关于eMMC分区的一些资料,在此分享给大家,希望对大家在这方面的工作有所帮助:
大家一般所熟悉的分区的概念是在逻辑上将一个磁盘或存储设备分为几个区,每个区当做独立磁盘,以方便使用和管理。例如第一个磁盘的第一个分区叫做sda1,第二个磁盘的第二个分区叫做sda2;第二个磁盘的第一个分区叫做sdb1,第二个磁盘的第二个分区叫做sdb2。
大家所最为熟知的分区方式同时也是最主流的主要有两种:MBR(Master Boot Record)和GPT(GUID Partition Table)。前者应用于绝大多数使用BIOS引导的PC设备(苹果使用EFI的方式),而后者主要是针对MBR的一些缺点进行了改进同时还可以兼容MBR并且支持2TB以上的存储(MBR不支持2TB以上的存储设备)。
Android 2.x.x 版本上使用的是MBR,4.0版本以后就是使用的GPT分区方式。
注意,不管是MBR还是GPT,他们的分区都是指“逻辑上”的!!!即通过软件实现的,文件系统级别的。而我现在要说明的是eMMC本身自己的分区,即物理上的,不是通过软件就能实现的分区。
EMMC的分区有一些是AP不能修改的(如BOOT1、BOOT2和RPMB分区),有一些是可以通过特定的命令和寄存器就可以修改的(如Enhanced Partition和GPAP)。下面就来集体说明一下:
通常,从厂家出来的eMMC 主要由这几个部分组成:
- BOOT Area Partition 1
- BOOT Area Partition 2
- RPMB
- User Data Area
- Vender private area
上面这5个部分中前4项是AP可以通过配置寄存器进行读写并且User Data Area还可以进行分区配置的,如上图所示;下面来对上面的5个部分做一个详细说明:
1. Boot 1 & Boot 2
这两个分区是由厂家在生产过程中配置好了的,并且其大小是不能由AP进行配置的,当然,如果你的公司够牛,量足够大,并且也有这个需求的时候可以去要求厂家重新配置此区域大小,给你专门供货。
Boot 1 和Boot 2这两个区域在存储的稳定性、可靠性及擦除次数上都远比UDA要好(至于原因请往后看),所以很多chipset上都会使用这两个区域来存放一下关键数据,如boot image,default 配置参数等等。当然不同的chipset的配置方法也不尽相同。这个可以找chipset的工程师询问。据笔者所知:以大陆市占最大的两家chipset为例,MTK使用UDA来存放boot data,而使用boot area来存放配置参数;Qualcomm则使用Boot 1 来存放boot data,boot 2 来存放配置参数。
另外,不同的eMMC版本一般对Boot area和RPMB的容量大小需求也不同,如下作一个简单的参考:
2. RPMB
RPMB是Replay Protected Memory Block的缩写,他的存在目的是用来给系统存放一些特殊的、需要进行访问授权的数据;他的请求及回应类型如下所:
据笔者所知,目前大陆的手机及平板厂商还没有一家使用到此区域的。
3. UDA
User Data Area就是AP及用户可以进行读写存储的区域,通常其大小为整块EMMC表示大小的93%左右,即4GB的eMMC UDA的区域只有4GB*93%=3809MB。
之前说的BOOT1&2、RPMB和UDA区域我们都可以认为他们在物理上是独立的(当然都是存在于同一块die上)。即他们各自的物理起始地址都是0x0。这个在出厂的时候就会设置完成。下面我们就来说两种可以在物理上进行独立分区的方式:
a) GPAP
GPAP即General Purpose Area Partitions,eMMC 的spec上定义每个eMMC 最多可以通过配置寄存器来定义4个GPAP:
GPAP配置定义完成之后每一个GPAP的起始地址都为0x0;即可以相应地将其认为是独立的一块区域。只是在存放数据的时候会需要从新根据他的起始地址进行计算然后再存储数据。这样必然会增加一定的工作量;据笔者所知,目前大陆的手机及平板几乎没有用到这个功能。都是使用一整块的UDA,然后通过文件系统去进行逻辑上的分区使用。
我想肯定会有读者想问那这个功能到底有什么用呢?我想说eMMC是一个通过的存储设备,并不止是为手机和平板使用。当一个设备有多个CPU的时候并且他们的功能还不同时,这个时候使用GPAP这个功能就非常方便了。
b) Enhanced Partition
Enhanced Partition这也是一个在手机及平板上使用较少的功能。为什么通过配置原本的UDA就可以变成“Enhanced”的呢?既然这么有用,为什么不将整个UDA配置成为”Enhanced”的呢?别着急,我来一一作答。
我们知道eMMC只是指他的接口标准,而他真正的存储介质还是NAND Flash, 而NAND又分为SLC、MLC和TLC(详细区别请参考我之前的文章),他们的稳定性、可靠性和擦除次数又有很大区别,当然中国厂商最关心的成本也相差很大;目前市场上主流的eMMC还是以MLC的NAND 存储介质为主,而TLC的eMMC也在逐渐的增加。其中以Samsung的TLC 的emmc最为成熟市占率也最高。我们这里先以MLC的EMMC来进行介绍:
以现在市面上最先进的NAND制程20nm的MLC为例,擦除次数大概在3000~5000cycle。而SLC的擦除次数则在25000~40000cycle。很明显SLC 要比MLC性能更好,数据存储更稳定。
而我们这里介绍的Enhanced Partition的主要功能就是将MLC配置成为SLC。现在大家明白他为什么被称之为“Enhanced”的了!是相对于MLC(也就是default storage media)来说的。
当然,从MLC配置为SLC不是没有代价的,这个代价自然就是容量变小,会变多小呢?容量只有原来的一半!!!原本1GB的MLC通过配置成SLC就只剩下512MB了,你说谁会愿意这样去大容量地转换呢?
据笔者所知,目前使用过这个功能的就只有台湾的HTC,他们是用来存储boot data。另外,大陆也有一家大厂正在尝试使用Enhanced Partition来做为swap 虚拟内存使用。
4. Vender Private Area
在eMMC里面除了AP能操作(即可识别并且可以通过地址进行访问)的boot 1&2、RPMB和UDA之外,其实还有一小部分区域是AP看不见也不能进行操作的。这部分区域是由生产厂家预留的,他主要是用来存放这样一些内容: eMMC的FW(想知道是什么请参考我之前的文章),eMMC在boot的时候的code,FTL(Flash Transilation Layer)以及在厂家生产过程中产生的坏块等等。
PS: 不是所有厂家的eMMC都支持Enhanced Partition这个功能,但是只要这个eMMC是支持这个功能的那么他的BOOT Area和RPMB就必须就Enhanced storage media。