microSD卡FAT模块

时间:2011-04-28 21:00:05

标签: logging embedded sd-card fat32 msp430

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

我可以使用哪些类似的电路板而不是希望更可靠的uALFAT?

OR

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

3 个答案:

答案 0 :(得分:6)

我会想到这一点有点不同。任何基于闪存的存储设备都可能在写入时具有可变的时序。特别是具有文件系统和磨损均衡和类似功能的一个。它往往是闪光的本质,因为你必须擦除整个块并移动东西。如果你不能忍受可变时序,那么我过去所做的就是将这篇文章移出代码的时间关键部分。

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

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

答案 1 :(得分:4)

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

但是,为了记录,我已成功使用ELM FatFs及其缩减ELM Petit FatFsEFSL

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

如果您可以针对此问题抛出内存和RTOS任务(可能是TI自己的SYS / BIOS),那么您应该可以使用您的库。所需的RAM量取决于数据速率以及是否突发或连续。

答案 2 :(得分:1)

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