linux下SD/MMC/SDIO驱动分析

本文详细介绍了Linux系统中对SD/MMC/SDIO驱动的分析,包括SDIO的概念、常见应用,如Wi-Fi卡、GPS模块等。内容涵盖了SDIO的传输模式、MMC子系统的代码分布、SD总线协议、初始化流程,以及SD卡的命令格式和解析。文章还提及了SD卡的调试关键点,如初始化延时、CMD命令的发送、读写操作等。最后,简述了主机(Host)注册过程,包括平台设备注册、中断服务程序以及SDIO卡的识别和操作。
摘要由CSDN通过智能技术生成

一、SD/MMC/SDIO概念区分

SD(SecureDigital)与 MMC(MultimediaCard)

SD 是一种 flash memory card 的标准,也就是一般常见的 SD 记忆卡,而 MMC 则是较早的一种记忆卡标准,目前已经被 SD 标准所取代。在维基百科上有相当详细的 SD/MMC 规格说明:[http://zh.wikipedia.org/wiki/Secure_Digital]。

SDIO(SecureDigital I/O)

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/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 的 MMCMode

SD 也能读取 MMC 内存,虽然 MMC 标准上提到,MMC 内存不见得要支持 SPI mode(但是一定要支持 1-bit mode),但是市面上能看到的 MMC 卡其实都有支持 SPI mode。因此,我们可以把 SD 设定成 SPI mode 的传输方式来读取 MMC 记忆卡。

SD 的 MMC Mode 就是用来读取 MMC 卡的一种传输模式。不过,SD 的 MMC Mode 虽然也是使用 SPI mode,但其物理特性仍是有差异的:

  · MMC 的 SPI mode 最大传输速率为 20 Mbit/s; 

  · SD 的 SPI mode 最大传输速率为 25 Mbit/s。

为避免混淆,有时也用 SPI/MMC mode 与 SPI/SD mode 的写法来做清楚区别

参考网站:https://www.sdcard.org/developers/overview/capacity/

              http://www.interfacebus.com/Secure_Digital_IO_Card_Pinout.html

 

二、MMC子系统介绍

MMC代码分布

MMC子系统代码主要在drivers/mmc目录下,共有三个目录:

         Card:存放闪存卡(块设备)的相关驱动,如MMC/SD卡设备驱动,SDIOUART;

         Host:针对不同主机端的SDHC、MMC控制器的驱动,这部分需要由驱动工程师来完成;

         Core:整个MMC的核心层,这部分完成不同协议和规范的实现,为host层和设备驱动层提供接口函数。

MMC子系统框架

 

Linux MMC子系统主要分成三个部分:

  MMC核心层:完成不同协议和规范的实现,为host层和设备驱动层提供接口函数。MMC核心层由三个部分组成:MMC,SD和SDIO,分别为三类设备驱动提供接口函数;

  Host 驱动层:针对不同主机端的SDHC、MMC控制器的驱动;</

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值