先说明一下这个问题
现对SD卡的烧卡问题做详细的解释
原来的波形显示
在EINT拉低后(拔出SD卡)后,VMCH过了一段时间才拉低,如果在这段时间内,sim卡触碰到这个引脚,就有烧卡的风险
mtk回复这个根本原因是硬件的设计有缺陷,软件可以修改降低这个风险,但是无法完全解决。
mtk提出的解决方案很容易理解:在中断处理函数里面加断电函数
请参考(FAQ15216)的第四项4、拔出卡后快速给sdcard关电
将
pmic_config_interface_nolock(0x0A1C,0x0,0x1,1); //add here for disable VMCH
改为
pmic_config_interface_nolock(0x1AC4,0x0,0x1,0); //add here for disable VMCH
很好理解
不过要注意一点
修改代码后再中断处理函数里面加了msdc_sd_power_off_quick这个函数来断电
mmc_gpio_cd_irqt
-> msdc_sd_power_off_quick
-> mmc_rescan //mmc_schedule_delayed_work(&host->detect, delay)
-> for循环调用mmc_rescan_try_freq
-> mmc_power_up, ...,mmc_attach_sd,... mmc_power_up
如上面的调用结果显示无论是插卡还是拔卡,都会进入中断处理函数mmc_gpio_cd_irqt 中
无论拔卡还是插卡都会先断一下电,然后再进入linux的mmc流程
linux的mmc流程还是会执行原来的那一套操作