mmc子系统总结

mmc总结

学习mmc部分的kernel代码,看了相关bug的处理,进行总结。文章分为以下部分。
1.mmc结构总结
2.mmc host controller
3.sd卡插入后的注册过程。
4.card层
5.数据传输流程
6.相关bug处理

1.mmc结构总结

mmc子系统按照连接对象的不同,分为emmc, sd, sdio三种类型。如果嵌入式系统中需要使用sd卡,emmc, sdio wifi,则在该系统中会有3个mmc host controller,分别连接这3个设备。从下往上,分为mmc host controller driver, core, card,三层。
1.mmc host controller层直接和硬件相关,上层传送过来的data和command读写请求( mmc_request),由mmc host controller driver具体操作硬件来实现。
2.core层主要负责mmc协议相关的功能,card detect之后的初始化,由core层向controller发起的mmc_request一般都是command请求。
3.card层应该是把mmc抽象成为一个block device driver, 向上层注册这个block device. 上层会向这个block device发起数据业务,由card层处理后,向controller层传递下去。由card层下发的mmc_request主要是数据收发请求。
4.mmc_init()
register bus type. 分为两种bus type, mmc_bus_type, sdio_bus_type, 其中mmc_bus_type中的match函数是直接return 1,匹配card层的驱动和连接的设备。而sdio_bus_type的match函数需要通过sdio_match_device来匹配device和driver. 比如一个sdio wifi device,在kernel中有好几个wifi driver,需要通过设备的id信息和驱动的sdio_device_id信息来找到正确的driver。

2.mmc controller driver

host controller probe: 读取dts中的host controller相关的配置,如中断号,基地址,存储在pdata中,初始化host controller, alloc struct mmc_host mmc, 填充mmc_host结构体, request irq handler用于数据传输,Dma_alloc_coherent descriptor buffer, request irq handler用于card detect. mmc_add_host(mmc); 向上层注册device.

struct mmc_host_ops需要了解,这个是host driver需要实现的一系列回调函数,主要有如下几个重要函数:
struct mmc_host_ops {
.request // 最重要的数据传输函数
.set_ios // set power, clock, bus width
.get_cd // card absent or present
.get_ro //read/write or read only
.start_signal_voltage_switch
.card_busy
.execute_tuning
.hw_reset //reset card
};

host driver实现的request回调函数流程:
如果是multiblock 读写,首先发送一个cmd(填写进一个descriptor结构体中),
des_cmd_cur->cmd_index = MMC_SET_BLOCK_COUNT;
desc_cur->cmd_arg = mrq->data->blocks;
dma_map_sg()为设备产生恰当的总线地址,它会合并物理上临近的内存区域
for_each_sg, 每个sg中的内存块的地

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值