一、 eMMC介绍

1. eMMC是什么

eMMC (Embedded Multi Media Card)是MMC协会订立、主要针对手机或平板电脑等产品的内嵌式存储器标准规格。
由一个嵌入式存储解决方案组成,带有MMC(多媒体卡)接口、快闪存储器设备及主控制器,所有都在一个小型的BGA 封装。
接口速度高达每秒52MBytes,eMMC具有快速、可升级的性能。同时其接口电压可以是1.2V、1.8V或者是3.3V。
它是在NAND闪存芯片的基础上,额外集成了控制器,并将二者“打包”封装封成一颗BGA芯片,从而减少了对PCB主板的空间占用,也是移动设备中普及度最高的存储单元。

图1. eMMC实物

2. eMMC 的整体架构

eMMC 的整体架构如下:


图2. eMMC 的整体架构

eMMC 内部是把NAND Flash芯片(Flash内存阵列) 、Device Controller芯片(也叫Flash控制器、eMMC控制器)封装在一块。
Flash控制器负责管理内存,并且提供标准接口,使得EMMC能够自动调整主机与从机的工作方式,没有位数限制,不需要处理其他繁杂的NAND Flash兼容性和管理问题,同时,控制器是其卡的应用和多媒体总线之间的联系介质,它能在应用程序总线和标准多媒体总线之前完成协议转换。他的通信基于先进的10个信号总线,通信协议被定义为这个标准的一部分,简称多媒体模式。 eMMC的主要用处,看看下面各模块的作用也基本可以清楚了。

3. 各组成部分

3.1 NAND Flash

NAND Flash 是一种非易失性的存储器,通常在嵌入式系统中用于存放系统、应用和数据等,类似与 PC 系统中的硬盘。
eMMC 在内部对 NAND Flash 划分了几个主要区域,如下所示:

图3. eMMC 内部NAND Flash 主要区域

  • BOOT Area Partition 1 & 2
    此分区主要是为了支持从 eMMC 启动系统而设计的
    该分区的数据,在 eMMC 上电后,可以通过很简单的协议就可以读取出来。同时,大部分的 SOC 都可以通过 GPIO 或者 FUSE 的配置,让 ROM 代码在上电后,将 eMMC BOOT 分区的内容加载到 SOC 内部的 SRAM 中执行

  • RPMB Partition
    RPMB 是 Replay Protected Memory Block 的简称,它通过 HMAC SHA-256 和 Write Counter 来保证保存在 RPMB 内部的数据不被非法篡改。
    在实际应用中,RPMB 分区通常用来保存安全相关的数据,例如指纹数据、安全支付相关的密钥等。

  • General Purpose Partition 1~4
    此区域则主要用于存储系统或者用户数据。 General Purpose Partition 在芯片出厂时,通常是不存在的,需要主动进行配置后,才会存在。

  • User Data Area
    此区域则主要用于存储系统和用户数据。
    User Data Area 通常会进行再分区,例如 Android 系统中,通常在此区域分出 boot、system、userdata 等分区

3.2 Flash Controller

NAND Flash 直接接入 Host 时,Host 端通常需要有 NAND Flash Translation Layer,即 NFTL 或者 NAND Flash 文件系统来做坏块管理、ECC等的功能。
eMMC 则在其内部集成了 Flash Controller,用于完成擦写均衡、坏块管理、ECC校验等功能
相比于直接将 NAND Flash 接入到 Host 端,eMMC 屏蔽了 NAND Flash 的物理特性,可以减少 Host 端软件的复杂度,让 Host 端专注于上层业务,省去对 NAND Flash 进行特殊的处理。同时,eMMC 通过使用 Cache、Memory Array 等技术,在读写性能上也比 NAND Flash 要好很多。

图4. 传统Nand Flash与eMMC存储方案对比

3.3 标准接口

其中包括Card Interface(CMD,DATA,CLK)、Memory core interface、总线接口控制(Card Interface Controller)、电源控制、寄存器组。
eMMC 与 Host 之间的通信线,如下:


图4. eMMC内部框图

