问题标签 [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 回答
148 浏览

c - 取消初始化 FatFS 并安装另一张 SD 卡

我一直在尝试挂载 SD 卡,将一些数据写入一些文件,然后卸载 SD 卡。安装一个单独的文件并写入更多文件(这是通过多路复用器和两个独立但相同的 SD 卡模块完成的)。我正在使用 STM32F3 和 SPI 接口,我可以毫无问题地挂载和写入文件,但我正在努力正确取消初始化 SD 卡之间的所有 FatFs 变量。

我正在采取以下步骤

用于f_close关闭所有打开的文件。通过安装 NULL 驱动器来卸载驱动器f_mount(0, "", 0);。然后我打电话FATFS_UnLinkDriver。我的主要问题似乎是在所有这些步骤之后disk.is_initilized仍然返回 1。

因此,第二张 SD 卡不会调用我正在使用的 SPI 初始化代码。我可以通过手动调用 SPI 初始化来解决这个问题,但我想知道我是否遗漏了取消初始化的任何步骤。理想情况下,我想将所有 FatFS 堆栈恢复到默认状态,就好像微控制器在 SD 卡交换之间循环通电一样。

0 投票
0 回答
21 浏览

stm32f4 - FATFS与定时器中断STM32f407VG冲突

*嗨,我目前正在从事一个需要读取 3 个 ADC 值、日期和时间的项目。这些值使用 FATFS 存储在 SD 卡中的 .txt 文件中。以 1000Hz 的频率进行读数非常重要。.txt 文件如下所示:

2021;07;01;00;36;37;0010;0.583;-0.416;-0.765;
2021;07;01;00;36;37;0023;0.577;-0.422;-0.779;
2021;07;01;00;36;37;0032;0.567;-0.416;-0.752;
2021;07;01;00;36;37;0043;0.583;-0.430;-0.776;
2021;07;01;00;36;37;0052;0.567;-0.438;-0.776;

因此,我知道执行 f_write 和 f_sync 函数所需的时间是可变的,我决定使用定时器中断来读取 ADC 值并将它们存储在缓冲区中(我实际上使用 2 个缓冲区,稍后将讨论),同时使用主循环将数据写入txt文件。我正在尝试以下似乎与 f_write 函数一致的问题:

2000;07;01;00;50;27;4559;0.717;-0.309;-0.682;
2000;07;01;00;50;27;4569;0.717;-0.320;-0.704;
2000;07;01;00;50;27;4579;79;0.709;-0.314;-0.701;
2000;07;01;00;50;27;4589;0.709;-0.322;-0.706;
2000;07;01;00;50;27;4599;0.701;-0.314;-0.706;

错误在上面的第三行。似乎每次我填充缓冲区并调用 f_write 函数时,我都会重复或丢失多达 3 个字符。如果我调试代码,似乎缓冲区是正确的。所以我猜问题出在 f_write 函数被定时器中断停止。有任何想法吗?

ps:我使用2个缓冲区来存储数据,这样当其中一个被复制到txt文件时,另一个正在接收数据。

0 投票
0 回答
15 浏览

linux - 在 Linux 主机中使用多线程测试 FatFs 时遇到错误

我正在为 Linux 主机中的 FatFs 编写测试。
我正在尝试测试具有多线程支持的 FatFs(FF_FS_REENTRANT 为 1),ffsystem.c 已被移植到 Linux 主机,并使用 pthread_mutex 作为同步。
以下有 2 个 pthread 做同样的事情,

  1. 为 pthread 创建一个文件(例如,在同一分区“0:”中的 file_0.bin、file_1.bin)。
  2. 将模式写入其文件,
  3. 关闭文件,
  4. 重新打开文件,
  5. 读取文件,
  6. 检查模式是否与正在编写的相同。

通过上述步骤,有时我在第二个 pthread 尝试创建要写入的文件时遇到一个错误,像这样,f_open create failed: 0xD, (0xD 表示在磁盘中打开/创建文件时 NO_FILESYSTEM。)

在创建 2 个 pthread 之前,我调用了 f_disk() 和 f_mkfs() 将磁盘格式化为 exFat 格式,所以我认为磁盘中没有文件系统。
FatFs 似乎会读取磁盘分区表并对其进行解析,如果有任何错误,它会发出 NO_FILESYSTEM 错误。

所以我的问题是用多线程测试 FatFs 的正确方法是什么?

0 投票
0 回答
32 浏览

fat32 - FatFs 从 FIL 中获取文件名

当我用 FatFS 打开文件时,我给出了文件名并接收到 FIL 结构的指针。

有没有办法(FatFs API)从 fp(FIL 结构)检索文件名(“message.txt”)?

0 投票
0 回答
144 浏览

stm32 - FR_NO_FILESYSTEM 错误 fopen FATFS SPI STM32F103C8 with SanDisk SD Card 1GB

我使用 STM32F103C8T6 并在项目中添加 FATFS 和 SPI。我用 8 GB SanDisk microSD 测试项目,但我在 f_open 函数中有 FR_NO_FILESYSTEM。我更换了 MicroSD 并使用 1 GB SanDisk microSD 进行测试,再次出现此错误。我格式化了 SD 卡,但问题无法解决。我的错误在于:f_open func -> Find_Volume func

我从以下网站获得帮助:

0 投票
1 回答
211 浏览

c - 如何使用 FatFs 获取文件名?

我不明白如何使用 FATFS 在 SD 卡中获取文件名。我可以.txt使用以下代码读取和写入文件:

之后,我想在我的 LCD 屏幕上列出这些文件名。我一直在获取根目录中的文件名。我希望这些文件列在我的 LCD 上。而且我不知道如何使用f_opendir(...)f_readdir(...)。如何以正确的方式做到这一点?

0 投票
1 回答
86 浏览

sd-card - SPI SD 卡 32GB 从不通过 CMD55、ACMD41 初始化步骤

我正在使用 Elm-chan FatFs 模块。我正确移植了它,因为它在使用 16GB SD 卡时可以正常工作。但是当使用 32GB 卡时,代码卡在 CMD55、ACMD41 设置循环中。

贝娄是我正在经历的命令和响应的打印

然后从那里, cmd55 总是无限期地得到 0xFF 的响应。我查看了其他问题、spi SDC 指南和其他 ff.c 实现,我大部分时间都在关注它,因为代码确实适用于 16GB 卡,就在我切换到 32GB 卡并重新启动时代码,32GB卡没有初始化。

对品牌有影响吗?32GB 卡是 samsung evo select micro sdhc。16GB 是 Lexar micro sdhc

0 投票
2 回答
134 浏览

embedded - 如何使用 DSP 在没有文件系统的 SD 卡上写入原始数据?

我是嵌入式电子/编程的新手,但我有一个项目。对于这个项目,我想在没有文件系统的 SD 卡(SPI 模式)上的 512b 缓冲区中写入传感器提供的原始数据。

我试图通过使用 FATFS 库的低级函数来做到这一点。我听说我必须创建自己的格式并重写函数才能做到这一点,但我迷失在所有这些行代码中......我想我必须首先使用命令序列(CMD0,CMD8 ,CMD55,ACMD41...)。

我不确定接下来的步骤,如果我必须使用该功能打开一个文件fopen然后使用该fwrite功能......

如果有人可以向我解释它如何适用于非文件系统 SD 卡并指导我按照步骤进行操作,我将不胜感激。

0 投票
0 回答
45 浏览

error-handling - STM32用户自定义FatFs(eziya fatfs_sd库) F_write return FR_DISK_ERROR

我正在尝试使用 STM32H750VB 在 microSD 卡上进行文件操作。我正在使用带有 spi 的 eziya fatfs_sd 库。这是我的 CubeMx Spi 配置;在此处输入图像描述

我将 FatFs 配置保留为默认值。

我为 eziya 库做了所有必要的配置。

这是我的代码和调试结果。它返回 0x01,表示 FR_DISK_ERROR。

在此处输入图像描述

我不知道这个错误。任何帮助将不胜感激。提前感谢您的时间和考虑。

代码块;

0 投票
1 回答
53 浏览

arduino - Petit FatFs - pf_read() 将错误的参数传递给 disk_readp()

我正在使用带有 Arduino Mega 的 Petit FatFS。我已经实现了所有必要的功能,但是我遇到了该pf_read()功能的问题。我正在尝试读取一个长度为 568 (512 + 56) 字节的文件。第一个扇区可以毫无问题地读取(并且是正确的),但第二个部分扇区不会被读取。

我尝试调试pf_read()并发现以下内容:对于它调用的第一个扇区disk_readp()sector = 41104offset = 0count = 512这似乎是正确的。然而,第二次,它用sector = -538935151, offset = 512and调用count = 56(至少计数是正确的)。

奇怪的是,在pf_read()完成之后,*bris 97,即使该函数实际上已经读取了 512 个字节。

以防万一有问题disk_readp(),这是我的代码:

以及 Petit FatFS 文档的链接:http ://elm-chan.org/fsw/ff/00index_p.html

谢谢!