T卡问题的基本尝试方法总结
0赞不识别卡或卡通信过程中出错, 大部分是由于具体板子或卡的性能差异导致, 大多数可由以下途径
解决:
( 1)调整msdc_custom.c里的驱动电流设置,建议从4mA, 8mA, 12mA, 16mA逐个均尝试,以发现规
律
static const msdc_io_ctrl_struct msdc_io_ctrl_sd_custom = {
MSDC_ODC_8MA, // driving capacity of CMD/BS and SCLK
MSDC_ODC_8MA, // driving capacity of data lines
MSDC_ODC_SLEW_FAST, // slew rate of CMD/BS and SCLK
MSDC_ODC_SLEW_FAST // slew rate of data lines };
( 2)调整DAT/CMD线上的内部上拉电阻,具体参考datasheet,不同chip肯能不一样,也可能不是如
下这个寄存器。
举例MT6252的是2-->47K, 3-->23.5K,逐个均尝试,以发现规律。(具体请参考datasheet,调整内
部上拉的阻值这是个思路)
void MSDC_Initialize(void)
{
..........
BitFieldWrite32((kal_uint32*)MSDC_CFG,(kal_uint32)3,MSDC_CFG_PRCFG1);
BitFieldWrite32((kal_uint32*)MSDC_CFG,(kal_uint32)3,MSDC_CFG_PRCFG2);
ICFans
( 3) 调整外部上拉电阻,阻值47K, 33K, 10K等均请尝试。请分析卡通信出错的阶段,比如卡识别
的初期主要是CMD线的通信,读取数据则CMD/DAT均有通信。(请逐个均尝试,以发现规律)
若还能復現問題,请抓log。请打开MOD_FMT , MOD_MSDC_HISR抓取catcher log. 請選擇all class
on!并请把以下文件发给我司check:
原理图( pdf)、 makefile、 option.mak、 msdc_custom.c
Before HAL: drv文件夾( src, include) or After HAL: \hal\storage\mc文件夹
附:不识别卡问题,若从log里分析不出端倪:
您好,由于开机过程T卡识别的log打印不出来,您可以在开机后的某个按键的消息处理函数里,调
用函数SD_Initialize()来初始化卡,然后抓log来判断能初始化到哪个步骤了。请打开MOD_FMT ,
MOD_MSDC_HISR抓
取catcher log. 請選擇all class on!
比如: usb_task.c
static void usb_task_main( task_entry_struct * task_entry_ptr ) {...
//add here
{
extern kal_uint32 SD_Initialize(void);
kal_prompt_trace(MOD_MSDC_HISR, "usb_task_main SD_Initialize");
SD_Initialize();
} //add end
while(1)
{
...
}
SDC_CMD_STATUS SD_Initialize(void)
{
kal_uint32 cid[4],csd[4],scr[4];
kal_uint16 rca;
SDC_CMD_STATUS status;
gMSDC_Handle->mIsPresent = KAL_TRUE; //为了这个测试,还需要加这一句
