Linux设备驱动子系统第二弹- SD卡 - 图文 联系客服

发布时间 : 星期四 文章Linux设备驱动子系统第二弹- SD卡 - 图文更新完毕开始阅读5a98ddd680eb6294dd886c8a

[置顶]Linux设备驱动子系统第二弹 - SD卡 分类: Linux驱动 2010-10-01 19:59 3553人阅读 评论(5) 收藏 举报 1. 总论 2. 主控制器 3. 协议层 4. 块设备 1. 总论 1.1 概念 ? ?

MMC - MultiMedia Card SD - Secure Digital Card

1.2 分类

?

按存储大小,普通SD卡(<=2GB,支持FAT12/FAT16),HCSD卡(>2GB,<=32GB,支持FAT32)

? 按体积大小,普通SD卡,mini-SD卡,micro-SD卡(TF卡)

1.3 速度

? ?

默认模式: 12.5MB/s 高速模式: 25MB/s

1.4 子系统代码结构

Linux源码里/drivers/mmc下有三个文件夹,分别存放了SD块设备,核心层和SD主控制器的相关代码,可以通过Kconfig和Makefile获取更多信息。

2. 主控制器

SD卡的控制器芯片,可以看成CPU的代言人,它为CPU分担了完成与SD卡数据通信的任务。 2.1 数据结构 以PXA芯片的SD控制器驱动为例, struct pxamci_host { struct mmc_host *mmc; struct mmc_request *mrq; struct mmc_command *cmd; struct mmc_data *data; ... ... };

2.1.1 struct mmc_host 结构体mmc_host定义于/include/linux/mmc/host.c,可以认为是linux为SD卡控制器专门准备的一个类,该类里面的成员是所有SD卡控制器都需要的,放之四海而皆准的数据结构,而在PXA芯片控制器的驱动程序pxamci.c中,则为该类具体化了一个对象struct mmc_host *mmc,此mmc指针即指代着该PXA芯片SD卡控制器的一个具体化对象。

struct mmc_host {

const struct mmc_host_ops *ops; // SD卡主控制器的操作函数,即该控制器所具备的驱动能力

const struct mmc_bus_ops *bus_ops; // SD总线驱动的操作函数,即SD总线所具备的驱动能力

struct mmc_ios ios; // 配置时钟、总线、电源、片选、时序等 struct mmc_card *card; // 连接到此主控制器的SD卡设备 ... ... };