问题标签 [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.
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 卡并重新放入,它永远不会工作,直到你重置你的微控制器。
我的微控制器是STM32F427VI和SDIO配置如下:
它适用于 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_PowerON
。SD_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。不幸的是,现在我没有时间详细了解我的日程安排。也许在未来。
c - 在 stm32F407 上使用 FatFS 和 SD 卡几分钟后停止写入
在我的工作中,我无法重现该错误。它只出现在“领域”中。我已经构建了一个记录设备,用于记录 GPS 的数据和机器人的增量传感器。
记录 2 / 3 分钟后,它会停止。每次记录的数据量约为 175kB。您对搜索或调试此错误有任何想法吗?在劳动力这样的良好环境中调试很容易,但是如何在“现场”/路上调试呢?
我正在使用带有 FatFS 和 SDIO 的 STM32F407 控制器来连接 8 GB 微型 SD 卡。Gps(linx-receiver)和增量传感器通过UART连接。
c - 使用 fatfs 的 f_printf 的断言错误,但 f_write 工作正常
我有一小段代码可以打开一个文件,读取一个数字,添加一个并将其写回文件。当我使用它时它工作正常f_write
,但f_open
返回FR_INT_ERR
。我正在使用版本 R0.12c。产生错误的代码:
但是,如果我更改fr = f_printf(&indexFile, "%d", indexNumber+1);
为以下内容,它不会抱怨:
虽然我可以继续使用第二种方法,但我是那种需要了解问题所在的人。
顺便说一句:我正在使用 STM32
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。
c - 如果已经存在使用 FATFS 的文件,则在 sd 卡上创建另一个 txt 文件
我想使用 FATFS(STM32 微控制器)将一些数据存储到 sd 卡,但是我有一个问题,如果已经有文件(来自旧实验),我想每次都创建一个新文件。那么有人可以举例说明如何做到这一点吗?例如,如果 sd 卡上已经存在一个名为 TEST1.TXT 的文件,程序应该创建 TEST2.TXT,如果 TEST2.TXT 存在则 TEST3.TXT 等等...
audio - stm32 SD卡混音
我正在尝试通过 SDIO 从我的 SD 中读取 2 个带有 FATFS 的文件并混合 16 位 PCM 音频数据。它可以工作,但输出声音在播放 2 个文件时速度较慢,听起来不太好。
我使用 I2S 将数据发送到 IC。我的 Buffersize 是 4096。如果不混合 2 个缓冲区,音频质量就很好。当我使用该示例混合我在网上找到的缓冲区时,您会听到很多噪音。
有任何想法吗?
我的代码:
I2S 回调发送下一个缓冲区
stm32 - 在 STM32 上使用 FatFS 读取单行
有没有一种干净的方法可以在 STM32 上使用 FatFS 库读取单行?
我需要一个函数,用 SD 卡上的 txt 文件中的特定行/行填充缓冲区。
目前我用 f_read 读取文件,但我不知道一行有多长:
谢谢
c - fno.fname 的 Fatfs 字符串比较
我在读取 SD 卡上的文件大小时遇到问题。这些文件的大小在应用程序中会有所不同,因此我需要获取文件的大小。如果我运行下面的代码,我可以看到我目录中的文件及其大小。
我需要做的是将 DATA.CSV 文件的大小存储为变量。如何添加比较以获取fno.fsize
列表的时间"data.csv
这打印出来:
请注意,这是使用臂板在 C 中编程的。我需要做什么操作才能获取文件大小?
我想要类似的东西:
c - Fatfs 检测 SD 卡移除
我的 SD 卡有问题,如果将其移除,则无法检测到它。(手动删除)。因此,当我尝试使用 SD 卡时,会出现错误,因为它不存在。
所以我需要检测SD卡是否被移除/插入。如果它被插入,那么我可以重新初始化,这样我就可以重复使用 SD 卡。
我正在使用 FatFs 并用 C 编程。
请注意,我的 SD 卡适配器有以下引脚,没有芯片检测:
- CS
- SCK
- 莫西
- 味噌
- VCC
- 接地
我该如何检测到这一点,然后取消初始化 SD 卡。然后在重新插入时重新初始化 SD 卡。