zoukankan      html  css  js  c++  java
  • EMMC 介绍【转】

    本文转载自: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在整个手机启动阶段的流程就完成了


  • 相关阅读:
    [NOIP 2012] 疫情控制
    [HDU 6315] Naive Operations
    [BZOJ 3363] Cow Marathon
    单片机的模块化编程
    QT中定时器的使用方法
    47: error: undefined reference to `QWebView::QWebView(QWidget*)'
    如何分析一个QT类
    个人收集的一些库、工具、技术介绍
    点阵字体显示系列之二:汉字显示
    点阵字体显示系列之一:ASCII码字库的显示
  • 原文地址:https://www.cnblogs.com/zzb-Dream-90Time/p/10112249.html
Copyright © 2011-2022 走看看