问题标签 [fatfs]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1833 浏览

c - FR_DISK_ERROR 总是由 f_open 返回

我的团队一直在研究一个包含基于标准库的 SD 卡的项目。最近我们决定迁移到 HAL 并开始了。

幸运的是,我们项目的所有部分都尽可能地更改为 HAL,它们运行良好,但我们不知道为什么 SD 卡不能正常运行。

我们没有更改外设的配置时钟,但我们必须将“SDMMC 控制器的时钟频率”在 HAL 中更改为 1.5MHz,而在 STDLibrary 中为 24MHz。因为,根本没用。

此外,我们的客户使用的 SD 卡类型范围很广,它们都还可以,但不是很好。我的意思FR_DISK_ERR是,在工作期间返回很多,但我们的设备试图获取FR_OK.

不幸的是,我们总是收到FR_DISK_ERR一些 SD 卡,而它在我们的 STDLibrary 版本中一直有效。

此外,我们发现如果“f_mount”函数被调用一次,然后你取出 SD 卡并重新放入,它永远不会工作,直到你重置你的微控制器。

我的微控制器是STM32F427VISDIO配置如下:

它适用于 4 位宽的总线。

此外,我的设备时钟为 96MHz,“APB2 外设时钟”为 48MHz。

编辑:

至于重新插入卡 - 当 f_openFR_DISK_ERR返回时,我通过调用 f_mount 再次进行了初始化。我一直这样做,直到给予,但在这种情况下FR_OK它从未返回。FR_OK

正如亲爱的 Jacek Ślimok 所说,我意识到 f_mount 第二次没有初始化 SDIO。

因为有一个标志不允许再次调用“SD_initialize”(SD_initialize 函数包括 BSP_SD_Init)。

这是diskio.c的代码:

现在我在调用 f_mount 之前使用过,它现在可以正常工作了SD_PowerONSD_InitCard这是一个错误,不是吗?

但其他问题仍然存在。它根本不适用于 24MHz 时钟,并且FR_DISK_ERR仍然由一些 SD 卡返回。

编辑(2020/02/24):

最后,当我将我的 HAL 库更新到 STM32Cube_FW_F4_V1.24.2 时,它起作用了。但是 HAL 仍然不如标准外设好用。例如,我还不能将“ClockDiv”设置为“0”(24MHz)。它根本不起作用。现在我将“ClockDiv”设置为“1”(16MHz),这对我的项目来说还不够好,但我必须这样做。或者,如果您将 SDCard 拿走并在程序运行时再次插入,您将无法使用 f_mount 初始化 FATFS。它根本行不通。您必须自己重新初始化 SDIO Peripheral。不幸的是,现在我没有时间详细了解我的日程安排。也许在未来。

0 投票
1 回答
72 浏览

c - 在 stm32F407 上使用 FatFS 和 SD 卡几分钟后停止写入

在我的工作中,我无法重现该错误。它只出现在“领域”中。我已经构建了一个记录设备,用于记录 GPS 的数据和机器人的增量传感器。

记录 2 / 3 分钟后,它会停止。每次记录的数据量约为 175kB。您对搜索或调试此错误有任何想法吗?在劳动力这样的良好环境中调试很容易,但是如何在“现场”/路上调试呢?

我正在使用带有 FatFS 和 SDIO 的 STM32F407 控制器来连接 8 GB 微型 SD 卡。Gps(linx-receiver)和增量传感器通过UART连接。

0 投票
1 回答
195 浏览

c - 使用 fatfs 的 f_printf 的断言错误,但 f_write 工作正常

我有一小段代码可以打开一个文件,读取一个数字,添加一个并将其写回文件。当我使用它时它工作正常f_write,但f_open返回FR_INT_ERR。我正在使用版本 R0.12c。产生错误的代码:

但是,如果我更改fr = f_printf(&indexFile, "%d", indexNumber+1);为以下内容,它不会抱怨:

虽然我可以继续使用第二种方法,但我是那种需要了解问题所在的人。

顺便说一句:我正在使用 STM32

0 投票
1 回答
280 浏览

embedded - fatfs f_write 在传递指向邮件队列中数据的指针时返回 FR_DISK_ERR

