eMMC现在在嵌入式系统中应用的非常广泛了,值得专门学习一下。把看到的各种文章,和标准文档中的东西煮成一锅端给各位。

一、技术简介

1.1.名词解释

嵌入式多媒体卡(Embedded Multimedia Card)是一种新的存储技术,由MMC协会所订立。该架构标准将MMC组件(闪存加控制器)放入一个小的球栅数组封装(BGA)中,是一种主要用于印刷电路板的嵌入式非易失性存储器系统。

说人话,eMMC就是把多媒体存储组件放到BGA封装的芯片里面,这个多媒体组件是Flash,而目前,绝大部分手机和平板等移动设备中所使用的eMMC内部的Flash Memory都属于NAND Flash。

1.2基本技术原理

简单地说,eMMC=Nand Flash+控制器+标准封装

eMMC的设计概念,就是为了简化手机内存储器的使用,将NAND Flash芯片和控制芯片设计成1颗MCP芯片,手机客户只需要采购eMMC芯片,放进新手机中,不需处理其它繁复的NAND Flash兼容性和管理问题。

eMMC的整体架构如下图片所示:

eMMC 则在其内部集成了 Flash Controller,用于完成擦写均衡、坏块理、ECC校验等功能,让 Host 端专注于上层业务,省去对 NAND Flash 进行特殊的处理。

EMMC具有以下优势:

1.简化类手机产品存储器的设计。

2.更新速度快。

3.加速产品研发速度。

来自 <https://baike.baidu.com/item/eMMC>

1.3技术演进和主要技术标准

eMMC发展很快,最新的标准是2019年6月份release的5.1A,标准的代号是JESD84-B51A

https://www.jedec.org/standards-documents/technology-focus-areas/flash-memory-ssds-ufs-emmc/e-mmc

私信我可以获取pdf版本的标准。下面的技术细节介绍很多也是引用自标准文档。

下表列举了市面上几种常见的eMMC标准的读写速度。

上面数据来自维基百科,看JESD84-B51A里面的描述,eMMC5.1在HS400模式下,最高可以达到400MB/s。

二、技术细节

2.1基本架构

eMMC规范主要定义了Device Controller和接口的相关规范,如图中蓝色部分标识

系统主要包含设备控制器、flash存储器和总线三个部分。

2.2eMMC控制器

2.2.1eMMC操作模式

主要有5种操作模式:

1. boot mode

有三种情况会进入boot mode:上电;硬件reset信号;发送CMD0并带参数0xf0f0f0f0

2.device identification mode

如果boot mode完成或者host/device不支持boot mode,则会进入此模式,接收到CMD3(SET_RCA)会退出此模式,进入transfer模式的standby state

3. interrupt mode

host和device会同时进入或退出中断模式。中断模式没有数据传输,唯一允许的消息是设备发送给host已经进入中断模式

4.data transfer mode

指定完RCA后,device进入此模式;host在identification device后进入此模式

5.inactive mode

三种途径进入此模式:操作电压非法;访问模式非法;通过CMD15(GO_INACTIVE_MODE)命令

2.2.2 device寄存器

有三种方式可以对设备reset:

1.断电在上电;

2.reset信号;

3.发送特定命令

来自 <https://www.cnblogs.com/smartjourneys/p/6652388.html>

2.3Flash Memory

2.3.1分区管理

eMMC 在内部对 Flash Memory 划分了几个主要区域:

  1. BOOT Area Partition 1 & 2
    此分区主要是为了支持从 eMMC 启动系统而设计的。
    该分区的数据,在 eMMC 上电后,可以通过很简单的协议就可以读取出来。同时,大部分的 SOC 都可以通过 GPIO 或者 FUSE 的配置,让 ROM 代码在上电后,将 eMMC BOOT 分区的内容加载到 SOC 内部的 SRAM 中执行。
  2. RPMB Partition
    RPMB 是 Replay Protected Memory Block 的简称,它通过 HMAC SHA-256 和 Write Counter 来保证保存在 RPMB 内部的数据不被非法篡改。
    在实际应用中,RPMB 分区通常用来保存安全相关的数据,例如指纹数据、安全支付相关的密钥等。
  3. General Purpose Partition 1~4
    此区域则主要用于存储系统或者用户数据。 General Purpose Partition 在芯片出厂时,通常是不存在的,需要主动进行配置后,才会存在。
  4. User Data Area
    此区域则主要用于存储系统和用户数据。
    User Data Area 通常会进行再分区,例如 Android 系统中,通常在此区域分出 boot、system、userdata 等分区。

2.4.1 eMMC总线协议

eMMC 总线中,可以有一个 Host,多个 eMMC Devices。总线上的所有通讯都由 Host 端以一个 Command 开发发起,Host 一次只能与一个 eMMC Device 通讯。

