mtk android sd卡调试

2019-07-14 03:17发布

配置管脚和电源
sd.c
static u32 msdc_sd1_power(u32 on, MT65XX_POWER_VOLTAGE powerVolt)
{
//libin modify for M1-21 on 20120907
#ifdef MTK_EMMC_SUPPORT  // sd1 change to VGP      
    //msdc_ldo_power(on, MT65XX_POWER_LDO_VGP, powerVolt, &g_vgp);
    msdc_ldo_power(on, MT65XX_POWER_LDO_VMC, powerVolt, &g_vmc);   
#else  // VMC 
msdc_ldo_power(on, MT65XX_POWER_LDO_VGP, powerVolt, &g_vmc);
    //msdc_ldo_power(on, MT65XX_POWER_LDO_VMC, powerVolt, &g_vmc);    
#endif 
      msdc_ldo_power(on, MT65XX_POWER_LDO_VMCH, powerVolt, &g_vmch);     
    return 0;     
}

更改board.c struct msdc_hw msdc1_hw = {
    .clk_src        = 1,
    .cmd_edge       = MSDC_SMPL_FALLING,
    .data_edge      = MSDC_SMPL_FALLING,
    .clk_drv        = 0,
    .cmd_drv        = 0,
    .dat_drv        = 0,
    .data_pins      = 4,
    .data_offset    = 0,
    .flags = MSDC_SYS_SUSPEND | MSDC_HIGHSPEED, //libin add for M1-21 on 20120908
//.flags          = MSDC_SYS_SUSPEND | MSDC_WP_PIN_EN | MSDC_CD_PIN_EN | MSDC_REMOVABLE| MSDC_HIGHSPEED, //libin del
};

参考如下:
1. 检查硬件设计是否按照参考设计进行;
2. 检查SD Host端供电,即DVDD_MC1的连接;
检查代码:mediatekplatformmt6575kerneldriversmmc-hostsd.c
static u32 msdc_sd1_power(u32 on, MT65XX_POWER_VOLTAGE powerVolt) #ifdef MTK_EMMC_SUPPORT // sd1 change to VGP  msdc_ldo_power(on, MT65XX_POWER_LDO_VGP, powerVolt, &g_vgp);  #else // VMC  msdc_ldo_power(on, MT65XX_POWER_LDO_VMC, powerVolt, &g_vmc);  #endif  msdc_ldo_power(on, MT65XX_POWER_LDO_VMCH, powerVolt, &g_vmch);  return 0;  }
3. SD卡是否支持热插拔
根据MSDC1_INSI的连接情况检查mediatekcustom{project_name}kernelcoresrcoard.c中热插拔的标志(MSDC_CD_PIN_EN | MSDC_REMOVABLE);
支持热插拔,则添加标志,并配置对应的GPIO;
不支持热插拔,则去除标志,无需配置对应的GPIO。
struct msdc_hw msdc1_hw = {  .clk_src = 1, .cmd_edge = MSDC_SMPL_FALLING, .data_edge = MSDC_SMPL_FALLING, .clk_drv = 0, .cmd_drv = 0, .dat_drv = 0, .data_pins = 4, .data_offset = 0, .flags = MSDC_SYS_SUSPEND | MSDC_WP_PIN_EN | MSDC_HIGHSPEED|MSDC_SPE | MSDC_CD_PIN_EN | MSDC_REMOVABLE, };