一.SD/MMC卡基础概念
1.1.哪些是MMC卡
MMC:MMC就是MultiMediaCard的简写,即多媒体卡。它是一种非易失性储存元件,容积精巧(24mm*32mm*1.4mm),容量大,耗电量低,传输速率快,广泛应用于消费类电子产品中。
1.2.哪些是SD卡
SD:SD卡为SecureDigitalMemoryCard,即安全数码卡。它在MMC的基础上发展而至linux sd卡驱动开发,降低了两个主要特色: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能力。
1.4.哪些是MCI
MCI:MCI是MultimediaCardInterface的简称,即多媒体卡插口。上述的MMC,SD,SDI卡定义的插口都属于MCI插口。MCI这个术语在驱动程序中常常使用,好多文件,函数名子都包括”mci”.
1.5.MMC/SD/SDIO卡的区别
SDIO是目前我们比较关心的技术,SDIO故名思义,就是SD的I/O插口(interface)的意思,不过这样解释可能还有点抽像。更具体的说明,SD原本是记忆卡的标准,而且如今也可以把SD用来插上一些外围插口使用,这样的技术便是SDIO。
所以SDIO本身是一种相当单纯的技术,透过SD的I/O接脚来联接外部外围,但是透过SD上的I/O数据接位与那些外围传输数据,但是SD商会会员也推出很完整的SDIOstack驱动程序,促使SDIO外围(我们称为SDIO卡)的开发与应用显得相当热门。
如今早已有特别多的手机或是手持装置都支持SDIO的功能(SD标准原先就是针对mobiledevice而拟定)linux sd卡驱动开发,但是许多SDIO外围也都被开发下来,让手机外接外围愈发容易,而且开发上更有弹性(不须要内建外围)。目前常见的SDIO外围(SDIO卡)有:
·Wi-Ficard(无线网路卡)
·CMOSsensorcard(拍照模块)
·GPScard
·GSM/GPRSmodemcard
·Bluetoothcard
·Radio/TVcard(挺好玩)
SDIO的应用将是未来嵌入式系统最重要的插口技术之一,而且也会代替目前GPIO式的SPI插口。
二、开发板SD资源
以Exynos4412开发板为例,其SD卡硬件原理图如下:
图中可以见到linux空间,SD卡设备的联接方法就是SDIO总线的驱动形式,这儿使用EINT7作为NCD的控制器,当SD卡设备插入/取出时均会中断响应。
三、SD合同概要
1、总线插口
根据SD卡的合同的描述可分为2种总线的插口
SDBUS
化学层定义:
D0-D3数据传送
CMD进行CMD和Respons
CLK你们最熟悉的HOST时钟讯号线了
VDDVSS电源和地
SPIBUS
通常用SPI合同的插口来做
化学层定义:
CLKHOST时钟讯号线了
DATAINHOST-àSDCard数据讯号线
DATAOUTSDCardàHOST数据讯号线
2、请求处理流程
按照合同,MMC/SD卡的驱动被分为:卡辨识阶段和数据传输阶段。
在卡辨识阶段通过命令使MMC/SD处于:空闲(idle)、准备(ready)、识别(ident)、等待(stby)、不活动(ina)几种不同的状态;
而在数据传输阶段通过命令使MMC/SD处于:发送(data)、传输(tran)、接收(rcv)、程序(prg)、断开联接(dis)几种不同的状态。
所以可以总结MMC/SD在工作的整个过程短发为两个阶段和十种状态。下边使用图形来描述一下在两个阶段中这十种状态之间的转换关系。
a--卡辨识阶段
b--数据传输阶段
四、MMC/SD设备驱动在Linux中的结构层次
在Linux中MMC/SD卡的记忆体都当成块设备。MMC/SD设备驱动代码在linux-2.6.38.2driversmmc分别有card、core和host三个文件夹linux多线程,
card层要把操作的数据以块设备的处理方法讲到记忆体上或从记忆体上读取;
core层则是将数据以何种格式,何种形式在MMC/SD主机控制器与MMC/SD卡的记忆体(即块设备)之间进行传递,这些格式、方式被称之为规范或合同,
host层下的代码就是你要动手实现的具体MMC/SD设备驱动了,包括RAM芯片中的SDI控制器(支持对MMC/SD卡的控制,也称MMC/SD主机控制器)和SDI控制器与MMC/SD卡的硬件插口电路。
这么,card、core和host这三层的关系,我们用一幅图来进行描述,图如下:
从这幅图中的关系可以看出,整个MMC/SD模块中最重要的部份是Core核心层,他提供了一系列的插口函数,对上提供了将主机驱动注册到系统,给应用程序提供设备访问插口,对下提供了对主机控制器控制的方式及块设备恳求的支持。对于主机控制器的操作就是对相关寄存器进行读写,而对于MMC/SD设备的恳求处理则比较复杂