SD/MMC

1.1.什么是MMC卡

MMC:MMC就是MultiMediaCard的缩写,即多媒体卡。它是一种非易失性存储器件,体积小巧(24mm*32mm*1.4mm),容量大,耗电量低,传输速度快,广泛应用于消费类电子产品中。

1.2.什么是SD卡

SD:SD卡为Secure Digital Memory Card, 即安全数码卡。它在MMC的基础上发展而来,增加了两个主要特色:SD卡强调数据的安全安全,可以设定所储存的 
使用权限,防止数据被他人复制;另外一个特色就是传输速度比2.11版的MMC卡快。在数据传输和物理规范上,SD卡(24mm*32mm*2.1mm,比MMC卡更厚一点),向前兼容了MMC卡.所有支持SD卡的设备也支持MMC卡。SD卡和2.11版的MMC卡完全兼容。

1.3.什么是SDIO

SDIO:SDIO是在SD标准上定义了一种外设接口,它和SD卡规范间的一个重要区别是增加了低速标准。在SDIO卡只需要SPI和1位SD传输模式。低速卡的目标应用是以最小的硬件开销支持低速IO能力。

现在已经有非常多的手机或是手持装置都支持 SDIO 的功能(SD 标准原本就是针对 mobile device 而制定),而且许多 SDIO 外围也都被开发出来,让手机外接外围更加容易,并且开发上更有弹性(不需要内建外围)。目前常见的 SDIO 外围(SDIO 卡)有:

· Wi-Fi card(无线网络卡) 

· CMOS sensor card(照相模块) 

· GPS card 

· GSM/GPRS modem card 

· Bluetooth card 

·  Radio/TV card(很好玩)

SDIO 的应用将是未来嵌入式系统最重要的接口技术之一,并且也会取代目前 GPIO 式的 SPI 接口。

1.4.什么是MCI

MCI:MCI是Multimedia Card Interface的简称,即多媒体卡接口。上述的MMC,SD,SDI卡定义的接口都属于MCI接口。MCI这个术语在驱动程序中经常使用,很多文件,函数名字都包括”mci”.

1.5.MMC/SD/SDIO卡的区别


1.5.SD/SDIO 的传输模式

SD 传输模式有以下 3 种:

· SPI mode(required) 

· 1-bit mode 

· 4-bit mode

SDIO 同样也支持以上 3 种传输模式。依据 SD 标准,所有的 SD(记忆卡)与 SDIO(外围)都必须支持 SPI mode,因此 SPI mode 是「required」。此外,早期的 MMC 卡(使用 SPI 传输)也能接到 SD 插糟(SD slot),并且使用 SPI mode 或 1-bit mode 来读取。

Secure digital I/Ocard,pin out


SD/MMC相关寄存器

1.SD卡内部架构

在熟悉SD/MMC相关寄存器之前,我们先来看看SD卡的内部架构是怎么样的,如下图所示:


2.SD/MMC相关寄存器的介绍


从上图中总结出:SD卡内部有7个寄存器.

一、OCR,CID,CSD和SCR寄存器保存卡的配置信息;

二、RCA寄存器保存着通信过程中卡当前暂时分配的地址(只适合SD模式);

三、CSR寄存器卡状态(Card Status)和SSR寄存器SD状态(SD Status)寄存器保存着卡的状态(例如,是否写成功,通信的CRC校验是否正确等),这两个寄存器的内容与通信模式(SD模式或SPI模式)相关.

四、MMC卡没有SCR和SSR寄存器.

下面分别对7个寄存器中比较重要的寄存器详细解释一下,分别是CID、CSD、SCR、OCR、RCA这5个寄存器。

2.1. Card Identification Register(CID)

这个 CID 寄存器有 16 字节长,如下表所示,它包含了本卡的特别识别码(ID 号)。 这些信息是在卡的生产期间被编程(烧录),主控制器不 能修改它们的内容。 注意:SD卡的 CID 寄存器和 MMC 卡的 CID 寄存器在记录结构上是不同的。


2.2.Card Specific Data Register(CSD)

这个描述数据寄存器(CSD)有 128 字节长,如下表所示,此卡的包含了访问该卡数据时的必要配置信息。“cell type”栏内定义了CSD的区域是只读(R)、一次编程(R/W)或可擦除的(R/W/E)[“R/W”是指可以多次擦写,“R/W(1)”是指只能一次写入,不可擦除]。该张表中所显示的值都对应真实的CSD结构中的各自区域和编码。CSD区域的样式是依照栏标记(和一个复选标记√)的样式。注意SD卡内的 CSD寄存器和MultiMedia卡的CSD寄存器有着不同的结构。

在SD3.0协议中,CSD分为版本1.0和版本2.0,版本1.0对应标准容量的SD卡,版本2.0对应高容量和超高容量的SD卡。



