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

stm32 - 难以为闪存配置 FatFs

我只是一个卑微的实习生,被扔进了固件开发的无情之火中。我的任务是通过 SPI 使用 w25qxx 在 STM32 芯片上实现文件系统。我已经能够通过 SPI 成功读取和写入 w25q,并创建了一个类来处理芯片的基本 i/o。

我决定使用 FatFS,因为它部分内置于 STM32CubeID 中,而且它似乎最适合我们的需求。我见过很多人通过 SD 卡实现 FatFS,但是 SD 卡会比我们需要的更复杂。在我看到的所有教程中,您需要编辑user_diskio.c的方法以与您使用的存储保持一致。但是,当我这样做时,我发现我的代码实际上从未使用user_diskio.c,也没有使用diskio.c。我在其中设置了一行代码来设置一个 LED 来判断程序是否真的到达了代码中的这些点,但似乎没有。

来自我的user_diskio.cpp的方法

在我的main.cpp中,我试图创建一个文件,向其中写入一个字符串,关闭它,然后再次打开它以读取字符串。

fresultFR_NOT_ENABLED当我打开文件时返回,FR_INVALID_OBJECT当我关闭时返回。尝试将文件读入缓冲区会导致缓冲区中的第一个字节被读取为空字符。我应该添加任何其他信息吗?

0 投票
1 回答
907 浏览

c++ - FatFS - 无法格式化驱动器,FR_MKFS_ABORTED

我是嵌入式开发的新手,我的任务是在 SPI 闪存上实现文件系统。我在 STM32CubeIDE 上使用 w25qxx 芯片和 STM32F4xx。我已经成功地为 w25 over SPI 创建了基本的 i/o,能够一次写入和读取扇区。

在我的user_diskio.c中,我实现了所有需要的 i/o 方法,并验证了它们是否正确链接并被调用。

在我的main.cpp中,我使用 格式化驱动器f_mkfs(),然后获取可用空间,最后打开和关闭一个文件。但是,f_mkfs()不断返回FR_MKFS_ABORTED。(FF_MAX_SS 设置为 16384)

在调查 my 后ff.c,代码似乎在第 5617 行停止:

if (fmt == FS_FAT12 && n_clst > MAX_FAT12) return FR_MKFS_ABORTED; /* Too many clusters for FAT12 */

n_clst在一些条件逻辑之前计算了几行,第 5594 行:

n_clst = (sz_vol - sz_rsv - sz_fat * n_fats - sz_dir) / pau;

以下是调试器读取变量的内容:

在此处输入图像描述

这将导致n_clst设置为4294935040,因为它是无符号的,尽管进行计算的实际结果将是-32256变量是否有符号。可以想象,这似乎不是一个准确的计算。

我正在使用的设备具有 16M 位 (2MB) 的存储空间,存储在 512 个 4kb 的扇区中。最小可擦除块大小为 32kb。如果您需要有关我正在使用的闪存芯片的更多信息,此 pdf 的第 5 页概述了所有规格。

这就是我的USER_ioctl()样子:

