[Linux 驱动] -- Linux SD 卡驱动开发(一) ------ SD 相关基础概念

一、SD/MMC 卡基础概念

1.1、什么是MMC卡

MMC:MMC 就是 MutiMediaCard 的缩写,即多媒体卡。它是一种非易失性存储器件,体积小巧(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能力。

1.4、什么是MCI

MCI:MCI是Multimedia Card Interface 的简称,即多媒体卡接口。上述的MMC、SD、SDIO卡定义的接口都属于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 协会会员也退出很完整的 SDIO stack 驱动程序,使得 SDIO外围(我们称为 SDIO 卡)的开发变得相当热门。

现在已经有非常多的手机或是手持装置都支持 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 接口。

 

二、开发板SD资源

以Exynos4412开发板为例,其SD卡硬件原理图如下:

扫描二维码关注公众号,回复: 13005149 查看本文章

图中可以看到,SD卡设备的连接方式就是SDIO总线的驱动方式,这里使用EINT7作为NCD的控制器,当SD卡设备插入/取出时均会中断响应。

 

三、SD协议概要

1、总线接口

按照SD卡的协议的描述可分为2中总线的接口

SD BUS

物理层定义:

  • D0-D3 数据传输
  • CMD 进行 CMD 和 Respons
  • CLK 大家最熟悉的 HOST始终信号线了
  • VDD VSS 电源和地

SPI BUS

一般用 SPI 协议的接口来做

物理层定义:

  • CLK HOST 时钟信号线了
  • DATAIN HOST-SD Card 数据信号线
  • DATAOUT SD Card 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.2\drivers\mmc 分别有  card、core 和 host 三个文件夹:

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 设备的请求处理则比较复杂。

 

 

 

猜你喜欢

转载自blog.csdn.net/u014674293/article/details/104463012
今日推荐