OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 10126|回复: 19

STM32用SDIO方式FATFS读取SD卡内TXT文件速率慢

[复制链接]

29

主题

167

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1011
金钱
1011
注册时间
2021-7-26
在线时间
184 小时
发表于 2023-1-14 11:21:35 | 显示全部楼层 |阅读模式
15金钱
我看网上说SDIO方式读取SD卡数据能到MB/s的级别,但是我使用FATFS的文件操作函数,实际数据传输速率测得才160KB/s,这是为什么呢,因为文件操作函数封装的太费时间了吗?其中主要是f_gets读取函数很费时间。

result=f_open(&fnew,"0:/ABCD.TXT", FA_READ);
f_lseek(&fnew,fi*2005);
f_gets(buf1,2005,&fnew);//读取TXT文件的内容存到数组里

f_close(&fnew);



请问有什么提升读取TXT文件数据速率的办法吗,有例程参考一下吗

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

34

主题

94

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2022-4-8
在线时间
81 小时
发表于 2023-1-16 21:53:36 | 显示全部楼层
为什么我的只能读扇区,你的就能根据路径读?你的是哪里的例程?能发我一份吗?
回复

使用道具 举报

29

主题

167

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1011
金钱
1011
注册时间
2021-7-26
在线时间
184 小时
 楼主| 发表于 2023-1-18 10:28:04 | 显示全部楼层
1684908828 发表于 2023-1-16 21:53
为什么我的只能读扇区,你的就能根据路径读?你的是哪里的例程?能发我一份吗?

FATFS的官方学习网址,正点原子视频里面有过介绍,里面的各种调用还是很全的
http://elm-chan.org/fsw/ff/00index_e.html
回复

使用道具 举报

29

主题

167

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1011
金钱
1011
注册时间
2021-7-26
在线时间
184 小时
 楼主| 发表于 2023-1-23 21:30:18 | 显示全部楼层
捞一下
回复

使用道具 举报

29

主题

167

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1011
金钱
1011
注册时间
2021-7-26
在线时间
184 小时
 楼主| 发表于 2023-1-24 17:03:53 | 显示全部楼层
捞一下
回复

使用道具 举报

16

主题

426

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2676
金钱
2676
注册时间
2018-11-8
在线时间
431 小时
发表于 2023-1-24 19:56:13 | 显示全部楼层
蹲个答案
你这速率咋掐的啊 开个定时器传大文件计算的?
回复

使用道具 举报

29

主题

167

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1011
金钱
1011
注册时间
2021-7-26
在线时间
184 小时
 楼主| 发表于 2023-1-25 11:22:56 | 显示全部楼层
babyrabbit 发表于 2023-1-24 19:56
蹲个答案
你这速率咋掐的啊 开个定时器传大文件计算的?

对拿定时器测的,fopen大概1-2ms,lseek找指针位置也1ms左右,就fgets读的时间最慢,4000多个字节读了25ms
回复

使用道具 举报

29

主题

167

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1011
金钱
1011
注册时间
2021-7-26
在线时间
184 小时
 楼主| 发表于 2023-2-3 09:37:41 | 显示全部楼层
捞一手
回复

使用道具 举报

16

主题

426

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2676
金钱
2676
注册时间
2018-11-8
在线时间
431 小时
发表于 2023-2-3 10:54:53 | 显示全部楼层
好像没人搭理你啊
刚才我大概看了下f_write的函数 貌似就是进行了各种判断 最后调disk_write写入 然后disk_write就是用的SD_writedisk
你的SD卡读写是用的DMA方式吗 如果不是的话速度会慢
如果是的话 可以考虑下直接调用SD卡写入的函数 测试下写入速度 看看同样大小的数据使用FATFS和直接写入速度会差多少 根据数据再分析原因
我现在也遇到了大量数据写入与读取的问题 在考虑要不要用SD卡呢 暂时是想用SPI的FLASH 感觉SD卡还是有点儿复杂
回复

使用道具 举报

11

主题

2103

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4588
金钱
4588
注册时间
2015-1-10
在线时间
574 小时
发表于 2023-2-5 14:41:38 | 显示全部楼层
操作是否用DMA?SD卡标称速率是多少?是否用的格式化之后的SD卡进行的测试?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2023-2-7 01:01:32 | 显示全部楼层
你这样单次测试,根本就不能体现性能, 要连续读取, 用f_read, 一次读取4K/8K/16K数据这样, 然后速度才会高。 另外对你的sd卡也有要求,要高速卡
回复

使用道具 举报

29

主题

167

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1011
金钱
1011
注册时间
2021-7-26
在线时间
184 小时
 楼主| 发表于 2023-2-16 18:43:26 | 显示全部楼层
