MTK平台SD热插拔相关设置以及问题解决

来源:互联网 发布:fastboot刷zip软件 编辑:程序博客网 时间:2024/06/16 15:47

MTK6735/53平台项目添加SD卡的热插拔功能
测试报出的bug是SD卡无法进行热插拔,只能在通过重启之后才能读取到SD卡的信息。
根据读取相应的平台手册,找到了一些相应的设置方法,在根据文档设定完dws文件的设置之后,发现仍然不能进行热插拔的动作,之后开始分析情况。
首先,考虑到SD卡能够在重启之后进行读取,则排除了SD卡无法读取方面的相关问题。分析得出是没有生成中断,造成无法识别到SD卡。在查看相应驱动函数,也就是函数中的处理中断和申请中断的函数后,发现中断已经生成,并且中断处理函数也在执行之中。
之后,在对检测口的GPIO进行手动赋值,在设置为低电平有效的情况,向GPIO79口写入低电平的时候,SD卡能够在系统中进行识别,但是仍然无法进行热插拔检测。同时,在检测GPIO79口的状态的时候,看到开机之后保持的是低电平状态,无法通过插拔SD卡进行改变,这说明了中断正常,但是GPIO口有异常,怀疑是GPIO口的设置有问题或者是硬件设计时,gpio79口本身是不支持中断。

*MTK平台SD卡相关设置1.dws文件中,首先需要去设置对应的GPIO口,需要将对应的GPIO口设定成中断口,同时在中断设定的界面中,需要需要设置中断的名称,去抖动时间,还有触发的方式。2.针对MTK平台对于SD卡热插拔,在MTK说明文档中,设定了一个热插拔的标志位,这个标志位是MSDC_CD_PIN_EN和MSDC_REMOVABLE,这两个标志位的设置是在myandroid/CB04/kernel-3.10/drivers/misc/mediatek/mach/mt6735/cb04_6753/core/board.c中的struct msdc_hw msdc1_hw这个结构体。***MTK平台SD驱动相关函数分析**static irqreturn_t msdc1_eint_handler(void)这个函数的作用是用在热插拔的时候,对于中断的处理函数,其中主要是用来检测SD的状态,同时设置相应的电平触发方式。static void msdc_enable_cd_irq(struct msdc_host *host, int enable)这个函数的作用是用来使能中断。通过读取dws文件来读取中断GPIO号和去抖动的延迟时间,同时来设置触发中断的方式,并且申请中断request_irq

关于ADAS项目中SD卡热插拔问题所出现的电平相反的问题
通过硬件分析,得出的结果是在项目中的SD卡的卡槽与其他项目的不同,是在插入SD卡的时候,电平由低电平变成高电平。也就是中断触发的方式是高电平触发,但是在程序中,还是以低电平触发方式,因此,需要对程序中的电平触发方式进行修改。
在项目所在的dws文件中,需要对中断中触发的电平进行设置,要将低电平触发改成高电平触发。
后在进行编译调试之后,发现仍然无法对卡进行识别,因此通过log对代码的执行情况进行调查。发现在程序中设置的电平中断的触发方式的设置仍然是低电平触发,但是没有在当前程序中找到设置电平触发的参数。
之后找到函数初始化函数进行查找,根据追踪的信息,找到了设置电平触发的结构体,进行了相应的修改,之后项目板则可以进行相应的热插拔工作。

**相关文件以及函数说明:
1.ADAS项目的dws文件
kernel-3.10\drivers\misc\mediatek\mach\mt6735\(项目名称)\dct\dct\codegen.dws
2.函数数据结构体文件,在其中修改热插拔的相关文件,以及中断的电平触发方式
kernel-3.10/drivers/misc/mediatek/mach/mt6735/cb04_6753/core/board.c**

0 0
原创粉丝点击