eMMC标准接口总结如下:


图6. eMMC的信号汇总

eMMC的四类信号功能描述如下:

  • 时钟信号:
    CLK: 给eMMC提供数据交互的时钟。

  • 控制信号:
    DS: DS是由eMMC向主控端传输,频率和 CLK 信号相同,用于同步从 Device 端输出的数据,在HS400模式下使用,在主控端实现数据同步功能。该信号在 eMMC 5.0 中引入。

CMD: 命令交互信号,用于传输控制命令或者回应主机(发送 Host 的 command 和 Device 的 response),双向信号,工作在开漏和推挽模式。Host 与 eMMC 之间的通信都是 Host 以一个 Command 开始发起的,针对不同的 Command,Device 会做出不同的响应。

RST_n: 复位信号。

  • 数据信号:
    DAT[7:0]: 双向接口,数据收发。
    eMMC的双向数据总线,用于主机和设备之间的数据通信。它工作在应对快速的命令传输的推挽模式。
    DAT线在某一时刻只能支持单向传输,只能被设备或eMMC HOST一方控制。默认下,当用户上电或者复位的时候,仅能用DAT0一根线传输数据。同时,用户可以自己配置想要使用的DAT线的数量,也可以选择4根或者8根。当用户选择4根时,eMMC设备会断DAT1-3的内部上拉,如果用户选择的是8根,那么同理会断开DAT1-7的上拉。

电源信号:
VCC: eMMC的Core电源。
VCCQ: IO电源。

图中寄存器组的功能见下表:

CID: 卡身份识别寄存器 128bit,只读, 厂家号,产品号,串号,生产日期。
RCA: 卡地址寄存器,可写的16bit寄存器,存有Device identification模式由host分配的通信地址,host会在代码里面记录这个地址,MMC则存入RCA寄存器,默认值为0x0001。保留0x0000以用来将all device设置为等待CMD7命令状态。
CSD: 卡专有数据寄存器部分可读写128bit,卡容量,最大传输速率,读写操作的最大电流、电压,读写擦出块的最大长度等。
SCR: 卡配置寄存器, 可写的 64bit 是否用Security特性(LINUX不支持),以及数据位宽(1bit或4bit)。
OCR: 卡操作电压寄存器 32位, 只读,每隔0.1V占1位, 第31位卡上电过程是否完成。

二、eMMC硬件设计

1. 典型的eMMC电路设计

现在我们来看eMMC的典型电路设计,参考标准描述,eMMC的信号的典型电路如下图所示。图中ROD和RData Strobe一般集成在主控中或者是没有,设计中我们可以不用管。而RDAT和RCMD是上拉电阻,标准里推荐放这些上拉电阻,避免总线(即CDM、DATA[7:0])浮空,所以我们会在一些电路中看到eMMC信号线上都挂满了上拉电阻。当然在有的设计电路里是没挂的,没挂上拉电阻的图估计都是拿图过来抄,对标准要求是什么样的也不清楚,看eMMC规格书里描述这几个信号是推挽输出的,觉得是多余的,就索性直接都拿掉,最多留着CMD的上拉电阻,这样是不推荐的做法。原文描述:“RDAT and RCMD are pull-up resistors protecting the CMD and the DAT lines against bus floating
device when all device drivers are in a high-impedance mode.”

图7. JEDEC定义的eMMC信号电路设计

关于这些上拉电阻的阻值范围,在标准的Table 200有描述如下,设计时根据实际情况参考底部的Note挑选适合的值:

图8. 标准中推荐的eMMC总线上拉电阻阻值范围

上图中的总线电容CL需要特别注意,在标准中描述了CL是Host、BUS、和DEVICE的寄生电容的总和,这个寄生电容最大值是30pF,且Host、和BUS的总会必须小于20pF。所以这也是为什么建议eMMC布局靠近主控的原因,这里如果不去注意的话,可能的结果就是,恰巧你的板子的条件有点差,这个CL超过了,选用的eMMC在这个规范里留的裕量又不是特别高,然后板子跑着跑着就莫名的数据出错了,到时问题够你加班查。

