[STM32F1] STM32采用FatFs写SD卡速度的问题

[复制链接]
12912|14
 楼主| yfy871216 发表于 2016-5-4 13:35 | 显示全部楼层 |阅读模式
在项目开发中,经过实际测试,FATFS向空的SD卡写入数据的速度达到1MB/s以上,而向快满的SD卡写入数据的速度只有10KB/s左右,是我的程序设计的有问题还是FatFs本身就有这样的问题,请有相关开发经验的高手指教,谢谢!
 楼主| yfy871216 发表于 2016-5-4 15:07 | 显示全部楼层
有人做过没有
 楼主| yfy871216 发表于 2016-5-4 15:08 | 显示全部楼层
这么快就沉了,差点找不到
blueskycoco 发表于 2016-5-4 17:17 来自手机 | 显示全部楼层
可以优化下读写sd那部分,文件越多,文件系统的负荷越大,相对来说就会慢一点
 楼主| yfy871216 发表于 2016-5-4 17:46 | 显示全部楼层
blueskycoco 发表于 2016-5-4 17:17
可以优化下读写sd那部分,文件越多,文件系统的负荷越大,相对来说就会慢一点 ...

看来这个问题确实是FatFs文件系统造成的,鉴于项目实时性要求高,我打算摒弃文件系统,直接向SD卡写数据,之后再设计一个专门的读卡器,用FatFs转存到另一只卡。
bayuan0414 发表于 2016-5-4 19:31 | 显示全部楼层
给个建议,SD卡只能写容量的90%或者SD卡剩余50M时就不让写了,这样就可以满足要求啦。
lovecat2015 发表于 2016-5-4 22:01 | 显示全部楼层
你分页读写测试一下,看看靠前的是不是速度也很快
ticomi 发表于 2016-5-5 08:26 | 显示全部楼层
这个是文件系统的特性,我做的也有类似问题。当一个存储器存储即将满时,再进行数据存储时需要花费很长的时间来寻找空闲的簇而导致的速度变慢,与优化无关。

所以在进行操作有文件系统的存储卡时,最好先将所有文件删除,然后在写入的过程中不要删除文件以减少寻找空闲簇的时间。
m564522634 发表于 2016-5-5 09:24 | 显示全部楼层
文件系统的问题,前面加一个大的缓冲 吧,先写到缓冲中在慢慢搬到文件系统中去。可以考虑不用文件系统
 楼主| yfy871216 发表于 2016-5-5 10:07 | 显示全部楼层
m564522634 发表于 2016-5-5 09:24
文件系统的问题,前面加一个大的缓冲 吧,先写到缓冲中在慢慢搬到文件系统中去。可以考虑不用文件系统 ...

每秒300kB的数据,加再大缓冲,后面来不及存也有数据溢出的时候,所以只能不用FatFs,因为起始扇区号和扇区总数是已知的,所以在设计的时候按扇区递增写入数据,不进行任何搜索和计算,这样可以节省大量时间。
 楼主| yfy871216 发表于 2016-5-5 10:11 | 显示全部楼层
ticomi 发表于 2016-5-5 08:26
这个是文件系统的特性,我做的也有类似问题。当一个存储器存储即将满时,再进行数据存储时需要花费很长的时 ...

SD卡格式化之后,我打算按扇区号进行依次写入数据,不进行任何搜索和计算,每次写入的数据为一个扇区的大小。
ticomi 发表于 2016-5-5 10:51 | 显示全部楼层
yfy871216 发表于 2016-5-5 10:11
SD卡格式化之后,我打算按扇区号进行依次写入数据,不进行任何搜索和计算,每次写入的数据为一个扇区的大 ...

使用文件系统后,在哪里写数据是文件系统的事情,一般文件系统会从初始的扇区开始写数据,没有额外的干扰,如删除,复制或者更改文件大小等是不会破坏文件的连贯性的。
liuxueuestc 发表于 2018-5-31 11:19 | 显示全部楼层
请问大神1MB/s的速度是通过DMA模式还是普通模式?
azadaqdc 发表于 2018-5-31 11:43 | 显示全部楼层
实时性要求高的话建议可以不用文件系统,直接物理地址操作就行,芯片做个高速usb口,再做个上位机软件将SD卡里的数据转成你想要的格式就行
15752417396 发表于 2025-7-10 17:16 | 显示全部楼层
多年后的人又遇见了这个问题,主要是这个函数用时太长f_sync(&file);,差不多8ms左右的消耗,导致存储速率只能到达120多Hz,无法提高存储速度。太难受了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

254

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部