首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FATFS无法初始化SD卡

FATFS无法初始化SD卡
EN

Stack Overflow用户
提问于 2015-11-13 04:50:35
回答 2查看 6K关注 0票数 0

因此,我正在使用STM32F407,并尝试使用FATFS写入SD卡。我已经使用CubeMX为FAT层和4bitSDIO配置软件生成代码。我已经在main中添加了以下代码,以测试代码是否正常工作。

代码语言:javascript
复制
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位模式。

代码语言:javascript
复制
/**
 * @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;
}

在这一点上,由于从来没有变胖的工作,我是一个但卡住了。我在适配器中使用了一个2 2GB的microSD卡,并且完全用FAT32格式化。我使用的是STM32F4发现板。我已经彻底检查了从SD卡到电路板的连接。我可以在我的逻辑分析仪上看到,当'disk_initialize‘函数被调用时,我确实得到了通信,但据我所知,它是一个nible,没有任何东西被发送回micro。有人能帮我建议一下要找什么吗?

谢谢

更新

好的,所以现在很难看出哪里出了问题。如果想要立即挂载或不挂载驱动器,我会在'disk_initialize‘处得到错误。当我一步一步通过时,我走到了那条线:

代码语言:javascript
复制
stat = disk.drv[pdrv]->disk_initialize(disk.lun[pdrv]);

然后看看它是如何立即跳转到:

代码语言:javascript
复制
if((response_r1 & SD_OCR_ILLEGAL_CMD) == SD_OCR_ILLEGAL_CMD)
{
    return(SD_ILLEGAL_CMD);
}

然后返回此错误。

我会继续寻找,但任何帮助都是非常感谢的。

EN

回答 2

Stack Overflow用户

发布于 2017-05-05 20:21:08

我自己的冲浪板也有同样的问题。我在CubeMX中将SDIO硬件的"SDIOCLK时钟分频因数“参数从0设置为4后,使其正常工作。

票数 0
EN

Stack Overflow用户

发布于 2020-05-23 18:40:14

最初,在默认情况下,我使用的默认设置hsd.Init.ClockDiv = 0;我将其更改为hsd.Init.ClockDiv = 2;,并且我能够写入8 8GB的micro SD卡。对于我们的机器人来说,速度不需要太快,因为这张SD卡将在多个处理器上运行。此SD卡、Uc和传感器是独立的。

设置:

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

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

Clock 16 HSI高速集成电路平台STM32F469-DISCO用于内部板制造。

希望这能有所帮助!不要停止尝试!

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33681083

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档