|
MMC/SD驱动模型在嵌入式开发中应用比较广,其对应的Linux系统框架可以归类到块设备中,如果想了解IO存储栈的小伙伴可以先从简单的MMC/SD驱动模型入手。Linux MMC/SD驱动模型
[/ol]Linux下MMC/SD驱动主要分三层:card层、core层、host层。
card层:
要把操作的数据以块设备的处理方式写到记忆体上或从记忆体上读取。core层:
则是将数据以何种格式,何种方式在 MMC/SD主机控制器与MMC/SD卡的记忆体(即块设备)之间进行传递,这种格式、方式被称之为规范或协议。host层:
就是要实现的具体MMC/SD相应控制器的驱动程序,包括MMC/SD控制器的初始化、寄存器读写及SD卡的命令、数据的传输接口。
oddtexwpcoz6404084109.png
2.Linux MMC/SD驱动框架的重要数据结构
2.1 struct mmc_host 结构体
4y1zzl4ytdp6404084209.png
struct mmc_host用于与core层的命令请求,数据 传输等信息。
2.2 struct mmc_host_ops 结构体
sma0y05te136404084309.png
其中request 主要是SD卡命令数据传输操作入口,set_ios是配置SD控制器寄存器操作入口,是驱动中必须要实现的两个基本操作。
3. SD卡初始化流程
SD卡初始化流程是在core层实现的,集成了SD卡的所有命令,对于驱动开发来说,只需要实现request操作,并对命令和数据中断用mmc_request_done()函数进行上报处理即可。SD卡初始化流程见下图:
hfo4smbza4z6404084409.png
4.MMC/SD卡热插拔
对于热插拔功能,MMC/SD框架提供了mmc_detect_change()函数对卡插拔时间进行上报,此功能一般MMC/SD控制器会提插拔中断功能,驱动软件实现时只需在中断函数中上报即可。
end
一口Linux
关注,回复【1024】海量Linux资料赠送
精彩文章合集
文章推荐
?【专辑】ARM?【专辑】粉丝问答?【专辑】所有原创?【专辑】linux入门?【专辑】计算机网络?【专辑】Linux驱动?【干货】嵌入式驱动工程师学习路线?【干货】Linux嵌入式所有知识点-思维导图 |
|