调一款加密ic ET300时,发现通信不上,报错-110,就是超时出错,检查了gpio和sdcard配置,也检查了sd供电,发现sdio的供电域是1.8v,而根据协议初始化时默认是3.3v,然后切换到1.8v,通过飞线,使用一个ldo来供电。修改后,还是通信异常。
加打印调试,在mmc_send_cid函数报错了,就是读不到卡的cid信息。默认读不到cid,代码就退出了。 检查了再检查,实在找不出问题,于是修改代码,强制往下跑,看log,居然读到了卡的信息。

也就是只有CMD2命令跑不过,其他命令都跑过了。
发送CMD2命令前会先切换到1.8v的电压,对应平台的sdio驱动

也就是sdio host的名字是sdio_sd才会复位下平台的sdio host,而dts配置名字不是sdio_sd,导致没有复位平台的host,修改名字后,代码能正常跑过。
调是调完了,顺便把相关的代码逻辑整理下。
从mmc_rescan这个函数讲起,相关内容已在Linux下的eMMC_Android开发-优快云博客描述过。
//以不同频率去扫描卡,但实际上某些平台定义的最小频率是400k(只会以400k去扫)
void mmc

最低0.47元/天 解锁文章
635





