我正在创建一个数据记录器系统,该系统以每秒约20000-30000字节的高速记录数据到SD卡中。但是arduino中的SD库当前以每秒4500-5000字节的速度写入数据,这太慢了。
我已经阅读了此技巧以提高写入速度,但是我想知道是否可以通过调整SPISettings来采用更直接的方法。
我正在创建一个数据记录器系统,该系统以每秒约20000-30000字节的高速记录数据到SD卡中。但是arduino中的SD库当前以每秒4500-5000字节的速度写入数据,这太慢了。
我已经阅读了此技巧以提高写入速度,但是我想知道是否可以通过调整SPISettings来采用更直接的方法。
Answers:
好。因此,我尝试了SDFat库。该库绝对比adruino随附的默认SD库更好。但这不是我解决低数据速率问题的方法。
我从这篇文章中遵循了SDFat库作者的指示。
根据fat16lib,要提高数据速率,我们需要明智地使用flush()。我们希望在每个周期中写入()数据,但是我们仅需要每100个周期刷新一次(大约)一次,具体取决于每个周期中写入的数据量。另外,请确保将标志保留在SD.open()中为'O_WRITE | O_CREAT”而不是“ FILE_WRITE”。
这无疑使速度大大提高。但是我还需要更多!
使用4类SD卡,我当前的速度约为100-120 KBps(千字节)!
最后,我要感谢你们的帮助。
许多因素将决定您是否可以达到所需的速度。其中只有一些。
该SdFat库比Arduino的IDE标准SD图书馆更快。它还具有与标准SD库一起使用的易于使用的兼容性功能。试试看。
您应该使用高级SD卡。如您所知,SD卡按性能分类。互联网上的大多数人都建议使用SanDisk SD卡。
避免握手缓冲!
使用 SD.write(buf,size);
大家好,我正在同一个项目中工作。我遵循了您的相同步骤,并获得了完全相同的数字。我已经解决了。问题是您致电时的握手SD.write()
。
代替:
//for each loop, it is going to make a handshake
while(<yourCondition>){
SD.write(<yourValue>);
}
做:
char buf[length];
while(yourCondition){
buf[index] = yourValue;
}
SD.write(buf,index);//only one handshake
在我的项目中,第一个使用4100字节,第二个使用具有128(buf [128])的缓冲区,在我的项目中使用145408字节。够好了。