所以我正在使用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);
}
然后返回此错误。
我会继续寻找,但任何帮助表示赞赏。
答案 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。
希望能帮助您!不要停止尝试!