CSD Version 2.0的如下:


2.3.SD card Configuration Register (SCR)

除了 CSD 寄存器外,还有一个配置寄存器的名字是:SD 卡配置寄存器(SCR)。SCR 提供了SD 卡的一些特殊特性在这张卡内。它的大小是64 位。这个寄存器内容由制造商在生产厂内设置,MMC卡没有SCR。


SCR_STRUCTURE 关于SD卡内的物理级说明中SCR结构的版本号。

SD_SPEC描述这张SD卡在物理级上所支持的说明版本。

DATA_STAT_AFTER_ERASE 定义了数据在擦除后的状态。是“0”或“1”中的任何一个(这要依赖卡的供应商)。

SD_SECURITY 描述了该卡所支持的安全算法。0:无 1:安全协议1.0 安全说明版本 0.96 2:安全协议2.0 安全说明版本 1.0 - 1.01。其他保留

SD_BUS_WIDTHS描述该卡所支持的所有数据总线宽度。从SD 卡支持最少1 位或4 位宽度这两种总线模式开始,任何SD 卡都将最少要设置0 和2 这两个位(即SD_BUS_WIDTH = 0101 ),1.4位保留。

2.4.Operating Conditions Register (OCR)

这个 32 位的工作条件寄存器储存了卡的 VDD 电压轮廓图。任何标准的 SD 卡主控制器可以使用 2V 至 3.6V 的工作电压来让 SD 卡能执行这个电压识别操作(CMD1)。而访问存储器的阵列操作无论如何都需要 2.7V 至 3.6V 的工作电压。OCR 寄存器显示了在访问卡的数据时所需要的电压范围。OCR 寄存器的结构描述:


2.5.RCA寄存器
该16位卡地址寄存器保存了在卡识别过程中卡发布的器件地址。该地址用于在卡识别后主机利用该地址与卡进行通信。该寄存器只有在SD总线模式下才有效。



SD/MMC的Commands和Responses

SD总线通信是基于指令和数据比特流,起始位开始和停止位结束。SD总线通信有三个元素:
1.Command:由host发送到卡设备,使用CMD线发送;

2.Response:从card端发送到host端,作为对前一个CMD的相应,通过CMD线发送;

3.Data:即能从host传输到card,也能从card传输到host,通过data线传输。

一、Commands
以下是四种用于控制卡设备的指令类型,每个command都是固定的48位长度:
1、broadcast commands(bc), no response:广播类型的指令,不需要有响应;
2、broadcast commands with response(bcr):广播类型的指令且需要响应;
3、addressed(point-to-point) commands(ac):由HOST发送到指定的卡设备,没有数据的传输;
4、address(point-to-point) data transfercommands(adtc):由HOST发送到指定的卡设备且伴随有数据传输。

Command format如下:


Byte1:0 1 x x x x x x(命令号,由指令标志定义CMD39为100111即16进制0x27,那么完整的CMD39第一字节为01100111,即0x27+0x40)。
Byte2-5:Command Arguments,命令参数,有些命令没有参数。
Byte6:前7位为CRC(Cyclic Redundacy Check,循环冗余校验)校验位,最后一位为停止位0。

其中bit[45:40]共6bit组成了Command index,换句话说,总共有2^6次方(64)个CMD,这些CMD伴随在卡的初始化、识别、读写、擦除数据都会用到。

关于命令的详细描述参考《Part_1_Physical_Layer_Specification_Ver3.00_Final_090416》的4.7.4 Detailed Command Description,在P88可以找到相应的CMD的详细介绍。

二、Responses
所有的response都通过CMD线发送到host端,R4和R5响应类型是SDIO中特有的:
1、R1(normal response command):用来响应常用指令;
2、R2(CID,CSD register):用来响应CMD2和CMD10或CMD9,并把CID或CSD寄存器作为响应数据;
3、R3(OCR register):用来响应ACMD41指令,并把OCR寄存器作为响应数据;
4、R6(published RCA response):分配相对卡地址的响应;
5、R7(card interface condition):响应CMD8,返回卡支持的电压信息;
6、R4(CMD5):响应CMD5,并把OCR寄存器作为响应数据;
7、R5(CMD52):CMD52是一个读写寄存器的指令,R5用于CMD52的响应;

Response的格式如下:


关于响应的详细描述参考《Part_1_Physical_Layer_Specification_Ver3.00_Final_090416》的4.9 Responses 在P98可以找到相应的Responses的详细介绍。



SD3.0协议解读之一

系统特征:

卡容量:

1.标准容量卡(SDSC):最大容量为2GB

2.高容量卡(SDHC):容量大小为2~32GB的卡

3.扩展容量卡(SDXC):容量大小为32GB~2TB的卡

问:这有什么用呢?在哪里会用到?

