本文转载自:https://blog.csdn.net/u014645605/article/details/52061034

定义:

eMMC (Embedded Multi Media Card) 采用统一的MMC标准接口, 把高密度NANDFlash以及MMCController封装在一颗BGA芯片中。针对Flash的特性,产品内部已经包含了Flash管理技术,包括错误探测和纠正,flash平均擦写,坏块管理,掉电保护等技术

速度:

eMMC4.4的读取速度大约为104MB/s、eMMC 4.5则为200MB/s,eMMC 5.0存储产品,其读取速度为400MB/s,但是因为使用的是8位并行界面,因此性能潜力已经基本到达瓶颈

趋势:

UFS(通用flash存储标准) 2.0有两个版本:HS-G2的理论带宽就有5.8Gbps,也就是超过了740MB/s,HS-G3更是翻番到11.6Gbps,接近了1.5GB/s

主流厂商及产品特性:

三星

镁光

东芝

mmc接口版本

5.1/UFS

4.41/4.5

4.41/4.5

型号

KMQ7X0000SA

MTFC8GACAANA

THGBMAG6A2JBAIR

电压

1.8V

2.7V-3.3V

2.7V-3.3V

读/写速度(MB)

250/90

100/25

100/25

EMMC 硬件分区

Boot1 和Boot2:这两个区域在存储的稳定性、可靠性及擦除次数上都远比UDA要好 ,所以经常放一些关键数据

RPMB:保护性存储,是用来给系统存放一些特殊的、需要进行访问授权的数据(指纹,安全支付)

UDA:AP及用户可以进行读写存储的区域,通常其大小为整块EMMC表示大小的93%左右

sprd:

Boot1:u-boot-spl-16k.bin

Boot2:u-boot.bin

RPMB:未使用(指纹相关)

UDA:剩余的烧写文件

高通:

BOOT1:bootloader

BOOT2:boot.img

RPMB:未用(指纹相关)

UDA:剩余文件

UDA硬件分区上的软件分区

MBR:MBR支持最大2TB磁盘,它无法处理大于2TB容量的磁盘。MBR还只支持最多4个主分区;如果这部分数据被覆盖或破坏,很难修复typedef struct _legacy_mbr {
 u8 boot_code[440];
 __le32 unique_mbr_signature;
 __le16 unknown;
 struct partition partition_record[4];
 __le16 signature;
} __packed legacy_mbr;

GPT:磁盘驱动器容量可以大得多,大到操作系统和文件系统都没法支持。它同时还支持几乎无限个分区数量,限制只在于操作系统;GPT在整个磁盘上保存了这部分信息的副本,因此它更为健壮
typedef struct _gpt_header {
 __le64 signature;
 __le32 revision;
 __le32 header_size;
 __le32 header_crc32;
 __le32 reserved1;
 __le64 my_lba;
 __le64 alternate_lba;
 __le64 first_usable_lba;
 __le64 last_usable_lba;
 efi_guid_t disk_guid;
 __le64 partition_entry_lba;
 __le32 num_partition_entries;
 __le32 sizeof_partition_entry;
 __le32 partition_entry_array_crc32;
} __packed gpt_header;
typedef struct _gpt_entry {
 efi_guid_t partition_type_guid;
 efi_guid_t unique_partition_guid;
 __le64 starting_lba;
 __le64 ending_lba;
 gpt_entry_attributes attributes;
 efi_char16_t partition_name[PARTNAME_SZ];
} __packed gpt_entry;

EMMC 各阶段工作说明

romcode:

EMMC初始化主要完成下面的工作:
1)设置HC为SDR12模式,CLK为26M,数据线为1bit模式;
2)分频系数为66(400K)

uboot阶段:

struct mmc {
 struct list_head link;
 char name[32];//等同于host_name
 void *priv;//关联host
 uint voltages;
 uint version;
 uint has_init;
 uint f_min;
 uint f_max;
 int high_capacity;
 uint bus_width;
 int (*send_cmd)(省略);
 void (*set_ios)(struct mmc *mmc);
 int (*init)(struct mmc *mmc);
 ……..};

struct sdhci_host {
 char *name;
 void *ioaddr;//EMMC控制器基地址
 unsigned int quirks;
 unsigned int host_caps;
 unsigned int version;
 unsigned int clock;
 struct mmc *mmc;//关联emmc
 const struct sdhci_ops *ops;
 int index;

void (*set_control_reg)(struct sdhci_host *host);
 void (*set_clock)(int dev_index, unsigned int div);
 uint voltages;
};

Uboot阶段各个parttion的加载过程:

1.获取硬件分区
2.获取GPT头数据
3.获取ENTRY数组数据
4.遍历ENTRY数组,寻找匹配分区
5.获取该分区block信息
6.完成读取

kernel中的EMMC

EMMC总体架构

文件系统:
1. 提供管理底层文件系统的功能组件(inode、directory entry、page cache等)
2. 提供访问底层文件系统的方法(read、write、open等系统调用)
转换为对具体分区具体块的访问

Card层:
emmc都是块设备,需要提供块设备的驱动程序,这部分就是实现了将emmc如何实现为块设备的。并获取文件系统的request,转发给core层

