一、概述
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
介绍