Linux SD卡驱动开发

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

Linux SD卡驱动开发(二) —— SD 卡驱动分析HOST篇

Linux SD卡驱动开发(三) —— SD 卡驱动分析CORE篇

Linux SD卡驱动开发(四) —— SD 控制器之真正的硬件操作

Linux SD卡驱动开发(五) —— SD 卡驱动分析Core补充篇

Linux SD卡驱动开发(六) —— SD卡启动过程总体分析

一.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能力。

1.4.什么是MCI 

   MCI:MCI是Multimedia Card Interface的简称,即多媒体卡接口。上述的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 协会会员也推出很完整的 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卡硬件原理图如下:

      图中可以看到,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设备的请求处理则比较复杂。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章