2

我最近一直在使用 GHI Electronics 的 uALFAT microSD 板进行数据记录,但我一直遇到它的可靠性问题;有时,它的一些函数调用花费的时间比我能处理的要长得多。我目前正在使用MSP430微控制器与 uALFAT 通信。

我可以使用哪些类似的板来代替希望更可靠的 uALFAT?

或者

如果我需要设计自己的接口板以与 MSP430 配合使用,那么最有利的 OEM 解决方案是什么?

4

3 回答 3

7

我会以不同的方式思考这个问题。任何基于闪存的存储设备都可能在写入时具有可变时序。尤其是具有文件系统和磨损均衡以及类似功能的设备。它往往是闪存的本质,因为您必须擦除整个块并四处移动。如果你不能忍受可变时间,我过去所做的就是将这部分移出代码的时间关键部分。

通常我会添加一个时间关键代码写入的队列,然后在后台从队列中拉出并写入 SD 卡。在 RTOS 中,这将是一个较低优先级的任务。在轮询循环中,它将是系统空闲时调用的函数。

这将约束从函数调用的最坏情况时间更改为能够满足日志记录的平均吞吐量要求。最坏情况下的延迟和吞吐量决定了队列必须有多大;通常这可能很小。

于 2011-04-29T11:45:43.273 回答
4

它可能比这更复杂,最好的解决方案是@sbass 建议的,即使您确实选择更改文件系统。在指责 uALFAT 之前,您需要准确确定延迟发生的位置和原因。

然而,作为记录,我已经成功地使用了ELM FatFs及其缩减的ELM Petit FatFs以及EFSL

关于延迟,例如使用 ELM,我使用 SPI 实现了高达每秒 300 kbit 的写入速度(速度很大程度上取决于卡,速度范围从 30 kbit/s 到 1 Mbit/s) ,即使使用优化的缓冲区大小(扇区大小的倍数)和 50 kbit 的 512 字节扇区队列,我也无法成功地使用它在任何持续时间长度内记录 96 kbit/s 的数据流。这不取决于库,而是 SD 卡的性质,它显然在 1 Mbit 边界上,最多会停滞 128 毫秒,这足以耗尽队列提供的缓冲。正如@sbas 所说,解决方案当然是增加缓冲,但在这种情况下,总系统 RAM 只有 64 kbit,所以这是不可能的。

如果您可以在问题上抛出内存和 RTOS 任务(在您的情况下可能是 TI 自己的 SYS/BIOS),您应该能够使其与您拥有的库一起工作。所需的 RAM 量取决于数据速率以及它是突发的还是连续的。

于 2011-04-30T08:31:25.513 回答
1

谢谢大家,我最终实现了一个带有额外内存的循环缓冲区,这似乎已经成功了。感谢您的好意见!

于 2011-05-09T20:23:49.920 回答