电子产业一站式赋能平台

PCB联盟网

搜索
查看: 47|回复: 0
收起左侧

Linux驱动开发——MMC/SD驱动模型

[复制链接]

369

主题

369

帖子

4297

积分

四级会员

Rank: 4

积分
4297
发表于 2025-2-4 11:00:00 | 显示全部楼层 |阅读模式
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

    oddtexwpcoz6404084109.png

    2.Linux MMC/SD驱动框架的重要数据结构
    2.1 struct mmc_host 结构体

    4y1zzl4ytdp6404084209.png

    4y1zzl4ytdp6404084209.png

    struct mmc_host用于与core层的命令请求,数据 传输等信息。
    2.2 struct mmc_host_ops 结构体

    sma0y05te136404084309.png

    sma0y05te136404084309.png

    其中request 主要是SD卡命令数据传输操作入口,set_ios是配置SD控制器寄存器操作入口,是驱动中必须要实现的两个基本操作。
    3. SD卡初始化流程
    SD卡初始化流程是在core层实现的,集成了SD卡的所有命令,对于驱动开发来说,只需要实现request操作,并对命令和数据中断用mmc_request_done()函数进行上报处理即可。SD卡初始化流程见下图:

    hfo4smbza4z6404084409.png

    hfo4smbza4z6404084409.png

    4.MMC/SD卡热插拔
    对于热插拔功能,MMC/SD框架提供了mmc_detect_change()函数对卡插拔时间进行上报,此功能一般MMC/SD控制器会提插拔中断功能,驱动软件实现时只需在中断函数中上报即可。
    end

    一口Linux

    关注,回复【1024】海量Linux资料赠送
    精彩文章合集
    文章推荐
    ?【专辑】ARM?【专辑】粉丝问答?【专辑】所有原创?【专辑】linux入门?【专辑】计算机网络?【专辑】Linux驱动?【干货】嵌入式驱动工程师学习路线?【干货】Linux嵌入式所有知识点-思维导图
  • 回复

    使用道具 举报

    发表回复

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则


    联系客服 关注微信 下载APP 返回顶部 返回列表