我正在使用带有 microSD 卡的 STM32F4 微控制器。我正在通过 DMA 捕获模拟数据。
我正在使用双缓冲区,一次采集 1280 个(10*128 - 10 个 FFT)样本。当一个缓冲区已满时,我设置一个标志,然后一次查看 128 个样本并对其运行 FFT 计算。所有这一切都运行良好。
数据正在以我想要的速率进行采样,FFT 计算正如我所期望的那样。如果我只是让程序运行一秒钟,我会看到它运行 FFT 大约 343 次(44000/128)。
但问题是我想将此 FFT 中的 64 个值保存到 SD 卡。
- 我正在使用 HCC fat 文件系统库。
- FFT 计算的每个循环我都将 64 个值复制到一个数组中。
- 每 10 次计算后,我将这个数组的内容写入文件并重新开始。
- 该数组存储 640 个 float_32 值 (10*64)。
这对于一秒钟的测试运行非常有效。我将 22,000 个值存储到 SD 卡中。
但是随着时间的增加,我开始丢失样本,因为 SD 卡需要更长的时间来写入。我需要 SD 卡始终存储超过 87 kbit/s(4 字节 * 64 * 343 = 87808)。我尝试增加 DMA 缓冲区样本大小,然后增加它的写入次数,但没有发现它有帮助。
我使用的是 4 类 8G microSD 卡。我将 SD 卡格式化为默认的 FAT32 分配单元大小 2048。
我应该如何组织数据缓冲以实现这一点?我认为使用更少的写入可能会有所帮助。排队有用吗?我将如何实现这一点,有人有例子吗?
我看到 Clifford 也有类似的问题,他正在使用队列, 如何使用 SD 卡以 48 ksamples/s 的速度记录 16 位数据?.