系统在上电启动后,Host 会为所有 eMMC Device 逐个分配地址(RCA,Relative device Address)。

当 Host 需要和某一个 eMMC Device 通讯时,会先根据 RCA 选中该 eMMC Device,只有被选中的 eMMC Device 才会响应 Host 的 Command。

(1)包含四种token

  • command: 任何操作都要以CMD开始,只能由host发往device,且要串行完成;
  • response: 在接收到host端发送的CMD,device作为回应将通过command line发送一个response,只能有device发往host,且只能通过command line串行传输;
  • data: data可由host发送device(写)可以由device发往host(读),data线可采用1线,4线,8线传输,对于每条data线,可以选择单沿传输(single data rate)还是双沿传输 (dual data rate)
  • crc status:用于device发送给host告知接收到的写入数据校验是否成功

注:有些CMD是不需要发送respnse回应的,后面会有讲述

(2)device地址采用session地址,由host controller在初始化阶段指定???

(3)device通过CID进行识别;

(4)bus操作由CMD,response,data中的一种或几种组成,包括三种:CMD;CMD+response;CMD+response+data;

(5)读(写)数据时,data block后跟CRC bits,支持单个data block读(写)和multi blocks读(写),当multi blocks读(写)时,command发送stop命令表示读(写)结束;

(6)写数据时,device通过DATA0 的busy位来告知host当前block写入是否完成;

2.4.2 bus speed modes

随着 eMMC 协议的版本迭代,eMMC 总线的速率越来越高。为了兼容旧版本的 eMMC Device,所有 Devices 在上电启动或者 Reset 后,都会先进入兼容速率模式(Backward Compatible Mode)。

在完成 eMMC Devices 的初始化后,Host 可以通过特定的流程,让 Device 进入其他高速率模式,目前支持以下的几种速率模式

2.4.3 clk control

1.总线速率在任何时刻都可以改变;

2.不带回应的命令,命令结束位后有8个clock;

3.带有回应的命令,设备响应结束位后有8个clock;

4.读数据传输。在上个data blcok的结束位后有8个clock;

5.写数据传输,CRC status token结束位后有8个clock

2.4.4 Error conditions

1.CRC and illegal command

如果发送给某地址的设备的命令的CRC检测错误,则不会执行这条命令,也不会回应

2.Time-out conditions

读写擦除操作的超时时间,一般超时时间是典型时间的10倍,spec中规定了每种操作的超时时间

3.Read ahead in multiple block read operation

为了提高效率,当有多个块读取时,设备可能会超前读取,如果host读取的最后一个物理地址,那么device会出错,因此host要忽略这个错误

2.4.5 Minimum performance

TODO,参考spec6.9.2

2.4.6 Memory array partitioning

BYTE:基本的传输单元

BLOCK:面向读写命令的操作单元

GROUP: for erase and WP

2.4.7 timing

TODO 见 spec 6.15

2.5硬件设计

2.5.1总线

各个信号的用途如下所示:

Clock:用于同步的时钟信号。

Data Strobe:此信号是从Device端输出的时钟信号,频率和CLK信号相同,用于同步从Device端输出的数据。

CMD:此信号用于传输Host的command和Device的response。

Data[7:0]:用于传输数据的8bit总线。

总线的硬件设计是由最高速度工作模式来决定的,下图是HS400速度模式下的负载要求,

上述负载模型只是参考,系统设计人员应使用IBIS或其他仿真工具将参考负载与系统环境相关联。下图是《Atlas 200 硬件开发指南 》中的建议

https://support.huawei.com/enterprise/zh/doc/EDOC1100079546/44a1466a

在某款海思处理器中他们给出的建议为详细一些:

2.5.2电源

1.VCCQ主要用于MMC IO BLOCK的供电也就是与host接口IO部分的供电,同时也给eMMC core供电;VCC主要给eMMC内部的flash memory,以及eMMC core与flash接口部分IO的供电;

VCCQ和VCC分为两种电压,一种电压是high voltage(2.7v~3.6v),一种电压是dual voltage(1.70v~1.95v和2.7v~3.6v)

2.VSSQ是IO的地也就是eMMC内部的CORE的地,VSS是eMMC内部的flash的地;

注:VCCQ一定要小于或等于VCC

三、技术拓展

3.1NAND Flash

NAND Flash广泛应用在各种存储卡,U盘,SSD,eMMC等等大容量设备中。它的颗粒根据每个存储单元内存储比特个数的不同,可以分为 SLC(Single-Level Cell)、MLC(Multi-Level Cell) 和 TLC(Triple-Level Cell) 三类。其中,在一个存储单元中,SLC 可以存储 1 个比特,MLC 可以存储 2 个比特,TLC 则可以存储 3 个比特。

延伸阅读

https://blog.51cto.com/12557713/1895149

3.2NAND Flash 和NorFlash的区别

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