eMMC芯片是 Embedded MultiMediaCard的简称,这是IC芯片,最初用于手机、平板电脑和其他移动设备,集成了控制器和闪存芯片(NANflash/Norflash),并提供标准MMC接口管理闪存,使其具有体积小、开发快、自flash管理等特点。
MMC是一种用于固态非易失性存储的内存卡(memory card)规范,对的,它是一种标准的接口规范。它定义了诸如卡的形态、尺寸、容量、电气信号、和主机之间的通信协议等方方面面的内容。
从1997年MMC规范发布至今,基于不同的考量(物理尺寸、电压范围、管脚数量、最大容量、数据位宽、clock频率、安全特性、是否支持SPI mode、是否支持DDR mode、等等),进化出了MMC、SD、microSD、SDIO、eMMC等不同的规范(如下面图片1所示)。
eMMC4.4的读取速度大约为104MB/s、eMMC 4.5则为200MB/s,eMMC 5.0存储产品,其读取速度为400MB/s,但是因为使用的是8位并行界面,因此性能潜力已经基本到达瓶颈,UFS即将成为了新的发展趋势,UFS(通用flash存储标准) 2.0有两个版本:HS-G2的理论带宽就有5.8Gbps,也就是超过了740MB/s,HS-G3更是翻番到11.6Gbps,接近了1.5GB/s。
关于图片,这里强调几点:
● MMC、SD、SDIO的技术本质是一样的(使用相同的总线规范,等等),都是从 MMC规范演化而来;
● MMC强调的是多媒体存储(MM,MultiMedia);
● SD强调的是安全和数据保护(S,Secure);
● SDIO是从SD演化出来的,强调的是接口(IO,Input/Output),不再关注另一端的具体形态(可以是WIFI设备、Bluetooth设备、GPS等等)。
3. 规范简介
MMC卡的规范从硬件上主要规定卡的形状、物理尺寸、管脚,内部block组成、寄存器等等。
3.1内部组成
卡的内部由如下几个block组成:
● Memory core,存储介质,一般是NAND flash、NOR flash等;
● Memory core interface,管理存储介质的接口,用于访问(读、写、擦出等操作)存储介质;
● Card interface(CMD、CLK、DATA),总线接口,外界访问卡内部存储介质的接口,和具体的管脚相连;
● Card interface controller,将总线接口上的协议转换为Memory core interface的形式,用于访问内部存储介质;
● Power模块,提供reset、上电检测等功能;
● 寄存器(图片1中位于Card interface controller的左侧,那些小矩形),用于提供卡的信息、参数、访问控制等功能。
管脚有VDD、GND、RST、CLK、CMD和DATA等,VDD和GND提供power,RST用于复位,CLK、CMD和DATA为MMC总线协议(具体可参考3.2小节)的物理通道:
● CLK有一条,提供同步时钟,可以在CLK的上升沿(或者下降沿,或者上升沿和下降沿)采集数据;
● CMD有一条,用于传输双向的命令。
● DATA用于传说双向的数据,根据MMC的类型,可以有一条(1-bit)、四条(4-bit)或者八条(8-bit)。
3.2总线规范
前面我们提到过,MMC的本质是提供一套可以访问固态非易失性存储介质的通信协议,从产业化的角度看,这些存储介质一般集成在一个独立的外部模块中(卡、WIFI模组等),通过物理总线和CPU连接。对任何有线的通信协议来说,总线规范都是非常重要的。关于MMC总线规范,简单总结如下:
1)物理信号有CLK、CMD和DATA三类。
2)电压范围为1.65V和3.6V(参考上面图片2),根据工作电压的不同,MMC卡可以分为两类:
● High Voltage MultiMediaCard,工作电压为2.7V~3.6V。
● Dual Voltage MultiMediaCard,工作电压有两种,1.70V~1.95V和2.7V~3.6V,CPU可以根据需要切换。
3)数据传输的位宽(称作data bus width mode)是允许动态配置的,包括1-bit (默认)模式、4-bit模式和8-bit模式。
注1:不使用的数据线,需要保持上拉状态,这就是图片2中的DATA中标出上拉的原因。另外,由于数据线宽度是动态可配的,这要求CPU可以动态的enable/disable数据线的那些上拉电阻。
4)MMC规范定义了CLK的频率范围,包括0-200MHz、0-26MHz、0-52MHz等几种,结合数据线宽度,基本决定了MMC的访问速度。
5)总线规范定义了一种简单的、主从式的总线协议,MMC卡位从机(slave),CPU为主机(Host)。
6)协议规定了三种可以在总线上传输的信标(token):
● Command,Host通过CMD线发送给Slave的,用于启动(或结束)一个操作(后面介绍);
● Response,Slave通过CMD线发送给Host,用于回应Host发送的Command;
● Data,Host和Slave之间通过数据线传说的数据。方向可以是Host到Slave,也可以是Slave到Host。数据线的个数可以是1、4或者8。在每一个时钟周期,每根数据线上可以传输1bit或者2bits的数据。
7)一次数据传输过程,需要涉及所有的3个信标。一次数据传输的过程也称作Bus Operation,根据场景的不同,MMC协议规定了很多类型的Bus Operation(具体可参考相应的规范)。