本帖最后由 精英板 于 2023-2-16 18:48 编辑
babyrabbit 发表于 2023-2-3 10:54
好像没人搭理你啊
刚才我大概看了下f_write的函数 貌似就是进行了各种判断 最后调disk_write写入 然后disk ...

假期摸鱼,现在又继续做了,多谢回复。

回复

使用道具 举报

29

主题

167

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1011
金钱
1011
注册时间
2021-7-26
在线时间
184 小时
 楼主| 发表于 2023-2-16 22:11:39 | 显示全部楼层
babyrabbit 发表于 2023-2-3 10:54
好像没人搭理你啊
刚才我大概看了下f_write的函数 貌似就是进行了各种判断 最后调disk_write写入 然后disk ...

我本来以为DMA个SD卡会比较花时间,没想到原子的代码里包装好了SD_DMA_MODE。我本来以为包装好了用一下就OK了,没想到在文件系统用不了。我试了一下,单独SD卡实验操作可以,但上了文件就会卡死在f_mount(fs[0],"0:",1);挂载SD卡上。
其实我也没搞清SD卡,我感觉直接写入SD卡的话应该是写进扇区里了,数据会很难看。
你要是也弄大量数据读取的话,现在所有串口助手逻辑都是把文本框里的文件保存,但是一旦数据很快即使传了文本框也可能丢失串口接收数据,并且文本框的存储能力有限,过多文本框装不下。你要是需要我可以给你用我做的这个上位机,是直接接收串口数据保存到文件的
回复

使用道具 举报

29

主题

167

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1011
金钱
1011
注册时间
2021-7-26
在线时间
184 小时
 楼主| 发表于 2023-2-16 22:15:41 | 显示全部楼层
阿侑kevin 发表于 2023-2-5 14:41
操作是否用DMA?SD卡标称速率是多少?是否用的格式化之后的SD卡进行的测试?

SD卡改好SD_DMA_MODE模式后不能在fatfs里用呀,改成SD_DMA_MODE后能进行SD卡的简单操作实验,但是上fatfs后会卡死在f_mount挂载上。
回复

使用道具 举报

29

主题

167

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1011
金钱
1011
注册时间
2021-7-26
在线时间
184 小时
 楼主| 发表于 2023-2-16 22:28:29 | 显示全部楼层
正点原子 发表于 2023-2-7 01:01
你这样单次测试,根本就不能体现性能, 要连续读取, 用f_read, 一次读取4K/8K/16K数据这样, 然后速度才 ...

f_read和f_get都测试了,速率好像差不多。我是一次读取9000个数据f_gets(buf1,9000,&fnew);的。
那我试试高速SD卡
回复

使用道具 举报

29

主题

167

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1011
金钱
1011
注册时间
2021-7-26
在线时间
184 小时
 楼主| 发表于 2023-2-17 14:13:16 | 显示全部楼层
阿侑kevin 发表于 2023-2-5 14:41
操作是否用DMA?SD卡标称速率是多少?是否用的格式化之后的SD卡进行的测试?

用的标准库
回复

使用道具 举报

16

主题

426

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2676
金钱
2676
注册时间
2018-11-8
在线时间
431 小时
发表于 2023-2-17 14:13:27 | 显示全部楼层
本帖最后由 babyrabbit 于 2023-2-17 14:22 编辑
精英板 发表于 2023-2-16 22:11
我本来以为DMA个SD卡会比较花时间,没想到原子的代码里包装好了SD_DMA_MODE。我本来以为包装好了用一下就 ...

哇 老哥求分享 万分感谢 291773644@qq.com
写成文件的目的 主要是为了在电脑上直接打开看 还可以粘出来做个曲线图啥的 如果直接往扇区里写数据 那SD卡不就变大号的FLASH了嘛……

回复

使用道具 举报

1

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
114
金钱
114
注册时间
2021-8-16
在线时间
64 小时
发表于 2023-4-7 10:55:03 | 显示全部楼层
精英板 发表于 2023-2-16 22:11
我本来以为DMA个SD卡会比较花时间,没想到原子的代码里包装好了SD_DMA_MODE。我本来以为包装好了用一下就 ...

老哥,可以分享给我一下吗?我也想要串口数据保存到文本的。非常感谢啊2677848441@qq.com
回复

使用道具 举报

51

主题

2165

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10652
金钱
10652
注册时间
2017-4-14
在线时间
2780 小时
发表于 2023-4-7 13:25:47 | 显示全部楼层
葭月之末 发表于 2023-4-7 10:55
老哥,可以分享给我一下吗?我也想要串口数据保存到文本的。非常感谢啊

官方例子都有呀
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2023-5-22
在线时间
1 小时
发表于 2023-5-22 22:45:56 | 显示全部楼层
f_close时间不也挺长的嘛
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-24 08:48

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表