0

我正在使用 chan FatFS 库通过 SDIO 协议将 SD 卡(16Gb Sandisk 超微型 SD)连接到 STM32F407 微控制器。当我尝试将数据写入现有文件时,f_write 返回 FR_OK 并返回写入字节数(此值等于要写入的字节数),但 f_close() 返回 FR_DISK_ERR,最后文件为空。通过更多实验,我发现如果我使用 64Kb 单元分配大小和包含一些文本的现有文件格式化微型 SD 卡,那么我可以将 64Kb 数据写入文件,但 f_close() 返回 FR_DISK_ERR,最后文件不是空的。我能够在 Windows 10 操作系统中查看数据。如果现有文件中没有文本,那么即使 f_write 返回 FR_OK 但 f_close 返回 FR_DISK_ERR,我也会得到一个空文件。简而言之,当我尝试在从 PC 创建的文本文件上使用 f_write 时,我可以覆盖该文件的内容直到 64Kb。但我无法让它与我用 f_open 创建的空文件一起工作

我遇到了一个类似的帖子有同样的问题

TMS320F2812 FatFs f_write 返回 FR_DISK_ERR

我尝试了上述帖子中给出的解决方案,但没有奏效。由于我的控制器中有 192K RAM,我想它足以让这个 FatFs 模块工作。我的堆栈大小约为 13Kb,堆大小为 4Kb,这对于这个应用程序来说太大了。SD 卡提供 3.3V 电源电压。

我深入研究了代码以查看错误发生的位置,发现在设置卡的块大小时出现 SD_ILLEGAL_CMD 错误。内部 f_close(ff.c 文件)->f_sync(ff.c 文件)->move_window(ff.c 文件)->disk_read(diskio.c 文件)->SD_ReadBlock(sdcard.c 文件)在设置时返回 SD_ILLEGAL_CMD 错误卡的块大小。

任何解决方案表示赞赏。如果需要更多信息,请随时询问,我会更新更多信息。

Chan FatFs 版本 - R0.07e

4

0 回答 0