1.前言
本文主要mmc组件的主要流程,在介绍的过程中,将详细说明和mmc相关的流程,涉及到其它组件的详细流程再在相关文章中说明。
2.主要数据结构和API
TODO
3. 主要流程
3.1 mmc_attach_mmc
以eMMC为例,则扫描时会回调mmc_attach_mmc
mmc_attach_mmc->
mmc_set_bus_mode(host, MMC_BUSMODE_OPENDRAIN)
mmc_send_op_cond
mmc_attach_bus_ops
mmc_select_voltage
mmc_init_card->
mmc_add_card
mmc_set_bus_mode(host, MMC_BUSMODE_OPENDRAIN)
identification阶段需要设为opendrain模式,协议约定;
mmc_send_op_cond
发送CMD1,arg为0,获取OCR寄存器的内容,设备支持的电压范围
mmc_attach_bus_ops
关联mmc_bus_type的ops
mmc_select_voltage
根据host支持的电压范围和OCR寄存器中读取的电压范围,得出两者都支持的电压范围,然后选取最小的电压值。对于我们的host一般会采用固定输出的电压值。
mmc_init_card
处理卡的检测和初始化:
a). mmc_set_bus_mode(host, MMC_BUSMODE_OPENDRAIN);初始前将busmode设为opendrain 主要是用于identify mode执行线与,进入transfer模式将设为pushpull模式
b). mmc_go_idle(host):发送CMD0,由于改变了OCR的值,需要让卡重新回到i

本文深入剖析Linux内核的mmc驱动框架,重点讲解mmc组件的主要流程,包括mmc_attach_mmc函数的详细步骤,如mmc_set_bus_mode、mmc_send_op_cond、mmc_select_voltage等,以及mmc_init_card过程中的mmc_card设备初始化和mmc_add_card的设备添加操作。

6737

被折叠的 条评论
为什么被折叠?



