一、概述
MMC是MultiMedia Card的简称,从本质上看,它是一种用于固态非易失性存储的内存卡规范,定义了诸如卡的形态、尺寸、容量、电气信号、和主机之间的通信协议等方方面面的内容。
从1997年MMC规范发布至今,基于不同的考量(物理尺寸、电压范围、管脚数量、最大容量、数据位宽、clock频率、安全特性、是否支持SPI mode、是否支持DDR mode等等),进化出了MMC、SD、micro SD、SDIO、eMMC等不同的规范;
1.1 SD
SD卡是Secure Digital Card的英文缩写,即“安全数码卡”。SD卡是一种基于半导体快闪记忆器的新一代记忆设备,是在MMC基础上发展起来的,增加了两个主要特色:
-
可以设置所存储的使用权限,防止数据被他人复制;
-
传输速度比2.11版
MMC卡快。
特性:
- 可选通信协议:
SD模式(SDIO)和SPI模式; - 可变时钟频率:0~25MH;
- 通信电压范围:2.0~3.6;
- 数据寿命:10万次编程/擦除;
- 正向兼容
MMC卡; - 运行在25M的频率上,数据带宽是4位,因此最大传输速率是12.5MHz(12.5兆字节每秒);
SD卡有9个引脚,使其反面朝上,最左边为9号引脚,然后从左到右依次是1号~8号,如下图:
1.1.1 SD模式
在SD模式下,通常可以使用四根数据线进行传输(4-bits Data),传输速度非常快。四位数据传输要使用引脚1、7、8和9(DAT0~DAT3);在某些不支持四线数据的场合,也可以使用单根线进行数据传输(1-bit Data),此时使用引脚7(DAT0)。
下面这张表,是SD卡在SD模式下的引脚定义:
| 引脚 | 名称 | 描述 |
|---|---|---|
| 1 | CD/DAT3 | Data line 3 |
| 2 | CMD | Command/Response Line |
| 3 | VSS1 | GND |
| 4 | VDD | 3.3V Power supply |
| 5 | CLK | Clock |
| 6 | VSS2 | GND |
| 7 | DAT0 | Data line 0 |
| 8 | DAT1 | Data line 1 |
| 9 | DAT2 | Data line 2 |
1.1.2 SPI模式
SPI通信需要四根线,两条数据线(SPI_MISO、SPI_MOSI),一条时钟线(SPI_SCK)和一条片选(Chip Select)信号线。
在SPI模式下,SD卡的8号、9号针脚没有用到,针脚定义见下表:
| 引脚 | 名称 | 描述 |
|---|---|---|
| 1 | CS | 片选信号 |
| 2 | MOSI | 主设备输出从设备输入 |
| 3 | VSS1 | GND |
| 4 | VDD | 3.3V Power supply |
| 5 | SCLK | 串行时钟信号,由主设备产生 |
| 6 | VSS2 | GND |
| 7 | MISO | 主设备输入从设备输出 |
| 8 | NC | 没有用到 |
| 9 | NC | 没有用到 |
1.2 TF
TF卡即是T-Flash卡,又叫Micro SD卡,即微型SD卡。 SD卡比TF卡的尺寸要大,应用于不同产品;
SD卡一般都用在大一些的电子设备:如电脑,相机,AV等器材;TF一般用在手机上。TF卡插入适配器(adapter)可以转换成SD卡,但SD卡一般无法转换成TF卡;
SD卡上有一个(lock)开关,即写保护开关,TF卡没有。
TF卡只有8个引脚,其定义如下图:
TF卡同样支持SD模式(SDIO)和SPI模式。
1.2.1 SD模式
下面这张表,是TF卡在SD模式下的引脚定义:
| 引脚 | 名称 | 描述 |
|---|---|---|
| 1 | DAT2 | Data line 2 |
| 2 | DAT3 | Data line 3 |
| 3 | CMD | Command/Response Line |
| 4 | VDD | 3.3V Power supply |
| 5 | CLK | Clock |
| 6 | VSS | GND |
| 7 | DAT0 | Data line 0 |
| 8 | DAT1 | Data line 1 |
NanoPC-T4开发板带有一个TF卡槽,TF卡槽接线图如下所示:
RK3399 SDMMC引脚接线如下图所示:
补充:实际上并没有SDMMC卡或者是SDMMC接口;这里SDMMC就是SD卡。
需要注意的是:RK3399的电源域包含了sdmmc,如果要使用SDMM0必须要配置电源域,SDMMC0_VDD引脚连接的电源VCC_SDIO是由rk808下的12号引脚VLDO4输出的。
| RK3399引脚 | 方向 | 描述 |
|---|---|---|
| GPIO4_B4/SDMMC0_CLKOUT | O | SDMMC card clock |
| GPIO4_B5/SDMMC0_CMD | I/O | SDMMC card command output and response input |
| GPIO4_B0/SDMMC0_D0 | I/O | SDMMC card data input and output line 0 |
| GPIO4_B1/SDMMC0_D1 | I/O | SDMMC card data input and output line 1 |
| GPIO4_B2/SDMMC0_D2 | I/O | SDMMC card data input and output line 2 |
| GPIO4_B3/SDMMC0_D3 | I/O | SDMMC card data input and output line 3 |
| GPIO0_B0/SDMMC0_WRPRT | I | SDMMC card protect |
| GPIO0_A7/SDMMC0_DET | I | SDMMC card detect signal, a 0 represents presence of card |
| SDMMC0_VDDPST | O | Pin out to external capacitor |
1.2.2 SPI模式
在SPI模式下,TF卡引脚定义见下表:
| 引脚 | 名称 | 描述 |
|---|---|---|
| 1 | NC | 没有用到 |
| 2 | CS | 片选信号 |
| 3 | MOSI | 主设备输出从设备输入 |
| 4 | VDD | 3.3V Power supply |
| 5 | SCLK | 串行时钟信号,由主设备产生 |
| 6 | VSS | GND |
| 7 | MISO | 主设备输入从设备输出 |
| 8 | NC | 没有用到 |
1.3 eMMC
eMMC与SD卡说的是两种不同的封装, eMMC是BGA封装,一般焊接在板子上;而SD卡为TF/SD卡的形式;注意这仅是物理的表现形式不一样,而他们使用的通信接口都是SD卡通信标准。
1.4 SDIO
SDIO是在SD卡接口的基础上发展起来的外设接口,SDIO接口兼容以前的SD卡,并且可以连接SDIO接口的设备,目前根据SDIO协议的SPEC,SDIO接口支持的设备总类有WIFI、Bluetooth、GPS等等。
二、MMC规范
MMC分别从卡(Card Concept)、总线(Bus Concept)以及控制器(Host Controller)三个方面,定义MMC子系统的行为,如下图所示:
2.1 卡的规范
卡的规范主要规定卡的形状、物理尺寸、管脚,内部block组成、寄存器等等,以eMMC为例;
2.1.1 内部block
卡的内部由如下几个block组成:
Memory core:存储介质,一般是NAND Flash、NOR Flash等;Memory core interface:管理存储介质的接口,用于访问(读、写、擦出等操作)存储介质;Card interface(CMD、CLK、DATA):总线接口,外界访问卡内部存储介质的接口,和具体的管脚相连;Card interface controller:将总线接口上的协议转换为Memory core interface的形式,用于访问内部存储介质;Power模块:提供reset、上电检测等功能;- 寄存器(图片中位于
Card interface controller的左侧,那些小矩形),用于提供卡的信息、参数、访问控制等功能;
2.1.2 引脚
卡的管脚有VDD、GND、RST、CLK、CMD和DATA等,VDD和GND提供power,RST用于复位,CLK、CMD和DATA为MMC总线协议的物理通道:
CLK有一条,提供同步时钟,可以在CLK的上升沿(或者下降沿,或者上升沿和下降沿)采集数据;CMD有一条,用于传输双向的命令;DATA用于传说双向的数据,根据MMC的类型,可以有一条(1-bit)、四条(4-bit)或者八条(8-bit);
2.2 总线规范
前面我们提到过,MMC的本质是提供一套可以访问固态非易失性存储介质的通信协议,从产业化的角度看,这些存储介质一般集成在一个独立的外部模块中(卡、WIFI模组等),通过物理总线和CPU连接。对任何有线的通信协议来说,总线规范都是非常重要的。关于MMC总线规范,简单总结如下:
(1) 物理信号有CLK、CMD和DATA三类;
(2) 电压范围为1.65V和3.6V,根据工作电压的不同,MMC卡可以分为两类:
High Voltage MultiMedia Card:工作电压为2.7V~3.6V;Dual Voltage MultiMedia Card:工作电压有两种,1.70V1.95V和2.7V3.6V,CPU可以根据需要切换;
(3) 数据传输的位宽(称作data bus width mode)是允许动态配置的,包括1-bit (默认)模式、4-bit模式和8-bit模式;
(4) MMC规范定义了CLK的频率范围,包括0-20MHz、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;
2.3 控制器规范
Host控制器是MMC总线规范在Host端的实现,也是linux驱动工程师比较关注的地方,后面将会结合Linux MMC 框架的有关内容,再详细介绍。
参考文章
[4] MMC/SD/SDIO介绍