打印
[STM32F1]

FatFs写SD卡速度

[复制链接]
644|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tian111|  楼主 | 2021-12-8 23:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在项目开发中,经过实际测试,FATFS向空的SD卡写入数据的速度达到1MB/s以上,而向快满的SD卡写入数据的速度只有10KB/s左右,是我的程序设计的有问题还是FatFs本身就有这样的问题,请有相关开发经验的高手指教,谢谢!

使用特权

评论回复
沙发
zhanglli| | 2021-12-8 23:03 | 只看该作者

可以优化下读写sd那部分

使用特权

评论回复
板凳
chuxh| | 2021-12-8 23:05 | 只看该作者
文件越多,文件系统的负荷越大,相对来说就会慢一点

使用特权

评论回复
地板
tian111|  楼主 | 2021-12-8 23:07 | 只看该作者
看来这个问题确实是FatFs文件系统造成的,鉴于项目实时性要求高,我打算摒弃文件系统,直接向SD卡写数据,之后再设计一个专门的读卡器,用FatFs转存到另一只卡。

使用特权

评论回复
5
pengf| | 2021-12-8 23:08 | 只看该作者
给个建议,SD卡只能写容量的90%或者SD卡剩余50M时就不让写了,这样就可以满足要求啦。

使用特权

评论回复
6
heweibig| | 2021-12-8 23:10 | 只看该作者
你分页读写测试一下,看看靠前的是不是速度也很快

使用特权

评论回复
7
wangpe| | 2021-12-8 23:12 | 只看该作者

这个是文件系统的特性,我做的也有类似问题。当一个存储器存储即将满时,再进行数据存储时需要花费很长的时间来寻找空闲的簇而导致的速度变慢,与优化无关。

所以在进行操作有文件系统的存储卡时,最好先将所有文件删除,然后在写入的过程中不要删除文件以减少寻找空闲簇的时间。

使用特权

评论回复
8
xxrs| | 2021-12-8 23:16 | 只看该作者
文件系统的问题,前面加一个大的缓冲 吧,先写到缓冲中在慢慢搬到文件系统中去。可以考虑不用文件系统

使用特权

评论回复
9
tian111|  楼主 | 2021-12-8 23:19 | 只看该作者
每秒300kB的数据,加再大缓冲,后面来不及存也有数据溢出的时候,所以只能不用FatFs,因为起始扇区号和扇区总数是已知的,所以在设计的时候按扇区递增写入数据,不进行任何搜索和计算,这样可以节省大量时间。

使用特权

评论回复
10
tian111|  楼主 | 2021-12-8 23:22 | 只看该作者
SD卡格式化之后,我打算按扇区号进行依次写入数据,不进行任何搜索和计算,每次写入的数据为一个扇区的大小。

使用特权

评论回复
11
stly| | 2021-12-8 23:23 | 只看该作者
使用文件系统后,在哪里写数据是文件系统的事情,一般文件系统会从初始的扇区开始写数据,没有额外的干扰,如删除,复制或者更改文件大小等是不会破坏文件的连贯性的。

使用特权

评论回复
12
llljh| | 2021-12-8 23:29 | 只看该作者
请问大神1MB/s的速度是通过DMA模式还是普通模式?

使用特权

评论回复
13
juventus9554| | 2021-12-8 23:31 | 只看该作者
实时性要求高的话建议可以不用文件系统,直接物理地址操作就行,芯片做个高速usb口,再做个上位机软件将SD卡里的数据转成你想要的格式就行

使用特权

评论回复
14
chuxh| | 2021-12-8 23:33 | 只看该作者
没做过sd卡的事情

使用特权

评论回复
15
jiajs| | 2021-12-8 23:35 | 只看该作者
速度确实有点慢

使用特权

评论回复
16
yszong| | 2021-12-8 23:37 | 只看该作者
有可能程序上哪里耽误了?

使用特权

评论回复
17
zwll| | 2021-12-8 23:39 | 只看该作者
速度太慢了

使用特权

评论回复
18
stly| | 2021-12-8 23:41 | 只看该作者
最后找到问题了吗

使用特权

评论回复
19
tian111|  楼主 | 2021-12-8 23:43 | 只看该作者

明白了,多谢大家讨论这么多哈

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

797

主题

8878

帖子

7

粉丝