因此,我正在使用STM32F407,并尝试使用FATFS写入SD卡。我已经使用CubeMX为FAT层和4bitSDIO配置软件生成代码。我已经在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;
}在这一点上,由于从来没有变胖的工作,我是一个但卡住了。我在适配器中使用了一个2 2GB的microSD卡,并且完全用FAT32格式化。我使用的是STM32F4发现板。我已经彻底检查了从SD卡到电路板的连接。我可以在我的逻辑分析仪上看到,当'disk_initialize‘函数被调用时,我确实得到了通信,但据我所知,它是一个nible,没有任何东西被发送回micro。有人能帮我建议一下要找什么吗?
谢谢
更新
好的,所以现在很难看出哪里出了问题。如果想要立即挂载或不挂载驱动器,我会在'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);
}然后返回此错误。
我会继续寻找,但任何帮助都是非常感谢的。
发布于 2017-05-05 20:21:08
我自己的冲浪板也有同样的问题。我在CubeMX中将SDIO硬件的"SDIOCLK时钟分频因数“参数从0设置为4后,使其正常工作。
发布于 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用于内部板制造。
希望这能有所帮助!不要停止尝试!
https://stackoverflow.com/questions/33681083
复制相似问题