2. eMMC电源设计

2.1 先了解什么是HS200和HS400模式

eMMC的HS200模式和HS400模式是比较特殊的工作情况,它们会影响eMMC的供电设计,我们先来看看这两个模式的细节。

HS200模式:

HS200是eMMC的高速通信模式,该模式下时钟频率为200MHz,数据在时钟单边沿有效,最大数据率吞吐率为200MB/s,此时IO电平为1.8V或者1.2V,时序图如下。

图9. HS200模式时序图

-HS400模式:

HS400是eMMC的高速通信模式,时钟频率也为200MHz,数据在时钟双边沿有效,最大数据率吞吐率为400MB/s,此时IO电平为1.8V或者1.2V,时序图如下。

图10. HS400模式时序图

从上面总结下来,HS200和HS400都是高速模式,时钟都是200MHz,信号电平信号都仅支持1.8V和1.2V,HS400因为是时钟双边沿数据有效,所以速率相对HS200翻了一倍。

当然,eMMC的总线不止HS200和HS400模式,它还有另外的三种模式,另外的三种模式都兼容3V、1.8V、1.2V电平,如下。

图11. eMMC的几种总线模式

2.2 电源设计

上面特地的先了解HS200模式和HS400模式的目的是为了能充分理解eMMC的复杂IO电平,上面我们知道,eMMC在HS200和HS400模式下,IO电平只能是1.8V或者1.2V,所以设计里如果主控芯片支持这两种模式控制,我们也想用这两种模式,那么IO的电源引脚VCCQ一定要使用1.8V或者1.2V供电,否则无法使用,如果不需要HS200和HS400模式,那就看主控的电平是什么就供什么电平电压,比如主控的IO电平是3.3V,那么就给eMMC的VCCQ供3.3V,如果主控的IO电平是1.8V,那么就给eMMC的VCCQ供1.8V。

当然,这里可能有人会好奇了,上面图3中明明描述了其他三种模式的IO电平是3V,而不是3.3V,那给VCCQ供电真的可行吗?可行的,上面只是说IO电平,不是供电最大值最小值约束,供电约束如下图4所示。

下图4中可以看到,VCCQ有三种电压范围,三种电压范围从上往下看,可以看出它们分别对应3V电平、1.8V电平、和1.2V电平。这样看下来,对于3V电平的IO的供电就可以很清楚了,VCCQ供电在2.7V-3.6V范围内,IO电平都属于3V电平,所以此时VCCQ直接接3.3V没问题。

图12. eMMC供电电压范围

上面VCCQ的供电搞清楚了,下面来看VCC供电,从上面图4中可以知道,VCC分为2种供电情况,一种是1.8V(1.7V-1.95V),一种是3.3V(2.7V-3.6V)。这里需要特别注意,VCCQ的电压不能大于VCC的电压,所以如果VCC供电是1.8V,那么VCCQ不能使用3.3V供电,标准中对于VCC和VCCQ的电压组合约束如下图所示。

图13. VCC和VCCQ电压组合注意事项

2.3 实例说明

其实对于eMMC的供电,从上面整理下来,也没想象中的那么复杂,很多时候只是不清楚标准是如何规定。自己拿到别人的图做参考时,别人使用的eMMC芯片自己手上没资料,即使网上能找到,可能里面信息也不全,就只有封装和引脚描述信息,这是最痛苦的,所以如果知道标准的规定,那么设计按照标准的来,出问题的概率不大。

最后我放上NXP的IMX6评估板的eMMC参考电路图给大家观摩观摩,如下。

图14. NXP的IMX6评估板上的eMMC参考设计

