Rockchip RK3399 - MMC基础

发布时间 2023-09-23 00:41:07作者: 大奥特曼打小怪兽

一、概述

MMCMultiMedia Card的简称,从本质上看,它是一种用于固态非易失性存储的内存卡规范,定义了诸如卡的形态、尺寸、容量、电气信号、和主机之间的通信协议等方方面面的内容。

从1997年MMC规范发布至今,基于不同的考量(物理尺寸、电压范围、管脚数量、最大容量、数据位宽、clock频率、安全特性、是否支持SPI mode、是否支持DDR mode等等),进化出了MMCSDmicro SDSDIOeMMC等不同的规范;

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_MISOSPI_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

eMMCSD卡说的是两种不同的封装, eMMCBGA封装,一般焊接在板子上;而SD卡为TF/SD卡的形式;注意这仅是物理的表现形式不一样,而他们使用的通信接口都是SD卡通信标准。

1.4 SDIO

SDIO是在SD卡接口的基础上发展起来的外设接口,SDIO接口兼容以前的SD卡,并且可以连接SDIO接口的设备,目前根据SDIO协议的SPECSDIO接口支持的设备总类有WIFIBluetoothGPS等等。

二、MMC规范

MMC分别从卡(Card Concept)、总线(Bus Concept)以及控制器(Host Controller)三个方面,定义MMC子系统的行为,如下图所示:

2.1 卡的规范

卡的规范主要规定卡的形状、物理尺寸、管脚,内部block组成、寄存器等等,以eMMC为例;

2.1.1 内部block

卡的内部由如下几个block组成:

  • Memory core:存储介质,一般是NAND FlashNOR Flash等;
  • Memory core interface:管理存储介质的接口,用于访问(读、写、擦出等操作)存储介质;
  • Card interfaceCMDCLKDATA):总线接口,外界访问卡内部存储介质的接口,和具体的管脚相连;
  • Card interface controller:将总线接口上的协议转换为Memory core interface的形式,用于访问内部存储介质;
  • Power模块:提供reset、上电检测等功能;
  • 寄存器(图片中位于Card interface controller的左侧,那些小矩形),用于提供卡的信息、参数、访问控制等功能;
2.1.2 引脚

卡的管脚有VDDGNDRSTCLKCMDDATA等,VDDGND提供powerRST用于复位,CLKCMDDATAMMC总线协议的物理通道:

  • CLK有一条,提供同步时钟,可以在CLK的上升沿(或者下降沿,或者上升沿和下降沿)采集数据;
  • CMD有一条,用于传输双向的命令;
  • DATA用于传说双向的数据,根据MMC的类型,可以有一条(1-bit)、四条(4-bit)或者八条(8-bit);

2.2 总线规范

前面我们提到过,MMC的本质是提供一套可以访问固态非易失性存储介质的通信协议,从产业化的角度看,这些存储介质一般集成在一个独立的外部模块中(卡、WIFI模组等),通过物理总线和CPU连接。对任何有线的通信协议来说,总线规范都是非常重要的。关于MMC总线规范,简单总结如下:

(1) 物理信号有CLKCMDDATA三类;

(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);

  • CommandHost通过CMD线发送给Slave的,用于启动(或结束)一个操作;
  • ResponseSlave通过CMD线发送给Host,用于回应Host发送的Command
  • DataHostSlave之间通过数据线传说的数据。方向可以是HostSlave,也可以是SlaveHost;数据线的个数可以是1、4或者8。在每一个时钟周期,每根数据线上可以传输1bit或者2bits的数据;

(7) 一次数据传输过程,需要涉及所有的3个信标。一次数据传输的过程也称作Bus Operation,根据场景的不同,MMC协议规定了很多类型的Bus Operation

2.3 控制器规范

Host控制器是MMC总线规范在Host端的实现,也是linux驱动工程师比较关注的地方,后面将会结合Linux MMC 框架的有关内容,再详细介绍。

参考文章

[1] SD卡、TF卡、MMC卡、emmc、sdio扫盲

[2] 芯片的SD/MMC控制器以及SD卡介绍

[3] MMC、SD、TF、SDIO、SDMMC简介

[4] MMC/SD/SDIO介绍

[5] STM32——SDIO的学习(驱动SD卡)

[6] 详谈SD卡/微型SD卡的引脚定义与连接