core层:
这部分完成了不同协议和规范的实现,并且为HOST层的驱动提供接口函数,调用host层的ops
host层:
这部分完成AP测主机的初始化,以及对外设emmc卡的初始化和读写。(平时编写驱动需要修改的地方)

EMMC probe流程:

EMMC 数据读写流程:

至此:EMMC在整个手机启动阶段的流程就完成了

本人一直在学习研究emmc的原理及应用,文章主要对流程做了介绍,但文章中难免存在疏漏,如有问题请邮件至:Leon_htzw@163.com,同时如有关于emmc细节的问题交流也可以发邮件,谢谢

EMMC 介绍【转】的更多相关文章

  1. EMMC 简要介绍

    一直想写一篇关于EMMC的文章,但是因为之前弄了很多PPT,所以一直提不起兴趣,索性直接把之前的一个介绍EMMC的PPT贴出来给大家看看,有什么问题可以直接跟帖,我会第一时间进行解答,谢谢

  2. 迅为iTOP-4418开发板兼容八核6818开发板介绍

    核心板介绍 三星四核S5P4418与八核6818完美兼容 1GB内存/2GB内存可选 电源管理:AXP228,支持动态调频,超低功耗 核心板引出脚最全:四组连接器共320个PIN脚 核心板连接器高度仅 ...

  3. 被忽视的eMMC——A1 SD Bench闪存测试

    一直以来,大家对手机的配置方面都比较关注CPU和GPU的架构.频率.核心数等,却经常忽略了手机闪存的速度.实际上手机的闪存素质对手机日常操作的响应.载入速度同样起到举足轻重的影响,今天给大家介绍的则是 ...

  4. N3292x IBR介绍

    N3292x IBR介绍 1 IBR启动流程 图1-1 IBR启动流程 CHIP_CFG[0] Mode 0 Boot from IBR Recovery Mode with crystal inpu ...

  5. Nand flash 的发展和eMMC

    讨论到eMMC的发展历程,必须要从介绍Flash的历史开始 Flash分为两种规格:NOR Flash和NAND Flash,两者均为非易失性闪存模块. 1988年,Intel首次发出NOR flas ...

  6. eMMC基础技术4:eMMC command

    1.前言 本文主要对eMMC的command进行详细介绍,主要包含如下内容: (1)command类型 (2)command格式 2.command类型 command类型 说明 bc 不带respo ...

  7. eMMC基础技术3:eMMC总线token

    1.前言 本文主要介绍eMMC 总线协议相关的内容,主要包括: (1)command token format (2)response token format (3)data packet form ...

  8. eMMC基础技术11:flash memory

    [转]http://www.wowotech.net/basic_tech/367.html 0.前言 eMMC 是 Flash Memory 的一类,在详细介绍 eMMC 之前,先简单介绍一下 Fl ...

  9. eMMC基础技术9:分区管理

    [转]http://www.wowotech.net/basic_tech/emmc_partitions.html 0.前言 eMMC 标准中,将内部的 Flash Memory 划分为 4 类区域 ...

随机推荐

  1. MongoDB下,启动服务

    D:\MongoDB>mongod --dbpath D:\MongoDB\Data --logpath D:\MongoDB\Log\MongoDB.log --logappend --ser ...

  2. UVa-12563 劲歌金曲

    题目 https://vjudge.net/problem/Uva-12563 给出n首歌和KTV的剩余时间T,因为KTV不会在时间到的时候立刻把歌切掉,而是会等它放完.而<劲歌金曲>长达 ...

  3. [9]Windows内核情景分析 --- DPC

    DPC不同APC,DPC的全名是'延迟过程调用'. DPC最初作用是设计为中断服务程序的一部分.因为每次触发中断,都会关中断,然后执行中断服务例程.由于关中断了,所以中断服务例程必须短小精悍,不能消耗 ...

  4. hdu5067

    题意 给了一个n*m的网格 然后一台挖掘机从(0,0) 这个位置出发,收集完全部的石头回到(0,0)挖掘机可以有无限的载重 用旅行商处理 dp[k][i] 表示在这个集合中最后到达i的最小距离,用集合 ...

  5. flask 在模板中渲染错误消息

    在模板中渲染错误消息 如果form.valicate_on_submit()返回False,说明验证没有通过,对于没有验证通过的字段,WTForms会把错误信息添加到表单类的errors属性中,这是一 ...

  6. webview相关知识

    标签类 1.Web App 建议用的样式 用于覆盖 WebView 默认的样式,使得 App 看起来更像原生的 App,——“不露出马脚” /* document.documentElement.st ...

  7. linux mysql主从复制

    centos7 安装 mariadb 1 yum 源  -- 配置阿里的 2 rmp 方式 3 源码编译方式  -- 专业DBA 一些知识点: 虚拟环境 不影响 redis/ mariadb/mysq ...

  8. Ubuntu 为 root 帐号开启 SSH 登录

    1. 修改 root 密码sudo passwd root 2. 以其他账户登录,通过 sudo nano 修改 /etc/ssh/sshd_config :xxx@ubuntu:~$ su - ro ...

  9. nvidia-docker

    参考资料 https://github.com/NVIDIA/nvidia-docker/wiki/Installation#prerequisites https://github.com/NVID ...

  10. mysql命令(三)

    创建一个名字为Student库: create database Student; 用以下地命令来查看创建的数据库是否成功: show databases; 进入数据库: use Student; 用 ...