问题标签 [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 - STM32F407 - SDIO | FATFS - 将文件保存到 SD 卡
问题 :
即使卡存在与否,SD卡也已安装。我无法将文件写入 SD 卡。
语境 :
我阅读了很多书籍、文档和教程,但我找不到让它工作的方法。从 STM IDE 调试器中,我无法像使用 Python 或 Javascript 那样得到丰富的错误。这就是我寻求帮助的原因。除了 printf ,但这只是对我的终端的个人评论。
技术规格:
Mac 操作系统 - 10.15.4
CubeMX - 5.6.1
STM32 IDE - SDIO / FATFS
STM32F407VG - 探索板
SD卡板:
代码
主程序
自第一篇文章以来我做了什么。
问题来自于 open 函数。我有一个FR_DISK_ERR
.
调试时,脚本遵循以下行:
该脚本在该行失败res = find_volume
并跳转到 open 函数的末尾:
关于 open 函数询问的变量:
我认为变量 fp 和 mode 都可以。错误可能const TCHAR* path
与您所说的有关。
我已经调查过find_volume
但我无法在调试时遵循行为......函数可以返回的错误类型:
1 - 获取扇区大小(仅限多扇区大小 cfg)
2 - 磁盘 I/O 层发生错误
3 - 检查位图位置是否在假设中(在第一个集群中)
有一个关于 FATFS 配置的屏幕截图,但即使FF_USE_LFN
设置为 1 Enable LFN with static working buffer on the BSS. Always NOT thread-safe.
我也得到了FR_DISK_ERR
......
你有想法吗 ?
最终答案:
从 find_volume 函数中,我发现 Exfat 没有启用FF_USE_LFN
我有一个 FR_NO_FILE_SYSTEM。我花点时间在网上看了一下,发现没有 DMA 的 STM32 上的 SDIO 无法工作……此外,除了 CLK 之外,您还需要设置上拉电阻。
这篇文章解决了我所有的问题:
还要使 stm32 卡和外部 sd 卡原型板之间的接线尽可能短。
我遇到了很多问题,因为我使用了长接线。
c - 有没有办法从文件的特定点删除数据?
我在 C 中使用 Chan 的 FatFS ( http://elm-chan.org/fsw/ff/00index_e.html ),我试图从文件的特定点删除以下所有行。我已经将文件指针设置为我的新“文件结尾”,文件的其余部分应该被删除/丢弃/无论如何。我正在寻找解决临时文件的方法。有没有像在 C-String 的新末尾放置一个 '\0' 的解决方案?(我知道 EOF 不再是一个角色了)
stm32 - 带DMA的STM32 I2S播放慢
我想用 STM32 实现一个 WAV/MP3 播放器(现在我们只说 WAV),它用 FATFS 从 SD 读取它,然后用 DMA 将它传输到 I2S 缓冲区。
问题是,当我插入扬声器时,它会以正确的音高(音调)播放歌曲,但速度很慢,而且还会发出奇怪的重复滴答声,就像缓冲区被缓慢填充,或者播放缓慢,但使用了正确的频率。
我使用 STM32_F4VE(STM32F407VET6) 和 PCM5102(只需要 DATA,16 位的 32xfs 的 BCK 和 fs 的 LRCK)
这里我附上几个代码部分:main.c
播放器.c
stm32 - 在未知数量的文件中查找最新文件的程序
我需要为带有 C 和 FATFS 的 STM32 MCU 编写一个程序,以在未知数量的文件中找到最新的文件。文件名包含它们的创建日期,文件名中的数字用“_”分隔。例如:oil_sensor_22_07_20_13_15.csv
我编写了一个代码来从文件中提取日期和时间并计算它们的时间差。但我不知道如何在所有文件中找到最新的文件。
我包括计算两个文件之间的时间差的代码和在两个文件中找到最新文件的代码。
计算两个文件名时间差的函数:
以及找到最新文件的程序(程序没有给出预期的结果)。
c - FatFs 在根工作中读/写,但不在子文件夹中
已经感谢您的时间。
我对如何调试 FatFs 遇到的问题有点迷茫:在文件夹中写入然后读取文件会给我带来无效数据。但从根本上说,它完美无缺。
笔记:
- 我正在使用 FatFs 14 开发条形金属 nrf52832。
- nrf52832 与外部闪存 MX25L32(4Mb,512b/扇区,4096/块)进行 spi 对话
- 我禁用了相对文件路径,所以我只使用绝对路径。
- (我将加入“ffconf.h”)
我有以下问题:
- 如果我在根目录上写然后读一个文件,它可以完美地工作(用 10k 文件测试)
- 如果我写然后读取子文件夹中的文件,我会读到一些奇怪的东西(即使是小文件)。
这是我使用的代码(通过 RTT 终端调用 cb_littlecodethatfail):
这是我的“ffconf.h”
这是我的输出
您认为它可能来自配置错误吗?你知道我应该去哪里找我为什么会这样吗?
祝你今天过得愉快!再次感谢您的宝贵时间。
c# - FatFs 日期和时间到 DateTime
我正在尝试将表示 FatFs 日期和时间(此处)的 UInt16 值转换为 C# DateTime 对象。如链接所示,我有两个 UInt16 值代表 fdate 和 ftime。
在 C# 中将它们转换为 DateTime 的最简单方法是什么?
windows - 是否有任何 FAT FS 驱动程序希望引导扇区的字节 508 和 509 为零?
从 2012 年开始实现我自己的引导扇区加载程序时,我确保将偏移量 508 和 509 处的字节归零。这些是标准 512 字节大小扇区的倒数第四和倒数第三个字节。这是我放在那里的:
我现在不记得任何具体的来源,但我相信我添加了两个零字节是为了增加对某些或其他操作系统驱动程序的兼容性。在某些时候,我一定知道这可能是必要的。
翻阅文档“Microsoft Extensible Firmware Initiative - FAT32 File System Specification - FAT: General Overview of On-Disk Format - 1.03 版,2000 年 12 月 6 日”并没有得到关于字节 508 和 509 的任何信息。它在第 13 页上指出:
还有一个关于 FAT 卷的扇区 0 的重要说明。如果我们将扇区的内容视为一个字节数组,那么扇区[510] 等于 0x55,扇区[511] 等于 0xAA 一定是真的。
注意:许多 FAT 文档错误地说这个 0xAA55 签名占据了“引导扇区的最后 2 个字节”。当且仅当 BPB_BytsPerSec 为 512 时,此语句是正确的。如果 BPB_BytsPerSec 大于 512,则这些签名字节的偏移量不会改变(尽管引导扇区末尾的最后两个字节也完全可以包含此签名)。
最接近谈论字节 508 和 509 的是 FAT32 的 FSINFO 结构的描述,第 22 页:
FSI_TrailSig 508 4
值 0xAA550000。此跟踪签名用于验证这实际上是一个 FSInfo 扇区。请注意,此值的高 2 个字节(进入偏移量 510 和 511 的字节)与扇区 0 中相同偏移量处使用的签名字节匹配。
但是它没有指定整个双字应该与引导扇区中的这个签名相匹配。
现代的 FreeDOS 引导扇区加载器也确实提供了这两个字节作为零:
“An Examining of the MSWIN4.1 OS Boot Record”页面将 MS Windows 4.x 引导扇区描述为两个字节也为零。在标题为“内存中数据和错误消息的位置”的十六进制转储中,最后一行包含这些零:
这些零字节是有原因的还是只是货物崇拜的一个例子?
avr - AVR 和 FATFS 多块读取
我正在使用atmega1284p,我需要从sd卡读取数据并发送音频解码芯片我可以做到低比特率,更高比特率的MCU很难按时发送数据。就我实现高比特率的研究而言,文件可以读取多个块,并且在读取第一个块后没有延迟。我分配了我的多块缓冲区,但不知道如何使用 ELM Chans FATFS 库以多种方式读取块。可以 F_read这样做,或任何其他建议。
fatfs - 带有 esp-idf 的 ESP32 上的 FatFs 无法创建带有 *.json 扩展名的文件
由于加密,我想在我的 Esp32 项目上从 SPIFFS 切换到 FAT。在我的示例项目中,我有这个。
它工作正常并按预期创建两个文件,但是:
json文件失败。
到目前为止,谷歌没有给我任何关于 FatFS 文件扩展名问题的信息。有人可以帮我理解这一点吗?
stm32 - STM32F103 上的 FATFS R0.11 读取速度慢 - SPI
我正在使用 STM32F103C8,并且 FATFS R0.11 可以正常工作(这是 CUBEMX 默认在 STM32F103C8Tx 上使用的最新版本),但读取速度非常低,大约为 100 kB/s。
SPI 时钟设置为 18 MHz(从 9 MHz 更改,但没有区别,与 4.5 MHz 相反,它对读取速度的影响很明显 - 读取时间增加了 30%)并且我已经关闭了大部分额外的节省 RAM 的选项。打开两个文件后,我剩下大约 10 kB(从 20 kB)的 RAM(在 KEIL 中编译时,STM32CUBEIDE 使用了更多的 RAM),这对于我的项目的其余部分来说应该足够了。
该文件被读入 4096 字节的缓冲区,一次 2048 字节(它将是一个 wav 文件,将以等于 22050 Hz 的采样率发送到 I2C DAC,所述缓冲区的大小取决于关于我项目其他重要部分的 RAM 使用情况,可能最终会增加,但目前尚不清楚)。
单次 2048 字节读取操作大约需要 20 ms。我使用的是 4 类和 10 类 SD 卡,但结果是一样的。所述 SD 卡的集群大小,当减少到 512 字节时,使我能够实现上述 20-21 毫秒的每次读取,而不是在不同格式设置下的 25 毫秒。由于我还计划显示图像,因此将不胜感激任何较低的读取速度。时间是在 HAL_GetTick() 函数的帮助下测量的。
我尝试一次读取 4096 个字节,甚至 8192 个字节,但是这样做所花费的时间适当地缩放,因此在这些测试期间没有记录任何好处。我什至尝试使用完整格式而不是默认的快速选项,但没有任何改变。
您是否认为,我可以做些什么来进一步减少阅读时间,或者这是否以某种方式、形状或形式受我的设置限制,或者我做错了什么?下面,我把存档和我的项目联系起来,大家可以自己编译测试(我在Keil uVision5下编译,0个错误,0个警告)
出于好奇,我还在读取文件期间探测了 SPI 接口(这是我唯一在做的事情,目前没有写入 SD 卡)。
从上到下:SCK-黄色、MISO-洋红色、MOSI-青色、CS-蓝色。我添加了额外的延迟来显示传输的不同部分:第一个块负责挂载和打开第一个文件,在 4 毫秒延迟后我打开第二个文件(延迟打开第一个文件不会导致任何延迟),然后在 2 毫秒后我执行第一次读取,在额外的 2 毫秒延迟后,我读取了接下来的 2048 个字节。
我的 SD 卡适配器和连接:标准的 micro SD 到 SD 适配器,带有焊接的金针和电线,连接无焊面包板上的所有东西,ST-LINK V2.1 从 STM32F429ZI-DISC1 “借来”。PA4-CS、PA5-SCK、PA6-味噌、PA7-MOSI。谢谢阅读 :)