gpt4 book ai didi

c - FATFS 无法初始化 SD 卡

转载 作者:行者123 更新时间:2023-11-30 17:08:24 34 4
gpt4 key购买 nike

所以我正在使用 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 微型 SD 卡,并使用 FAT32 完全格式化。我正在使用 STM32F4 发现板。我已经彻底检查了 SD 卡到开发板的连接。我可以在我的逻辑分析仪上看到,当调用“disk_initialize”函数时,我确实获得了通信,但据我所知,它是一个半字节,并且没有任何内容发送回微 Controller 。有人可以帮助我建议要寻找什么吗?

谢谢

更新

好吧,现在很难看出出了什么问题。如果想要立即安装驱动器,或者不立即安装驱动器,那么我会在“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);
}

然后返回此错误。

我会继续寻找,但感谢任何帮助。

最佳答案

我自己的主板也有同样的问题。在将 CubeMX 中的 SDIO 硬件的“SDIOCLK 时钟分频系数”参数从 0 设置为 4 后,我让它开始工作。

关于c - FATFS 无法初始化 SD 卡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33681083/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com