OpenEdv-开源电子网

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

如何提升SD卡写速度(理论即可)

[复制链接]

7

主题

162

帖子

0

精华

高级会员

Rank: 4

积分
541
金钱
541
注册时间
2017-4-6
在线时间
67 小时
发表于 2017-5-8 21:13:27 | 显示全部楼层 |阅读模式
66金钱
最近工作需要用SD卡结合USB做U盘,对SD卡的写入速度要求比较高。
目前写入SD卡的clk时钟为50Mhz/bit,采用了四线模式,卡用的是2.0的High capacity模式,等于是25Mbyte/s,但实际上测得写2Kbyte的数据需要花1.6ms的时间。

花时间比较久的地方在两个地方:
1.使用多快写入命令时,写完一块之后等待DATA线拉高的等待时间
2.发送结束命令之后等待从忙状态退出的时间

请教下各位大神,针对这两个地方怎么改进?可以通过软件上对其进行设置吗?目前想将时间降到1ms以下,不知道是否能实现。

最佳答案

查看完整内容[请看2#楼]

根据手册查询,原来是没有切换到高速模式,在SD协议中有CMD6这样一个命令,可以切换 function state,其中cmd6的参数位中3:0位可以用于调节速度。 对于SD2.0的卡来说,需要设置成High Speed模式,才能支持25M/Byte的速度。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

7

主题

162

帖子

0

精华

高级会员

Rank: 4

积分
541
金钱
541
注册时间
2017-4-6
在线时间
67 小时
 楼主| 发表于 2017-5-8 21:13:28 | 显示全部楼层
根据手册查询,原来是没有切换到高速模式,在SD协议中有CMD6这样一个命令,可以切换 function state,其中cmd6的参数位中3:0位可以用于调节速度。
对于SD2.0的卡来说,需要设置成High Speed模式,才能支持25M/Byte的速度。
回复

使用道具 举报

1

主题

561

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1183
金钱
1183
注册时间
2015-5-28
在线时间
149 小时
发表于 2017-5-9 19:30:30 | 显示全部楼层
使用dma,中断(带OS会有提升,裸机提升不大),都会有提升,不过最重要的还是取决于芯片这个外设的设计
回复

使用道具 举报

1

主题

561

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1183
金钱
1183
注册时间
2015-5-28
在线时间
149 小时
发表于 2017-5-9 19:34:34 | 显示全部楼层
花时间比较久的地方在两个地方:
1.使用多快写入命令时,写完一块之后等待DATA线拉高的等待时间
2.发送结束命令之后等待从忙状态退出的时间

对于这两条,是SD协议里面要求的,因为SD卡读写是个异步过程,要等卡操作完成才能进行下一个动作~你必须去等,但是你可以异步的等,让中断来通知你~这样就提高了CPU是使用率
回复

使用道具 举报

7

主题

162

帖子

0

精华

高级会员

Rank: 4

积分
541
金钱
541
注册时间
2017-4-6
在线时间
67 小时
 楼主| 发表于 2017-5-9 20:12:32 | 显示全部楼层
小陀螺爱炒蛋 发表于 2017-5-9 19:34
花时间比较久的地方在两个地方:
1.使用多快写入命令时,写完一块之后等待DATA线拉高的等待时间
2.发送结 ...

目前是采用的DMA来做的,有考虑使用异步的做法,确实能节省CPU的效率,谢谢您的建议。

但是发现过这样一个问题,就是我使用读卡器去写SD卡时,速度能达到6MByte/s,读取速度达到20MByte/s,但使用SDIO控制器时,最高也只能达到2MByte/s,不知道您在这方面是否有过经验,可否指点一二?
回复

使用道具 举报

49

主题

341

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
5268
金钱
5268
注册时间
2012-8-25
在线时间
1025 小时
发表于 2017-5-10 08:36:56 | 显示全部楼层
请教 怎么切换到HighSpeed模式, HAL_SD_HighSpeed 好像没用用到,设置了断点没有进入
回复

使用道具 举报

7

主题

162

帖子

0

精华

高级会员

Rank: 4

积分
541
金钱
541
注册时间
2017-4-6
在线时间
67 小时
 楼主| 发表于 2017-5-10 08:45:39 | 显示全部楼层
gotofly21 发表于 2017-5-10 08:36
请教 怎么切换到HighSpeed模式, HAL_SD_HighSpeed 好像没用用到,设置了断点没有进入

如果你用的是SD2.0的卡,那么需要使用CMD6命令,详细说明文档上有。
另外你的总线时序要达到50Mhz,并且使用四线模式,这样才能达到理论上的25Mbyte/s的速度,但这个速度只是传输数据的速度,并不包括等待的时间。
回复

使用道具 举报

30

主题

104

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
456475
金钱
456475
注册时间
2014-8-23
在线时间
59 小时
发表于 2017-5-10 08:53:12 | 显示全部楼层
JUSTNIUB 发表于 2017-5-10 08:45
如果你用的是SD2.0的卡,那么需要使用CMD6命令,详细说明文档上有。
另外你的总线时序要达到50Mhz,并且 ...

CMD6是应该先查询后使用吧,那么,如何查询呢.
回复

使用道具 举报

7

主题

162

帖子

0

精华

高级会员

Rank: 4

积分
541
金钱
541
注册时间
2017-4-6
在线时间
67 小时
 楼主| 发表于 2017-5-10 09:34:48 | 显示全部楼层
cl17726 发表于 2017-5-10 08:53
CMD6是应该先查询后使用吧,那么,如何查询呢.

这里不明白你说的查询是什么意思,或者你想说的是选中?
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2017-11-24
在线时间
6 小时
发表于 2017-12-20 14:55:05 | 显示全部楼层
你好,请问你修改成high_speed 模式之后的速度是多少啊?
回复

使用道具 举报

7

主题

162

帖子

0

精华

高级会员

Rank: 4

积分
541
金钱
541
注册时间
2017-4-6
在线时间
67 小时
 楼主| 发表于 2017-12-26 13:45:17 | 显示全部楼层
czklczkl 发表于 2017-12-20 14:55
你好,请问你修改成high_speed 模式之后的速度是多少啊?

有很久没弄了,不过速度是跟MCU的频率以及SD卡的型号有关的,一般来说,SD卡的型号是最大的限制因素,我用的时候最大传输速度没有超过10Mhz的(整体)。
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2020-2-19
在线时间
3 小时
发表于 2020-2-29 18:10:59 | 显示全部楼层
楼主,您好,请问最后问题解决了吗?进入高速模式,只是提高接口的速度,sd卡将数据写入等待时间会降低吗?
回复

使用道具 举报

7

主题

162

帖子

0

精华

高级会员

Rank: 4

积分
541
金钱
541
注册时间
2017-4-6
在线时间
67 小时
 楼主| 发表于 2020-3-9 12:44:29 | 显示全部楼层
admiration123 发表于 2020-2-29 18:10
楼主,您好,请问最后问题解决了吗?进入高速模式,只是提高接口的速度,sd卡将数据写入等待时间会降低吗?

不会,等待时长跟SD卡介质有关。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-26 06:58

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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