怎么使用DMA来读SD卡?

2019-07-20 11:21发布

最近在做个东西,需要快速读取文件的数据取出来用,我看了下底层的代码,f_read()函数执行读取文件的流程是在该函数中调用disk_read()函数,然后调用到SD_ReadDisk()函数,再到SD_ReadBlock()函数来读取文件所指向的扇区
由于原子的程序SDIO的读写都是通过查询模式的,所以我对于DMA模式读取SD卡的理解是,只需要把模式改成DMA模式就可以
也就是改这个地方
                errorstatus=SD_SetDeviceMode(SD_DMA_MODE);        //设置为DMA模式
//                errorstatus=SD_SetDeviceMode(SD_POLLING_MODE);//设置为查询模式

但是我发现并不能实现,那DMA模式+SDIO+FATFS,到底是个怎么回事?求解
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
正点原子
1楼-- · 2019-07-20 16:47
就是这么改就行了。
142zjb
2楼-- · 2019-07-20 20:23
 精彩回答 2  元偷偷看……
142zjb
3楼-- · 2019-07-20 22:55
 精彩回答 2  元偷偷看……
帅帅的于
4楼-- · 2019-07-20 23:00
142zjb 发表于 2017-9-26 22:08
后面再改了一下,还是可以的

请问后面还要修改什么?谢谢
kobemrc
5楼-- · 2019-07-21 00:51
 精彩回答 2  元偷偷看……
142zjb
6楼-- · 2019-07-21 04:08
帅帅的于 发表于 2017-10-9 15:12
请问后面还要修改什么?谢谢

void SD_DMA_Config(u32*mbuf,u32 bufsize,u32 dir)
这个函数里 DMA_InitStructure.DMA_BufferSize = 0;这一句,我把0改成bufsize。
SD_Error SD_Init(void)
这个函数里面关于设置时钟频率SDIO_CK的相关注释掉
就行了
//但是!!!!!!!!!!!!!!!!!!!!!
当我把这些有改回来,发现又并不影响了,所有到后面我都不清楚具体是什么问题就成功了