答:SD卡一般作为外置扩展容量,那么不同用户用的卡肯定不一样,那为了区分不同的卡,SD3.0协议中在初始化和识别卡的过程中会判断用户插入的卡是SDSC/SDHC/SDXC中的哪一种卡,比如在R3中的第38Bit的CCS = 0b时,表示插入的卡为SDSC卡,而CCS = 1b时,表示插入的卡为SDHC或者SDXC卡。不同的卡在Cammand和Response中有微小的区别,具体用到的时候再回头再说。

电压范围:

工作电压范围为:2.7~3.6V

问:告诉你电压范围有什么用呢?

答:卡的工作不是单边性的,它是和CPU理的卡控制器(host)之间互动的,那么host端也有自己支持的电压,card端也有自己支持的电压,而这二者支持的电压或许不一样。比如:host支持1.8~3.8V,而card支持2.7~3.6V,而协议就是完成取交集的作用,帮助host和card协调一个大家都支持的电压。

卡的属性:

卡可以设计为只读卡和可读/可写的卡

四线总线速率模式:


大家都应该看的懂什么意思吧?英文水平不至于比老衲还差吧?实在太差的就装个金山词霸呗~~这里要解释二个缩写,SDR的意思是Single Data Rate(单边数据采样,换句话说就是,要么上升沿采样,要么下降沿采样),DDR的意思是Double Data Rate(双边数据采样,换句话说,双边沿采样)。

注意了,这些总线速率模式是在四线的模式下才支持的,如果是1线的模式下,那可能就不一样了,而且并不是所有的host都支持所有的模式,比如并不是所有的CPU都支持SDR104模式,这个需要很强的IO输入输出能力,即便你的主频可以跑1.8GHz,但是到了SD卡这边的IO可不一定支持208MHz,这个具体要看CPU的spec。

好了,这篇就写这么多,注意了,老衲并不是单纯的将SD3.0的英文协议翻译过来,翻译只是对英文的解析,这并不是对协议的理解,这里是解读协议!


SD3.0协议解读之二

SD总线:


大家都知道总线一般支持多种频率,在默认的频率下,SD总线支持一(主)对多(从)的模式,即支持一个HOST对多个SD卡的模式。但是,在高速和UHS-I,SD总线只能支持一对一的模式,即支持一个HOST对一个SD卡的模式。

问:那么对于一对多的模式,总线是如何找到相应的SD卡呢?

答:在SD卡初始化识别模式下,通过发送CMD3来获取RCA,即卡的逻辑地址,如果卡发现跟自己的逻辑地址是一致的,就会通过R6来响应。

SD总线协议:

SD总线是基于命令和数据的,开始于起始位,结束于结束位。Command和Response都是通过CMD线来传输的,Data是通过数据线来传输的。Command都是由主机(HOST)发起,Response都是由卡发出响应的。


数据的传输是以(Block)为单位的,数据块后面带有CRC校验位,图3-4描述了单块和多块的数据传输操作,多块数据传输通过Stop命令来结束数据传输操作。


因为HOST的速度总是比SD的速度要快,假如你往卡里面拼命写数据,这会出现什么问题?问题可大了,假如SD卡第一次都还没成功写完整,你就马上发第二次第三次的数据过来,那必将会造成数据的丢失,对吧。这就引申出了等待机制。HOST必须等待Card写完了,你才能继续发第二次数据传输。

那么,在SD总线的块写操作里,是通过Data0的信号状态指示卡是否Busy还是Ready的。


Command的内部编码格式:

Command命令都是由48bit组成的,每个命令的开始都是以'0'开始,以'1'结束的。每个命令都包含有CRC校验位,它的作用是,当数据传输发生错误时,可以重新重新发起操作。


Response的内部编码格式:

Response有四种编码模式,这取决于响应内容,长度为48bit或者136bit。由图3-7可知,当Response为R1、R3、R6时,响应长度为48bit,而Response为R2时,响应长度为136bit。并且在CMD线上传输都是先发送MSB,最后发送LSB,由于Command和Response都是在CMD线上传输的,所以它们都必须按照先发送MSB,最后发送LSB。这些规定都会在驱动里面被一个结构体封装掉,你知道是这么一回事就好了,不用特别在意。



SD卡的数据包格式:

1.Usual data (8 bit width):在字节之间先传输低字节后传输高字节,在字节里面先传输高位后传输低位。

2.Wide width data(SD卡寄存器):共有512bit,先传高位后传低位。

相应的数据格式这里就不贴图了,有兴趣的读者请查阅“Part_1_Physical_Layer_Specification_Ver3.00_Final_090416”的P28和P29,OK,这篇文章暂时聊到这里,精彩在后面哦。


后续请看:http://blog.csdn.net/lwj103862095/article/details/38400449




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值