我正在尝试使用 FreeRTOS 将 ADC 数据写入 STM32F7 上的 SD 卡,并且我正在使用 CMSIS-RTOS API 的 V1。我正在使用邮件队列,并且我有一个包含数组的结构。

在 ADC 半/完整中断上,我将数据添加到队列中,并且我有一个消费者任务将这些数据写入 sd 卡。我的问题在我的消费者任务中,我必须对另一个数组执行 memcpy,然后将该数组的内容写入 sd 卡。

这按预期工作,但如果我尝试将此行更改为

为了摆脱 memcpy,f_write 返回FR_DISK_ERR。任何人都可以帮助阐明为什么会发生这种情况,我觉得额外的 memcpy 没用,您应该能够将指向队列的指针直接传递给 f_write。

0 投票
0 回答
299 浏览

c - 如果已经存在使用 FATFS 的文件,则在 sd 卡上创建另一个 txt 文件

我想使用 FATFS(STM32 微控制器)将一些数据存储到 sd 卡,但是我有一个问题,如果已经有文件(来自旧实验),我想每次都创建一个新文件。那么有人可以举例说明如何做到这一点吗?例如,如果 sd 卡上已经存在一个名为 TEST1.TXT 的文件,程序应该创建 TEST2.TXT,如果 TEST2.TXT 存在则 TEST3.TXT 等等...

0 投票
0 回答
375 浏览

audio - stm32 SD卡混音

我正在尝试通过 SDIO 从我的 SD 中读取 2 个带有 FATFS 的文件并混合 16 位 PCM 音频数据。它可以工作,但输出声音在播放 2 个文件时速度较慢,听起来不太好。

我使用 I2S 将数据发送到 IC。我的 Buffersize 是 4096。如果不混合 2 个缓冲区,音频质量就很好。当我使用该示例混合我在网上找到的缓冲区时,您会听到很多噪音。

有任何想法吗?

我的代码:

I2S 回调发送下一个缓冲区

0 投票
1 回答
1748 浏览

stm32 - 在 STM32 上使用 FatFS 读取单行

有没有一种干净的方法可以在 STM32 上使用 FatFS 库读取单行?

我需要一个函数,用 SD 卡上的 txt 文件中的特定行/行填充缓冲区。

目前我用 f_read 读取文件,但我不知道一行有多长:

谢谢

0 投票
2 回答
116 浏览

c - fno.fname 的 Fatfs 字符串比较

我在读取 SD 卡上的文件大小时遇到​​问题。这些文件的大小在应用程序中会有所不同,因此我需要获取文件的大小。如果我运行下面的代码,我可以看到我目录中的文件及其大小。

我需要做的是将 DATA.CSV 文件的大小存储为变量。如何添加比较以获取fno.fsize列表的时间"data.csv

这打印出来:

请注意,这是使用臂板在 C 中编程的。我需要做什么操作才能获取文件大小?

我想要类似的东西:

0 投票
0 回答
159 浏览

c - c Fatfs CSV 写入错误

我对 CSV 写入功能有疑问,有时它会在文件中打印一个空行。如何检查或删除它,因为我不想在 CSV 中写入空行。我的 CSV 输出是:

CSV 输出

如您所见,前两行是正确的,第三行是错误的,经过一段时间后它恢复并删除了多余的行。

这是我对 CSV 的写入函数:

我有一组内部 char 数组,它们存储要写入 CSV 的数据值,我只是将它们循环并存储到 SD 卡中。但是,我不需要创建空行。

0 投票
0 回答
90 浏览

c - Fatfs 检测 SD 卡移除

我的 SD 卡有问题,如果将其移除,则无法检测到它。(手动删除)。因此,当我尝试使用 SD 卡时,会出现错误,因为它不存在。

所以我需要检测SD卡是否被移除/插入。如果它被插入,那么我可以重新初始化,这样我就可以重复使用 SD 卡。

我正在使用 FatFs 并用 C 编程。

请注意,我的 SD 卡适配器有以下引脚,没有芯片检测:

  • CS
  • SCK
  • 莫西
  • 味噌
  • VCC
  • 接地

我该如何检测到这一点,然后取消初始化 SD 卡。然后在重新插入时重新初始化 SD 卡。