通过 SPI 的 FATFS 对于 NUCLEOF103RB 不起作用,返回 FR_NOT_READY (3)

问题描述 投票:0回答:1

我已经解决这个问题好几天了,我一直在尝试在 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的配置:

SPI配置:
enter image description here

FATFS 配置:

enter image description here

CubeIDE 中的 SPI 引脚分配:

enter image description here

对于 SPI 通信协议,我将 CS 输出设置为默认高电平。
enter image description here

时钟配置:

enter image description here

我用的是这个SD读卡器模块

enter image description here

我尝试过但没有成功:

  • 关闭SD读卡器模块。

  • 关闭 microSD 卡。

  • 对 MOSI 和 CS 线使用内部上拉电阻(对于 MISO 和 SCK,我没有选择上拉电阻的选项。)

  • 默认 CS 输出为“低”。

  • 检查了示波器上的SCK信号,它正在读取一些东西,在我看来没问题,所以我不认为这是硬件问题。

  • 将一些符号放入 f_mount 输入的“”中。

  • 使用 0 作为 f_mount 函数的初始化输入(尽管这总是返回 FR_OK,所以它并没有真正的帮助。)

  • 仔细检查 SPI 连接(一切都应正确连接。)

欢迎任何帮助,非常感谢!

c embedded sd-card stm32f1 fatfs
1个回答
0
投票

所以最终我能够解决这个问题。我按照建议进行了操作,并通过断点一步步执行了该程序。我发现这绝对是硬件问题。我换了一堆蓝色的 SD 卡读卡器模块,但还是不行。然而,当我使用与 SparkFun 完全不同的 SD 卡读卡器时,它突然工作了。这些蓝色 SD 卡读卡器模块工作。总而言之——小心这些蓝魔。

© www.soinside.com 2019 - 2024. All rights reserved.