我尝试使用参数来调整参数f_mkfs(),将 FM_ANY 换成 FM_FAT、FM_FAT32 和 FM_EXFAT(以及在我的ffconf.h.f_mkfs()我正在使用,检查这里,这种方法有一些变体漂浮在那里。

0 投票
1 回答
43 浏览

c - C - 为什么将元素分配给动态分配数组的第一个元素总是不返回任何内容

我正在开发一个应用程序,我需要从 SD 卡中读取一些文件。一切都在带有 FatFS 的 STM32 微控制器上运行。我只是打开根目录,然后遍历该目录中的每个元素并检查它是文件还是文件夹,我保存了我有多少文件的信息。然后我为所述文件分配给定的内存量(名称的文件数x缓冲区)。接下来,我再次读取目录,就像在第一步中一样。这次我将每个文件的名称复制到内存中的上述位置。我的问题是,每次我将任何内容复制到二维数组时,第一个元素实际上什么都不包含,并且文件名从第二个索引开始。我究竟做错了什么?

然后如果我这样做: lcd_str_XY(0,1, file_names_array[0]); 内存中这个地方没有任何东西 lcd_str_XY(0,1, file_names_array[1]); 打印第一个文件的名称

0 投票
0 回答
94 浏览

stm32 - 为什么fatfs的f_rename很慢?

我正在开发一个带有 stm32L496 + FreeRtos + FatFs 的数据记录器。数据记录器将数据保存到缓冲区,当缓冲区满时,借助 fatfs 和 SDMMC+DMA 将缓冲区保存在 SD 卡上的文件中。当工作文件太大(15Mo)时,这个文件被移动到另一个目录。但有时,由于 f_rename 的时间很长(500 毫秒),我已经超限了。我可以增加缓冲区来隐藏问题,但我不明白为什么这个函数需要这么多时间。

有人有这个问题吗?我使用的是 FAT32 格式的 Fatfs R0.12c。

我发现当函数调用“follow_path”、检查新文件是否存在以及调用“dir_find”而变量“path”为空时,代码需要很长时间。(所以当这是最后一段时)。

在 f_rename :

在 follow_path 中:

如果我提高时钟速度,代码不会更快,所以我认为这是一个软件问题。

任何想法 ?

0 投票
0 回答
264 浏览

stm32 - STM32 FATFS,如何使用 SPI 正确重新安装 SD 卡?

我正在使用 SD 卡进行数据记录。我正在使用来自 chan 和 SPI 的免费 fatfs 文件系统与 SD 卡进行通信。但是,我在重新插入卡时遇到了问题。它不再起作用了。更具体地说, f_mount() 函数在 disk_initialize() 函数中失败,因为它未被识别为 SDv2 卡,尽管它是。第一次调用该函数(在启动STM32控制器时)该函数返回该卡是SDv2,取出sd卡,重新插入然后重新安装后,无法检测到卡。

我在使用 f_unmount() 之前尝试过卸载它,我还清理了 stask 上 FATFs 对象的内存。

在每次写入之前,我都会为 sd 卡启用电源,并在写入完成后禁用它。这也很好用。只要我不重新插入卡。看起来很奇怪。我还尝试在每个 f_mount 之前重新初始化 SPI。也无济于事。

以下代码工作正常,但重新插入 sd 卡后它不再工作:

0 投票
0 回答
126 浏览

sd-card - TI MSP432 带 MicroSD 卡,使用 FatFs FAT/exFAT Lib

我正在尝试使用 TI MSP432P401R LaunchPad 和 micro SD 卡模块将文本文件写入 micro SD 卡,如下图所示。

在此处输入图像描述

但是,我在互联网上和德州仪器的资源探索中尝试了很多示例,但它们都不起作用。例如,我尝试使用这个,但它返回:

在此处输入图像描述

我还尝试移植 STM32 FatFS 库及其功能,我已经在 STM32 中进行了测试并且它有效,但它也不适用于 MSP432。

经过测试和调试,我发现,我的代码总是卡在第一个挂载函数

并返回错误代码

我已经尝试了 3 天的所有可能性,现在我真的很沮丧。任何帮助,将不胜感激。

0 投票
0 回答
112 浏览

stm32 - 使用 FATFS 将 .BMP 写入 SD 卡。扭曲的图像

我为 STM32 编写了一个程序,使用 FATFS 将 .bmp 文件写入 SD 卡。我正在使用 STM32CubeIDE 及其生成的代码。我将我的 .bmp 文件在线转换为字节数组,然后将该数组复制到我的程序中。

如果我一次写入全部数据,一切正常。图像出现在 SD 卡上并且没有失真。

正确的图像

如果我分两部分写入数据,图像会出现在 SD 上,但它的上排会向右移动一点。

扭曲的图像

可能是什么问题呢?谢谢!

0 投票
1 回答
51 浏览

usb - 是否可以实现 DISKCOPY 从 eMMC 卷逐块复制到 USB 卷

我正在使用 STM32、FATFS、SDMMC、eMMC 并在 eMMC 上创建了 FATFS。我还在 USBH(主机模式)上创建了一个 FATFS 卷。这也可以正常工作。

eMMC FATFS 工作正常,然后我需要将所有文件从 eMMC 复制到 USB 驱动器。通过 FATFS 从 eMMC 逐个文件复制文件花费的时间太长。

我认为如果我只是盲目地将内存块(512字节)从eMMC复制到USBH会更快。所以我实施了足够的例程来做到这一点。问题是复制大约几百块后复制失败。故障似乎是由于 USBH 没有响应。

我的问题是:1-“是否可以像我尝试做的那样将原始数据从 eMMC 逐块复制到 USBH?” 2-有没有人成功做到这一点?

0 投票
0 回答
15 浏览

usb - FAT信息驻留在哪个块地址

我正在为我的 SDMMC(连接到 eMMC)和 USB 主机(连接到 USB 记忆棒)使用 FATFS。我试图找出 FAT 表在内存中的位置。我在网上阅读,但找不到任何地方说明。虽然,我认为它位于逻辑块 63。我的问题是:1- 它的固定标准位置是任意的吗?2-谁能告诉我更多阅读解释USB驱动器,SD驱动器的逻辑内存布局?

提前致谢。

0 投票
0 回答
450 浏览

c - STM32 SD FATFS挂载错误(FR_NOT_READY)

我实际上是在尝试使用 STM32L486QGI6 在 µSD 卡上写入数据。该函数f_mount()返回FR_NOT_READY是否放置了 µSD...

我已经检查了数十个 CubeMX 生成的教程和示例(检查了引脚、下拉中的 SD_Detect、除 CK 之外的其他引脚的上拉、全局中断、40MHz 时钟除以 4 等...)

有我正在使用的代码:

以及 CubeMX 配置:

  • 在此处输入图像描述

  • 在此处输入图像描述

  • 在此处输入图像描述

  • 在此处输入图像描述

  • 在此处输入图像描述

  • 在此处输入图像描述

  • FATFS 配置:

在此处输入图像描述

  • 在此处输入图像描述
  • 在此处输入图像描述
  • 在此处输入图像描述