上图中我们可能会看到一个比较奇怪的地方,我之前文章说对于DATA[7:0]、CMD信号线,按照标准需要加上拉电阻,但是在这个参考设计里没有加,那是不是这个设计不规范呢,是不是像我之前说的,NXP画这个图的工程师拿了图过来,看到eMMC的IO是推挽方式工作就把上拉电阻全去掉呢?对于这样的怀疑,我们得先找证据充分证明我们的想法才能那样去说。所以看到这里我猜测主控芯片估计是有上拉了,不然肯定不会这样干,于是就去翻了IMX6的规格书,果然,如下图所示,所有IO都有100KΩ上拉,这个值在上篇文章说的标准的范围内,所以图6没问题。图6如果借鉴到自己的设计中的话,注意去翻下自己用的主控规格书,看看有没有上拉,没有的话还是建议手动加上。

图15. NXP的IMX6评估板上的eMMC接到主控的引脚位置

图16. IMX6的eMMC引脚都有内置100KΩ上拉电阻

3. eMMC PCB layout设计

3.1 关于eMMC的封装

eMMC在很多嵌入式电子设备中都有应用,关于eMMC的Layout问题,作为硬件工程师很有必要去关心。
从JESD84-A41中我们知道,eMMC主要有2种封装,分别是BGA-169和BGA-153两种封装
如下图所示,BGA-169封装面积相对较大,现在基本很少看到了,基本都是BGA-153。

图17. JESD84-A41中描述的BGA-153封装

图18. JESD84-A41中描述的BGA-153封装

当然标准中是去定义了标准封装的信号定义,但是从上图1和图2中可以看到有很多NC信号,这些信号对于eMMC制造厂家来说是可用的,比如e·MMC 4.5和5.0就有所添加,如下图所示,可以看到多了RST_n、DS、VSS。

图19. e·MMC 4.5/5.0封装

对于上图中的NC、RFU信号,都是不需要连接任何信号的,Layout时信号线可以直接走在NC PAD上,但是不能走在RFU PAD上。而对于e·MMC 5.0的DS和VSS(引脚A6、J5),如果不用HS400模式,这些三个引脚是可以浮空的。

3.2 eMMC Layout规则

为了合理和方便Layout,eMMC的去耦电容组合推荐如下图所示。

图20. e·MMC 电源去耦推荐方案

  • 信号CLK、CMD、DQ和DS均做阻抗50Ω±10%匹配管控。
  • 信号CLK、CMD、DQ和DS约束为同组信号,长度差控制在±50mil范围内。
  • 所有信号线走线长度约束在2000mil以内,且注意使用IBIS模型进行仿真评估阻抗匹配和反射情况。
  • 信号线有完整的参考层。
  • 内部走不出来的信号可以从NC PAD走,不能从RFU PAD上走线。
  • CLK和RST_N长度差在1000mil以内。

走线的3W原则图示如下:

图21. 3W原则

3.3 一些出线参考

下图是镁光和SkyHigh的eMMC出线参考,可以看到,不好走线的情况下,信号是可以从NC PAD上走的。

图22. 镁光的eMMC出线参考

图23. SkyHigh的eMMC出线参考


转自:

  1. https://blog.csdn.net/yangguoyu8023/article/details/110832698
  2. ecircuitlab公众号

