在STM32F103上使用的SD卡中,移植了FatFs文件系统,虽然好用,但是也遇到了很多问题,以下我将针对我所遇到的问题和解决方法给予分享,供大家学习使用。我用的TF卡模块是德飞莱的SD卡、TF卡二合一的卡槽模块,图片如下:
1.SD卡初始化不成功
通过串口调试助手发现,当程序执行到
if(retry&&SD_SendCmd1(CMD58,0,0X01)==0)//鉴别SD2.0卡版本开始
{
for(i=0;i<4;i++)buf[i]=SD_SPI_ReadWriteByte(0XFF);//得到OCR值
if(buf[0]&0x40)SD_Type=SD_TYPE_V2HC; //检查CCS
else SD_Type=SD_TYPE_V2;
}
时,导致数据返回1,而不是正确数据FR_OK(即0)。
解决方法:
该模块有两个电源插针,一个3.3V,一个5V,刚开始,我是将3.3V的电源接在了5V上边,导致SD卡初始化不成功。在更换插针之后,3.3V的电源接在3.3V的插针上,SD卡初始化初始化成功!
2.SD卡安装不成功
通过串口调试助手逐步调试发现,当程序执行到res = mount_volume(&path, &fs, 0); /* Force mounted the volume */
时,返回值为3,也就是FR_NOT_READY, /* (3) The physical drive cannot work */
,即物理驱动无法工作。进一步调试,发现
stat = disk_initialize(fs->pdrv); /* Initialize the physical drive */
if (stat & STA_NOINIT)
{ /* Check if the initialization succeeded */
return FR_NOT_READY; /* Failed to initialize due to no medium or hard error */
}
是这里导致的返回FR_NOT_READY,进一步调试,找到原因。
解决办法:
disk_initialize 的switch和case之后添加:if(!result) return FR_OK; 就能使得SD卡安装成功,如下:
其他问题,后续补发