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

本文介绍了Linux系统中SD卡驱动的基础知识,包括SD/MMC卡的概念、SDIO的特性、MCI接口以及SD协议的总线接口和请求处理流程。文章详细阐述了SD卡在开发板上的硬件连接,并探讨了MMC/SD设备驱动在Linux系统中的结构层次,强调了Core核心层的重要作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.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卡定义的接口都属于M

SD 卡驱动分析...................................................................................................................................1 块请求处理(linux/driver/mmc/card).....................................................................................2 1.probe.................................................................................................................................................2 2.do_request......................................................................................................................................13 3.小结................................................................................................................................................24 core 层处理(linux/driver/mmc/core)...................................................................................25 1.core 层初始化................................................................................................................................25 2.mmc_claim_host............................................................................................................................28 3.mmc_release_host..........................................................................................................................31 4.mmc_wait_for_req.........................................................................................................................33 5.mmc_wait_for_cmd.......................................................................................................................35 SD 控制器之初始化(linux/driver/mmc/host).....................................................................37 core 层续集之 mmc_add_host..................................................................................................49 SD 控制器之真正的硬件操作.................................................................................................82 1.s3cmci_get_ro................................................................................................................................83 2.s3cmci_set_ios...............................................................................................................................84 3.s3cmci_request 之命令处理..........................................................................................................86 4.s3cmci_request 之数据传输..........................................................................................................97 小结.........................................................................................................................................113
### Linux SD Card Driver Information #### 设备移除过程 当SD卡被拔出时,系统会执行系列操作来完成这动作。具体而言,这涉及到注销SD卡驱动的过程,主要通过调用`device_del()`和`device_put()`函数实现[^1]。 #### 初始化流程 为了使SD卡能够正常工作,在启动阶段需要对其进行初始化设置。此过程中,主机首先向SD卡发送CMD0指令以发出复位命令;随后,在ACMD41之前发送CMD8用于重新初始化SD卡,确保其处于准备就绪状态[^2]。 #### 驱动加载机制 在Linux内核中,MMC子系统的bus match逻辑定义于`mmc_bus_match`函数内部,该函数总是返回1表示任何连接到MMC总线上的设备与对应的驱动程序之间自动匹配成功。旦匹配成功,则进步调用`mmc_bus_probe`来进行具体的探测处理,其中包含了针对不同类型的存储介质(如block层)所特有的探针方法——例如`mmc_blk_probe`负责处理块设备相关的初始化任务[^3]。 #### 固件差异性 值得注意的是,尽管某些情况下eMMC、NAND闪存以及SD卡可以共享同套固件解决方案,但对于特定应用场景下的Nor Flash来说,则可能需要单独的套配置文件(`sys_config`)来进行适配和支持[^4]。 ```c // 示例代码片段展示如何遍历并打印当前已安装的SD/MMC模块信息 #include <linux/module.h> #include <linux/mmc/host.h> static void list_sd_cards(void){ struct mmc_host *host; printk(KERN_INFO "Listing all MMC/SD hosts:\n"); mutex_lock(&mmc_host_mutex); list_for_each_entry(host, &mmc_hosts, node) { printk(KERN_INFO "- %s\n", host->class_dev.dev.kobj.name); } mutex_unlock(&mmc_host_mutex); } ```
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值