eMMC介绍及硬件电路设计相关推荐

  1. 硬件电路设计原理图设计

    叶倾城-硬件原创的个人空间_哔哩哔哩_Bilibili 硬件电路设计原理图设计第二季-1-40课已更新完成啦!!! 第三季硬件电路设计原理图设计敬请期待!感谢大家的支持! 第01课------硬件实战 ...

  2. 智能音箱硬件和软件介绍[上] 硬件结构解析[Soomal]

    科大讯飞 VBOX 智能音箱 - 电路板 Google 谷歌 Google Home 智能音箱 从2014年起,我们先后通过自购和合作厂商获得多个智能语音识别"流派"的品牌音箱产品 ...

  3. 【分享贴】硬件电路设计思路

    从事硬件多年,在开始帖子分类的时候,就专门设置了一个专栏,奈何自己比较懒,加之自己可能认识比较片面,所以一直没有动笔.但是每次看到这个专栏空空如也,始终想完善一下.所以今天就大胆动笔,和大家分享一些我 ...

  4. 基于Internet联网的一种报警主机硬件电路设计

    本文主要介绍了基于Internet联网的一种报警主机硬件电路设计,系统主要介绍了系统的详细设计过程,系统主要包括Atmega128外围电路,ENC28J60以太网接口电路,键盘/显示接口部分,电源部分 ...

  5. 硬件电路设计报告总结

    前言 本科阶段,单纯以为硬件电路开发就是画画电路图,焊焊板子,跑跑程序等等-随着学习的深入,逐渐发现,硬件电路的开发也有一套严谨有序的开发流程. 需求分析是硬件电路设计的第一步,需要什么样的功能,功能 ...

  6. OpenMV(一)--基础介绍与硬件架构

    基础介绍与硬件架构 1. OpenMV介绍 1.1 什么是OpenMV 1.2 OpenMV与OpenCV 2. 硬件架构 2.1 OpenMV-H7 2.2 STM32H743 2.3 原理图 1. ...

  7. TLE5012B ESP32驱动程序、硬件电路设计、4线SPI通信,驱动完美兼容4线SPI不用改MOSI开漏推挽输出

    一.TLE5012B 简介 TLE5012B 是一种款高分辨率旋转位置传感器,用于在整个 360 度范围内进行角度测量. 它通过使用单片集成 巨磁阻 (iGMR) 元件,来测量正弦和余弦角分量,这些原 ...

  8. 基于STM32-消防栓监测系统毕业设计---论文(附加最全面的从硬件电路设计->驱动程序设计->阿里云物联网搭建->安卓APP设计)

    设计展示视频连接:消防栓监测系统视频 驱动程序工程文件:消防栓监测系统驱动程序工程(全寄存器开发的) 消防栓监测系统所有设计资料:全栈设计,如下图所示 消防栓监测系统论文(图片看不清的可以下载文档看) ...

  9. 一套完整的硬件电路设计该怎么做?

    在学习电路设计的时候,不知道你是否有这样的困扰:明明自己学了很多硬件电路理论,也做过了一些基础操作实践,但还是无法设计出自己理想的电路.归根结底,我们缺少的是硬件电路设计的思路,以及项目实战经验. 设 ...

最新文章

  1. Idea不能新建package的解决
  2. 咋样回复计算机桌面删除的东西,被删除的文件怎么恢复 四个妙招巧解决【图解】...
  3. java求面积Shape类_Shape-2,形状类,正方形类,长方形类,圆类,求周长面积
  4. 技术总监反思录:我是怎么失去团队掌控力的?
  5. nacos使用_使用Nacos的CMDB实现微服务的就近访问!
  6. div无法触发blur事件解决的方法
  7. 2018年5大微服务发展趋势
  8. ubuntu dos转linux命令行,Ubuntu下代替dos2unix命令
  9. java 报表工具_15个Java的报表工具简介
  10. 专访:6位飞桨开发者的「新生代」AI创新故事!
  11. CTFshow-萌新 Writeup
  12. 普通PC键盘和苹果键盘比较图
  13. Android开发之音乐播放器所遇到的问题
  14. 【有利可图王】PS教程:将人物设计处理成五彩缤纷的抽象效果!
  15. dede 百度主动推送插件
  16. 交换机的基本工作原理与配置
  17. Conway’s Game of Life介绍及实现
  18. android支付宝运动修改器,支付宝运动步数修改器下载-无需root刷支付宝运动步数工具下载_飞翔下载...
  19. PyTorch Tensor 的形状
  20. 机器学习基础算法四:逻辑回归算法实验

热门文章

  1. 硒鼓带不带芯片区别_硒鼓芯片的价格为什么相差悬殊?
  2. Gitee【代码托管】详细教程
  3. mos 控制交流_详解MOS管原理及几种常见失效分析
  4. 基于stm32f103的磁悬浮
  5. Super Map超图IServer加载BIM及精细模型操作
  6. Metasploit(MSF)基础超级详细版
  7. c语言定义node类型指针,C语言指针的概念
  8. WPF,防止snoop窥探你的程序
  9. prometheus监控java项目(jvm等):k8s外、k8s内
  10. php云签到,云签到之DiscuzX系列论坛自动签到