FATFS无法初始化SD卡

时间:2015-11-12 20:50:35

标签: c sd-card stm32 stm32f4discovery fat32

所以我正在使用STM32F407并尝试​​使用FATFS写入SD卡。我使用CubeMX生成FAT层和4位SDIO配置软件的代码。我已将以下代码添加到main以测试代码是否有效。

UINT bw;

f_mount(&FatFs, "", 0);     /* Give a work area to the default drive */

/*           Create a file */
if(f_open(&Fil, "newfile.txt", FA_WRITE | FA_CREATE_ALWAYS) == FR_OK) { 

   f_write(&Fil, "It works!\r\n", 11, &bw); /* Write data to the file */
   f_close(&Fil);                               /* Close the file */
   if (bw == 11) {      /* Lights green LED if data written well */
      //Celebrate
   }
}

但我无法初始化SD卡。当我单步执行代码时,我会进入磁盘初始化函数,该函数返回错误。由于我缺乏编写C的经验,我不知道如何使用以下函数以及它如何调用其他代码来初始化卡片,因为我认为需要将卡配置为4位模式。

/**
 * @brief  Initializes a Drive
 * @param  pdrv: Physical drive number (0..)
 * @retval DSTATUS: Operation status
*/
DSTATUS disk_initialize (
   BYTE pdrv                /* Physical drive nmuber to identify the drive */
)
{
   DSTATUS stat = RES_OK;

   if(disk.is_initialized[pdrv] == 0){ 
      disk.is_initialized[pdrv] = 1;
      stat = disk.drv[pdrv]->disk_initialize(disk.lun[pdrv]);
   }
return stat;
}

此时由于从未有过FAT工作,我只是坚持了下来。我在适配器中使用2GB micro SD卡,并使用FAT32完全格式化。我正在使用STM32F4发现板。我已经检查了从SD卡到电路板的连接。我可以在我的逻辑分析器上看到,当调用'disk_initialize'函数时,我确实得到了通信,但据我所知,它是一个nible,没有任何东西被发送回微观。有人可以通过建议寻找什么来帮助我吗?

由于

更新

好的,现在很难看出出了什么问题。如果想要立即安装驱动器,那么我在'disk_initialize'处收到错误。踩到我的时候就到了这条线:

stat = disk.drv[pdrv]->disk_initialize(disk.lun[pdrv]);

然后是一些如何立即跳转到:

if((response_r1 & SD_OCR_ILLEGAL_CMD) == SD_OCR_ILLEGAL_CMD)
{
    return(SD_ILLEGAL_CMD);
}

然后返回此错误。

我会继续寻找,但任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:0)

我对自己的董事会也有同样的问题。在设置" SDIOCLK时钟分频系数"后,我开始工作了。对于SDIO硬件,CubeMX中的参数从0到4。

答案 1 :(得分:-2)

最初,默认情况下,我使用默认设置hsd.Init.ClockDiv = 0 ;我将其更改为 hsd.Init.ClockDiv = 2; ,并且我能够写入8GB的微型SD卡。 由于此SD卡将与多个处理器一起运行,因此无需为我们的机器人目的而迅速前进。此SD卡,Uc和传感器都是独立的。

设置:

多维数据集MX = SDIO-SD 1B,RX SDIO_RX DMA2流3外设到内存低 SDIO_TX DMA2流6内存到外围低位

FATFS LFN -在BSS上启用静态工作缓冲区

时钟 16Mhz HSI 用于内部板制造的平台STM32F469-DISCO。

希望能帮助您!不要停止尝试!