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设备的请求处理则比较复杂。
Linux SD卡驱动开发(一) —— SD 相关基础概念相关推荐
- Linux SD卡驱动开发(五) —— SD 卡驱动分析Core补充篇
Core层中有两个重要函数 mmc_alloc_host 用于构造host,前面已经学习过,这里不再阐述:另一个就是 mmc_add_host,用于注册host 前面探测函数s3cmci_probe, ...
- Linux SD卡驱动开发(二) —— SD 卡驱动分析HOST篇
回顾一下前面的知识,MMC 子系统范围三个部分: HOST 部分是针对不同主机的驱动程序,这一部是驱动程序工程师需要根据自己的特点平台来完成的. CORE 部分: 这是整个MMC 的核心存,这部分完成 ...
- Linux SD卡驱动开发(六) —— SD卡启动过程总体分析
一.工作流程 mmc驱动主要文件包括 drivers/mmc/card/block.c drivers/mmc/card/queue.c drivers/mmc/core/core.c drivers ...
- Linux SD卡驱动开发(四) —— SD 控制器之真正的硬件操作
前面对SD卡控制器有了一个基本的介绍.其实SD控制器层更过的意义是为core层提供一种操作SD卡硬件的一种方法,当然不同的控制器对硬件控制的方法不尽相同,但是他们最终都能像core层提交一个统一的封装 ...
- linux sd卡驱动教程,Linux SD卡驱动开发(四) —— SD 控制器之真正的硬件操作
前面对SD卡控制器有了一个基本的介绍.其实SD控制器层更过的意义是为core层提供一种操作SD卡硬件的一种方法,当然不同的控制器对硬件控制的方法不尽相同,但是他们最终都能像core层提交一个统一的封装 ...
- 【SD卡】关于DJYOS下SD卡驱动开发详解
关于DJYOS下SD卡驱动开发详解 王建忠 2011/6/21 1 开发环境及说明 硬件平台:tq2440(CPU: s3c2440) 操作系统:DJYOS1.0.0 1.1 说明 T ...
- CE下基于Zylonite硬件平台的SD卡驱动开发
摘要:本文结合实际项目(一款以WINCE为操作系统内核的GSM/PHS双模智能手机)对嵌入式系统Windows CE5.0的底层驱动(SD卡)的架构进行了分析和研究,以MARVELL公司提供的基于IN ...
- wince下SD卡驱动开发
WinCE 5.0下面SD卡驱动的开发.这是我做的第一个项目,当时做这个项目花费了相当的时间和精力,搞的我精疲力尽.几乎可以说当时对WinCE一点都不懂.也不知道从何处下手,就东看西看.东改西改,改的 ...
- SD卡驱动开发随笔(1)
前不久刚写完SD卡驱动,最后的运行和读写文件效果自己也比较满意以下是性能测试结果 ----------------------------------------------------------- ...
- Linux 下wifi 驱动开发(三)—— SDIO接口WiFi驱动浅析
SDIO-Wifi模块是基于SDIO接口的符合wifi无线网络标准的嵌入式模块,内置无线网络协议IEEE802.11协议栈以及TCP/IP协议栈,能够实现用户主平台数据通过SDIO口到无线网络之间的转 ...
最新文章
- etrace 跟踪程序函数动态执行流程
- 面试题_89_to_92_单元测试 JUnit 面试题
- 【Tools】MarkDown教程(六)-Markdown Reference
- python常见内置函数
- 深度学习(batch,mini-batch,其它算法)
- 对话华为云专家,摆脱无意义“内卷”
- mysql命令面板数据更改_宝塔面板数据库自动停止解决办法,宝塔面板MySQL数据库自动重启shell脚本...
- 程序员社区骂战:不满政治正确,LLVM元老宣布退出
- 计算机控制pud,控制系统状态空间实施方案计算机控制技术课程实施方案
- Docker 容器的数据管理
- 用gambit学博弈论---零和博弈
- 配置RADIUS服务器
- IDEA 2020 配置Emmylua插件仍无法调试Lua代码问题
- android eclipse三合一,创新巅峰之作全能型Orbitrap Eclipse三合一质谱仪
- java网络爬虫电影数据,Java豆瓣电影爬虫——减少与数据库交互实现批量插入
- 免费,好用的天气预报API
- ps用画笔工具设计水墨圆环
- 阿里云短信申请流程以及配置
- 安装从GitHub下载的包
- 如何取消(或关闭)win2003中的ie增强安全配置
热门文章
- Ubuntu 命令行下修改IP等
- 微波雷达智能感应模块,在智能面板上的技术应用
- 一键保存网页为PDF
- 【零散知识】最大类间方差法(大津法,Otsu)
- 安装Realtek RTL8111/RTL8168网卡驱动详解(error~eth0:no such device)
- iOS12完美越狱来了!漫谈iOS12缓解机制
- 金融科技大数据产品推荐:金蜂巢大数据集成与脱敏系统
- 亚洲最佳电影TOP100出炉 你看过几部?
- cad卸载_解决CAD小白入门的第一个难题,三招任你选
- 华为鸿蒙系统有广告吗,系统特权?华为鸿蒙被曝看视频能免广告,没正式发布就出bug...