问题标签 [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 投票
0 回答
69 浏览

c - 为什么 f_print 在 SD 卡上无法正常工作?

目前,我正在使用 Intel D2000 Quark 板写入 SD 卡。我正在使用标准的 FatFs 系统来建立 FAT16 标准。

问题:每当我写入 SD 卡时,SD 卡只有在文件中有内容时才会保存它。这意味着,我发送的文本将覆盖文件中的内容。当我将读/写指针设置为文件末尾时(这是最终的目标),我写入的数据会丢失。

我的主要:

当文件中有内容并且读/写指针位于文件开头时,我为控制台获得的结果。此时,数据被写入 SD 卡并保存(当我将 SD 卡放入笔记本电脑并打开文件时,我可以读取它)。

当读/写指针位于文件末尾(FA_OPEN_APPEND)时,我从控制台得到的结果:

之后,当我将 SD 卡放入笔记本电脑时,文本消失了。

有没有人遇到过同样的问题并找到了解决方案。当您需要更多信息时,请询问。

0 投票
0 回答
120 浏览

c - 如何创建现有 FatFs 分区的备份副本?

我正在开发一个项目,该项目使用 FatFs lib 在外部闪存中安装分区,以存储图像和音频文件。无论如何,应用程序是车载的,文件系统有时会因为这种环境不可避免的电噪声和振荡而丢失其内存引用。

(即:文件仍然存在,但没有人可以看到它们中的任何一个 - 或者有时只能看到其中的一些! - 如果他们能够设法再次安装 FAT 分区)。

我想出的解决这个问题的方法之一是创建分区的备份副本,这样如果文件系统丢失了它的引用,我可以自动恢复它。

任何人都可以帮助我或阐明我如何能够做到这一点?

0 投票
1 回答
965 浏览

stm32 - 用于 spi flash 的低层 fatfs 示例

我想为 SPI 闪存启动 FatFs 文件系统库。

我需要一个示例或指南来移植这个库的低层。

FatFs 链接:
http ://elm-chan.org/fsw/ff/00index_e.html

SPI FLASH 部件号:W25Q64FV

单片机类型:STM32F107VC

0 投票
1 回答
577 浏览

c++ - 如何确保目录对象的读取索引在 FATFS 中倒带?

我猜这是一个基本问题:我正在使用 FatFs 中的 f_readdir 函数从命令行读取目录的内容,但我无法让该函数多次运行。第一次运行很好:我在 CLI 中键入“目录”,它会实时显示目录中的每个文件。然而,要求它再次重复 f_readdir 操作(即,在第一个成功完成后再次键入“目录”命令)不会输出任何内容。

我相信这是因为文件读取对象在 f_readdir 操作结束时没有被倒回到零,并且后续读取目录的请求从不存在的索引部分开始。这是我目前能看到的最好的解释,至少。它在 Elm Chan 的FatFs 网站上说:“当所有目录项都已读取且没有要读取的项时,将一个空字符串存储到 fno->fname[] 中而没有任何错误。当给 fno 一个空指针时,目录对象的读取索引被倒带。”

这是我的代码。忽略函数参数,它们是运行命令的 RTOS 东西:

这个 while 循环是我在网上找到的,所以不幸的是,我不完全理解 fname 索引的工作原理,就像我阅读了详细解释一样多次。也许它没有意识到它正在根据我的 while 循环的条件到达目录的末尾,尽管它肯定会成功完成并关闭目录。当我再次运行该函数时,我可以看到 fno 对象中仍然存储有前一次运行的文件信息。

我尝试过的事情(在这一点上值得补充一下,我对编程世界很陌生):

我想这是一些我没有得到的基本东西,但如果我在这方面做得不好,请原谅我。不幸的是,我无法访问真正的程序员IRL,所以我不得不对社区进行民意调查。

哦,对了,我正在使用 Eclipse IDE、GNU ARM 构建工具和 STM32L。

0 投票
0 回答
517 浏览

c - 使用 FatFs 访问 SDHC 卡上的现有分区

我一直在尝试将我的所有代码从 STM32 Arduino 库转移到 ST Hal 库,但我遇到了 SD 卡的问题。我使用的 SDHC sd 卡有两个分区(一个用于恢复出厂设置,另一个用于正常设置)它们在我的 PC 上显示为驱动器 D 和 E。

因此,在为我的 STM32F1 芯片设置 FATFS 时,使用 SD 总线一位模式时一切正常。使用标准代码,我可以写入出厂重置分区:

初始化代码并安装驱动器时,一切似乎都很好,即使我想安装第二个分区(我不确定这是否是我对代码所做的),调试器中的返回都是 FR_OK:

我承认,即使我进行了研究,我发现安装和随后的 VolToPart 数组显然需要有点模糊。

在挂载两次调试代码后(参见上面的代码),我使用驱动器标识符测试了代码(我打开了_FS_RPATH,我认为它没有效果,但只是为了确定)我可以将 Hello World 写入 0 :Test2.txt 但得到 1:Test2.txt 的无效驱动器错误。

我希望能够在驱动器之间切换,但我觉得我错过了一些我需要启动或做的事情。目前我不确定 FatFs 是否可以看到 SDCard 分区,我只是没有对其进行初始化,或者它是否是 SD 卡看不到的完全独立的驱动器。我希望有人能够帮助我,如果您需要更多信息,请告诉我。

编辑:经过一段时间的调试,我发现了一些东西:SDPath 在链接驱动程序中被定义为“0:/”,所以这个驱动器工作是有道理的。其他路径未定义(据我所知,只是获取默认值“0:/”,这意味着我正在执行相同的安装两次。当我尝试添加单独的驱动程序并初始化那个时,它仍然是一个无效的磁盘错误。

然后我运行了两次链接驱动程序,并在第二次安装时收到了 FR_INVALID_DRIVE 消息。我用相同的 FATFS 对象和不同的对象都试过了。

0 投票
0 回答
712 浏览

c - FATFS f_write 和 f_close 执行速度不一致

使用 Systick 计算每个函数在从 STM32f411RE 将数据写入 SD 卡(4 位 SDIO + DMA)的过程中花费的时间,我得到 f_write 和 f_close 函数的零星执行时间。

大多数情况下,f_write 大约需要 20 到 30 毫秒才能完成,而 f_close 大约需要 5 到 10 毫秒,但偶尔,在一个只将虚拟数据迭代写入 SD 的应用程序中,这些函数需要 300 多毫秒,然后在下一次立即再次加速写迭代。

我在想可能不需要包含代码,但无论如何这是一个粗略的想法:

我正在使用在每个 systick 中断上递减的“TimingDelay”中的差异来计算每个阶段花费的时间,例如writeTime - fileCloseTime给出关闭文件所花费的时间;f_close.

虚拟数据 char[] 的大小不会改变。

FATFS 只是本质上不稳定,还是有一种我不知道的常见做法来阻止打嗝?

编辑:我应该提到在每个循环中使用f_sync()而不是f_close()在平均速度上产生边际改进,但它仍然会遇到同样的零星犹豫。

0 投票
1 回答
975 浏览

filesystems - 如何模拟 FatFS?

我想在微控制器(STM32L4xx)上显示一些数据,看起来好像它是通过 USB 安装到主机 PC 的文件系统上的单个文件。我有可以在(模拟)文件中任何请求的偏移量处生成数据的函数。该文件可以只读,没有理由对其进行写入;它可以有一个固定的名称和大小。

这几乎是Chan 的 FatFS和类似库的相反用例:我没有真正的文件系统,我不想访问文件系统,我只想做任何必要的事情来呈现一个模拟的(假的)文件系统(带有单个文件)到 USB 主机。

我认为显示为大容量存储设备(例如 Mbed)的引导加载程序必须执行类似的操作,因为当您将 hex 文件拖放到看起来像 Mbed 的存储设备上时,程序数据(可能)不会写入真实的文件系统; 我想它存储在某个地方,但不是在实际文件系统中,因为它是可见的。

任何人都可以向我指出这些方面的一些示例代码吗?

0 投票
0 回答
1066 浏览

microcontroller - SD 卡和 FatFs 的问题(安装、打开文件)

我对 FATF 库和 STM32F7 系列有一些问题。我想将 SD 卡(32GB、SanDisk、FAT32)与 F746G-Discovery-Board 连接以在其上保存一些数据。(起初是 .txt 文件,后来阅读 .csv 文件以可视化一些测量数据)。

我的问题是,f_mount函数给了我一个“FR_OK”,但在下一步我不能用f_open打开一个文件。我通过一步步调试找到了问题所在。它位于 FatFs 库的 ff.c 文件中。

此时程序停止。跳入函数问题如下

所以 SD 卡没有初始化/安装?但是为什么 f_mount 会给我 FR_OK?

如果有人可以提供帮助,那就太好了。谢谢!

我尝试了以下事情:

- 格式化的 SD 卡 (exFat,..)

-其他路径

主要:

0 投票
3 回答
1016 浏览

c - FatFS:f_findfirst 返回一个与找到的文件不对应的字符串

我正在使用 FatFs 库在 SD 卡上创建和管理文件系统。目标是识别包含固件的文件,以便引导加载程序更新(或不更新)设备。

我遵循的程序如下:

"firmware_"据我了解,应识别以开头的第一个文件,并将信息存储在filinfo. 这确实有效,但是当我尝试从filinfo.fname已提取的名称中提取名称时,会出现以下情况:"\0IRMWA~1.BIN"

不知道文件的命名为什么会提取成这种格式。这个想法是稍后获取文件的第二部分:“ firmware_01_01_01”并执行 char 到 int 的转换以处理版本号,但我无法提取文件名的完整字符串。

0 投票
1 回答
317 浏览

c - 检测已移除的 SD 卡 - C - ARM -

如何检测已移除的 SD 卡,之后如何检测插入并重新安装?我正在用 C 语言和 fatfs 在 STM32-F401 工作。检测不正确的安装或移除卡相对容易:

现在?