本文转载自:https://blog.csdn.net/wxh0000mm/article/details/77864002

转自:http://blog.csdn.net/junzhang1122/article/details/48142529

大家一般所熟悉的分区的概念是在逻辑上将一个磁盘或存储设备分为几个区,每个区当做独立磁盘,以方便使用和管理。例如第一个磁盘的第一个分区叫做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 主要由这几个部分组成:

1.    BOOT Area Partition 1

2.    BOOT Area Partition 2

3.    RPMB

4.    User Data Area

5.    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。

eMMC分区详解【转】的更多相关文章

  1. oracle表分区详解

    原文来自:http://www.cnblogs.com/leiOOlei/archive/2012/06/08/2541306.html oracle表分区详解 从以下几个方面来整理关于分区表的概念及 ...

  2. 基于集合成工控机Ubuntu系统安装分区详解

    基于集合成工控机Ubuntu系统安装分区详解 硬件描述:双核的CPU,128G的固态硬盘 软件描述:使用Ubuntu12.04系统,内核3.8.0-29版本,QT4.8.1版本 1.新建分区表 /de ...

  3. SQL Server表分区详解

    原文:SQL Server表分区详解 什么是表分区 一般情况下,我们建立数据库表时,表数据都存放在一个文件里. 但是如果是分区表的话,表数据就会按照你指定的规则分放到不同的文件里,把一个大的数据文件拆 ...

  4. linux下磁盘分区详解 图文(fdisk;mkfs)

    linux分区不同于windows,linux下硬盘设备名为(IDE硬盘为hdx(x为从a-d)因为IDE硬盘最多四个,SCSI,SATA,USB硬盘为sdx(x为a-z)),硬盘主分区最多为4个,不 ...

  5. SQL SERVER分区详解(1-5)

    转自: (五)SQL Server分区自动化案例     (四)SQL Server分区管理     (三)索引分区知识详解     (二)SQL Server分区创建过程     (一)SQL Se ...

  6. linux下磁盘分区详解

    Centos下磁盘管理     1.磁盘分区格式说明 linux分区不同于windows,linux下硬盘设备名为(IDE硬盘为hdx(x为从a—d)因为IDE硬盘最多四个,SCSI,SATA,USB ...

  7. Fdisk 分区详解

    Fdisk 分区详解 来源 http://blog.itpub.net/20674423/viewspace-722812/ 1.             通过Fdisk查看系统分区详细信息: Fdi ...

  8. (一)SQL Server分区详解Partition(目录)

    一.SQL Server分区介绍 在SQL Server中,数据库的所有表和索引都视为已分区表和索引,默认这些表和索引值包含一个分区:也就是说表或索引至少包含一个分区.SQL Server中数据是按水 ...

  9. MySQL的表分区详解

    这篇文章主要介绍了MySQL的表分区,例如什么是表分区.为什么要对表进行分区.表分区的4种类型详解等,需要的朋友可以参考下 一.什么是表分区通俗地讲表分区是将一大表,根据条件分割成若干个小表.mysq ...

随机推荐

  1. 前端流程图jsplumb学习笔记

    1.这篇博客很好,另外两个是官网文档 http://www.cnblogs.com/leomYili/p/6346526.html https://jsplumbtoolkit.com/communi ...

  2. Rpgmakermv(25) 游戏数据

    随着对RMMV插件了解的深入,我们会发现如果我们想要对游戏数据进行一些扩展,首先要了解游戏数据,游戏数据在官方代码中的rpg_managers.js里,这一节我们将要对这个官方类有一些基础的了解,并且 ...

  3. Rpgmakermv(24 )yep_coreengine

    ==左部为原文,右边我做了简要翻译=================================== Introduction and Instructions ================= ...

  4. 51ll网产品信息保存为txt文件

    import requests from pyquery import PyQuery as pq url='http://www.51xxx.com/Try/index/p/3' headers={ ...

  5. python: ImportError: cannot import name 'Style' from 'openpyxl.styles' 解决方法

    import os, openpyxl from openpyxl.styles import Font, Style os.chdir("C:\\") wb = openpyxl ...

  6. flask请求钩子、HTTP响应、响应报文、重定向、手动返回错误码、修改MIME类型、jsonify()方法

    请求钩子: 当我们需要对请求进行预处理和后处理时,就可以用Flask提供的回调函数(钩子),他们可用来注册在请求处理的不同阶段执行的处理函数.这些请求钩子使用装饰器实现,通过程序实例app调用,以 b ...

  7. Linux基础命令---netstat显示网络状态

    netstat netstat指令可以显示当前的网络连接.路由表.接口统计信息.伪装连接和多播成员资格等信息. 此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.SUSE.open ...

  8. thinkphp 检测验证码

    /** * 检测验证码 * @param integer $id 验证码ID * @return boolean 检测结果 */function check_verify($code, $id = 1 ...

  9. Leetcode480-Sliding Window Median

    Median is the middle value in an ordered integer list. If the size of the list is even, there is no ...

  10. JVM垃圾回收算法及分代垃圾收集器

    一.垃圾收集器的分类 1.次收集器 Scavenge GC,指发生在新生代的GC,因为新生代的Java对象大多都是朝生夕死,所以Scavenge GC非常频繁,一般回收速度也比较快.当Eden空间不足 ...