SPI+DMA方式驱动SD卡

2019-07-21 01:38发布

本帖最后由 JM哆啦a梦 于 2016-4-9 10:09 编辑

使用DMA方式传送数据可以提高传送速度,提高CPU的使用效率。程序的核心部分就是将之前需要CPU搬运大量数据的地方换成DMA的方式实现。战舰开发板上配套的程序修上改修如下:
1.void SD_SPI_Init(void);函数 DMAinit.png

2.u8 SD_RecvData(u8*buf,u16 len);////从sd卡读取一个数据包的内容。
read.png
3.u8 SD_SendBlock(u8*buf,u8 cmd);//向sd卡写入一个数据包的内容 512字节。
write.png

4.上面涉及到的3个与DMA有关的函数都放在了dma.c文件中,直接添加到工程中即可。

换成DMA方式后究竟速度能提高多少?复制同一个文件:
无DMA模式:
无DMA方式 无DMA方式
DMA模式:
DMA方式 DMA方式
复制不同的文件速度会有不同,反正就是使用DMA方式速度能够提高好多好多。大家可以尝试显示一张JPG、BMP图片,效果会很明显(本人已验证过)。附上代码:





友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
26条回答
月无缺
1楼-- · 2019-07-22 23:09
谢谢分享!
ajianyes
2楼-- · 2019-07-23 02:47
参照楼主的代码写SPI FLASH,用DMA方式,在读数据时候始终无法读取数据,发送数据部分正常,纠结ing,望楼主指点迷津,我用的是STM32F103
tanttt
3楼-- · 2019-07-23 06:36
good ,thank you for your shared
ZhuMX
4楼-- · 2019-07-23 08:31
不错,谢谢楼主的分享!
一棵葱
5楼-- · 2019-07-23 09:31
 精彩回答 2  元偷偷看……
hero779
6楼-- · 2019-07-23 14:02
MARK,用DMA方式确实快很多,SPI方式,CLASS 10 的SD卡不用DMA写入800K需要2秒多,用DMA不到1秒~

一周热门 更多>