mmc分析

这段代码详细描述了在Linux系统中针对MMC卡的检测和初始化过程。首先,通过`mmc_rescan`函数检查MMC Host控制器并检测卡是否仍然存在。接着,如果卡被移除,会释放总线资源;若卡插入,会尝试不同频率进行初始化。初始化包括上电、硬件复位、发送CMD52复位SDIO,以及探测SDIO、SD和MMC卡。整个流程确保了对插入和移除卡的正确响应。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >




void mmc_rescan(struct work_struct *work)
{//先获取host控制器
 struct mmc_host *host =
  container_of(work, struct mmc_host, detect.work);
 int i;

//这里变量trigger_card_event 在检测sd卡的中断函数内设置为true,就是说如果是因为发生的中断而触发检测的就先调用mmc总线的ops来检测mmc卡是否还存在,此时并不知道是mmc卡还是sd卡,只是检测状态比如gpio pin的高低来初步判断

 if (host->trigger_card_event && host->ops->card_event) {
  host->ops->card_event(host);
  host->trigger_card_event = false;
 }

//触发检测mmc卡的方式有两种,一种是通过中断方式的,一种是主动调用方式,如果在mmc host还没初始化完就触发了中断肯定是有问题的,所以这里设置一个参数rescan_disable来防止。

 if (host->rescan_disable)
  return;

 /* If there is a non-removable card registered, only scan once */
 if ((host->caps & MMC_CAP_NONREMOVABLE) && host->rescan_entered)
  return;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值