各位大神,请问下:最近想用STM32F7采集传感器数据记录到SD卡中,100Hz数据率,每次采集估计300字节左右数据,上电开始写直至断电。
用STM32CubeMx生成的FATFS文件系统操作SD卡,功能正常,按长时间连续写入方式进行,即首先f_write()然后f_sync()。
使用的是DMA的API写SD卡,按道理说耗时应该非常短暂,但实际上有点难以接受,具体统计的时间如下:
每次f_write()的时间再2ms左右,最长基本不超过3ms,但是f_sync()耗时非常久,而且不稳定,甚至超过10ms,也就达不到100Hz。
因此十分奇怪,SD的速率不至于这么低啊~~~
做过如下尝试:
1. 怀疑SD卡问题:SD换过3张不同型号的,8G、16G大小都有,分别按不同分配单元大小格式化,结果无区别,基本排除该问题。
2. 尝试修改BlockSize,似乎SD卡默认是512,改了之后电脑无法识别文件内容(估计是存储结构被破坏了),但是文件写入是可以的,并且耗时极短,总共200us左右。
3. 有人说如果每次写512的整数倍速度会加速,实验了每次写512字节和1024、2048、4096字节,耗时基本线性增加,无降低。
4. 写SD卡底层的HAL_的API中,有诸多循环等待写完的语句,尝试将这些语句提前(即写之前先等待前面的数据写完,后面直接写,这样如果前面已经完成,则本次写可以很快),但导致文件不正常,内部的逻辑还是有点复杂。
所以小白我目前认为FATFS本身就是这个尿性,基本就这个速度了,一次性写一个大文件可能平均速度比较快,但连续写就不行。
不知是否有大神了解或遇到过类似问题,还望指点~~
一周热门 更多>