OpenEdv-开源电子网

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

怎么样提高F4写入SD卡速度(文件系统+SDIO+DMA)

[复制链接]

2

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
121
金钱
121
注册时间
2016-10-21
在线时间
35 小时
发表于 2018-5-11 15:37:03 | 显示全部楼层 |阅读模式
10金钱
现在在做一个项目,打算将采集到的数据存入SD卡中,移植的是原子哥FATFA实验的程序,不过我把查询模式改成了DMA模式(只改了一句),成功在SD卡中建立了CSV文件,我试过存8K的数据,用示波器大约用时10ms,感觉有点慢啊。。有没有提高写入速度的办法。下面是main函数中我测试的写入数据的语句,S_data数组为8K char型
[mw_shl_code=applescript,true]        res=f_open(&fil,fname,FA_CREATE_ALWAYS|FA_WRITE);

        f_lseek(&fil, f_size(&fil));
       
       
        LED1=1;       
        p=S_data;
        for(i=0;i<1024;i++)
        {
                p=p+sprintf(p,"%d\r\n",testdata);

        }
       
        f_write(&fil,S_data,8192,&bww);
        LED1=0;               
        [/mw_shl_code]

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2018-5-13 00:24:31 | 显示全部楼层
文件整大一些,太小了,存储就慢。
回复

使用道具 举报

68

主题

165

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
388
金钱
388
注册时间
2017-3-2
在线时间
156 小时
发表于 2018-5-14 11:14:23 | 显示全部楼层
文件大一些,格式化SD卡的时候簇设置大一些,使用DMA传输,写入基本上能到8MB/s。
回复

使用道具 举报

2

主题

10

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
246
金钱
246
注册时间
2018-8-8
在线时间
44 小时
发表于 2018-10-28 13:57:04 | 显示全部楼层
我和你做的事情差不多,所谓“文件大传输速度快”不是因为单次写入块大了所以快了。因为FATFS的那几个API函数执行的时间太长(都是MS以上)而占用了写文件的绝大部分时间,其实速度本没有变,只是写入块大了,API函数执行的时间所占的比例就少了,所以你单次写入块大了显得速度就快了。
回复

使用道具 举报

2

主题

4

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2018-10-29
在线时间
0 小时
发表于 2018-10-29 12:04:23 | 显示全部楼层
我的板子是阿波罗H743,在做FATFS的实验,在实验中,将SD_DMA_MODE设为1后,程序就出错,错在“exf_getfree”这步,POLL方式下这里可以得到总容量和剩余容量,DMA方式下这里无法获得。
回复

使用道具 举报

4

主题

16

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
201
金钱
201
注册时间
2019-5-13
在线时间
25 小时
发表于 2019-8-12 15:48:50 | 显示全部楼层
大佬,能把你得工程给我发一下吗,最近也在做SD卡852784937@qq.com,多谢大佬了
回复

使用道具 举报

0

主题

4

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2020-3-6
在线时间
1 小时
发表于 2020-3-6 16:09:51 | 显示全部楼层
kokoromi 发表于 2018-5-14 11:14
文件大一些,格式化SD卡的时候簇设置大一些,使用DMA传输,写入基本上能到8MB/s。


我用的hal库例程里的sdio+dma方式怎么还不如sdio查询方式速度快而且有时候经常会死在SDMMC_GetCmdResp1()函数的while(!__SDIO_GET_FLAG(SDIOx, SDIO_FLAG_CCRCFAIL | SDIO_FLAG_CMDREND | SDIO_FLAG_CTIMEOUT));这个循环里!! 请问F4有可以参考的里程吗?
回复

使用道具 举报

19

主题

79

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
215
金钱
215
注册时间
2023-5-13
在线时间
33 小时
发表于 2023-6-5 20:26:09 | 显示全部楼层
大佬 可以分享一下代码吗 我最近也在做SD卡存储的项目 非常感谢 2311288865@qq.com
回复

使用道具 举报

4

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
110
金钱
110
注册时间
2023-6-8
在线时间
30 小时
发表于 2023-6-19 14:32:52 | 显示全部楼层
大佬 可以分享一下代码吗?我最近学习SD卡存储的项目 万分感谢!!! 1598803801@qq.com
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-24 11:37

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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