我已经解决这个问题好几天了,我一直在尝试在 8GB SD 卡上使用 f_mount(我将其格式化为 FAT32,扇区大小为 4096。)我还复制了一个非常流行的库eziya:https://blog.naver.com/eziya76/221188701172。我在 NUCLEO 板上使用的芯片是 STM32F103RB。
虽然程序很简单,但是无论我做什么,SD卡都无法挂载。当尝试读取可用空间和总空间时,它总是返回 0。
这是我的主循环代码:
FATFS fs;
FIL fil;
FRESULT fresult;
char buffer[1024];
UINT br, bw;
FATFS *pfs;
DWORD fre_clust;
uint32_t total, free_space;
fresult = f_mount(&fs, "", 1);
printf("%d \n", fresult);
if (fresult != FR_OK) printf("Unsuccessful again\n");
else printf("Mounted successfully! \n");
f_getfree("", &fre_clust, &pfs);
total = (uint32_t)((pfs->n_fatent - 2) * pfs->csize * 0.5);
printf("Total size: \t%lu\n",total);
free_space = (uint32_t)(fre_clust * pfs->csize * 0.5);
printf("SD CARD free space: \t%lu\n", free_space);
我使用SPI进行配置,以下是我对CubeIDE的配置:
FATFS 配置:
CubeIDE 中的 SPI 引脚分配:
时钟配置:
我用的是这个SD读卡器模块
我尝试过但没有成功:
关闭SD读卡器模块。
关闭 microSD 卡。
对 MOSI 和 CS 线使用内部上拉电阻(对于 MISO 和 SCK,我没有选择上拉电阻的选项。)
默认 CS 输出为“低”。
检查了示波器上的SCK信号,它正在读取一些东西,在我看来没问题,所以我不认为这是硬件问题。
将一些符号放入 f_mount 输入的“”中。
使用 0 作为 f_mount 函数的初始化输入(尽管这总是返回 FR_OK,所以它并没有真正的帮助。)
仔细检查 SPI 连接(一切都应正确连接。)
欢迎任何帮助,非常感谢!
所以最终我能够解决这个问题。我按照建议进行了操作,并通过断点一步步执行了该程序。我发现这绝对是硬件问题。我换了一堆蓝色的 SD 卡读卡器模块,但还是不行。然而,当我使用与 SparkFun 完全不同的 SD 卡读卡器时,它突然工作了。这些蓝色 SD 卡读卡器模块无工作。总而言之——小心这些蓝魔。