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设为opend