OpenEdv-开源电子网

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

关于FATfs和SD卡的读写DMA的问题

[复制链接]

91

主题

186

帖子

0

精华

初级会员

Rank: 2

积分
118
金钱
118
注册时间
2016-3-22
在线时间
122 小时
发表于 2018-1-5 15:14:26 | 显示全部楼层 |阅读模式
1金钱
现在要用将2048字节倍数的数据通过fatfs系统和SDIO存入SD卡内的txt文件中,实现读写就可以,SDIO有DMA,想问一下官方给的fatfs例程代码中SD卡初始化中有
errorstatus=SD_SetDeviceMode(SD_DMA_MODE);        //DMA模式,想用DMA的话只要打开这个就行了,还是说还要把DMA的SDIO通道和数据流配置一下才能用?

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2018-1-6 01:46:47 | 显示全部楼层
只要开这个,剩下的,代码自动处理了
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2017-2-24
在线时间
4 小时
发表于 2018-1-22 10:35:50 | 显示全部楼层
正点原子 发表于 2018-1-6 01:46
只要开这个,剩下的,代码自动处理了

原子兄,我用你的历程写的SDIO读写程序,测试发现把SD_Init()这个函数放在main函数里,整个程序读写都没问题,但是如果放在FreeRTOS某个任务里就不行。该任务具有最高优先级。
这是什么原因?总是提示STBITERR或者DCRCFAIL
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2018-1-23 02:10:31 | 显示全部楼层
龙行tianxia123 发表于 2018-1-22 10:35
原子兄,我用你的历程写的SDIO读写程序,测试发现把SD_Init()这个函数放在main函数里,整个程序读写都没 ...

看看是不是任务堆栈问题?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2017-2-24
在线时间
4 小时
发表于 2018-1-30 11:46:07 | 显示全部楼层
正点原子 发表于 2018-1-23 02:10
看看是不是任务堆栈问题?

原子兄,你说的堆栈问题是什么意思?
我任务堆栈大小1024 word(任务堆栈实际只用了100字节不到。),任务里只有SDIO初始化和读取扇区0的程序。结果总是出现STBITERR。
我把初始化函数放到main()内,就没有任何问题。
实在是不知道是什么原因了。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2018-1-31 01:57:29 | 显示全部楼层
龙行tianxia123 发表于 2018-1-30 11:46
原子兄,你说的堆栈问题是什么意思?
我任务堆栈大小1024 word(任务堆栈实际只用了100字节不到。),任务 ...

你原来的初始化,放哪里了?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2017-2-24
在线时间
4 小时
发表于 2018-1-31 12:31:52 | 显示全部楼层
本帖最后由 龙行tianxia123 于 2018-1-31 12:34 编辑
正点原子 发表于 2018-1-31 01:57
你原来的初始化,放哪里了?

我用了FreeRTOS。如果把SD初始化函数放在main()函数最开始的地方,也就是FreeRTOS启动以前初始化SD,是能够正常读写SD卡的。但是如果把SD初始化函数放在任务函数最开始的地方,就不行。
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2017-2-24
在线时间
4 小时
发表于 2018-1-31 15:41:21 | 显示全部楼层
正点原子 发表于 2018-1-31 01:57
你原来的初始化,放哪里了?

我发现原因是SD卡数据总线宽度一直是1。我用ACMD6去设置数据总线宽度为4,但是一直不成功。什么原因?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2018-2-1 01:32:44 | 显示全部楼层
龙行tianxia123 发表于 2018-1-31 15:41
我发现原因是SD卡数据总线宽度一直是1。我用ACMD6去设置数据总线宽度为4,但是一直不成功。什么原因?

我也说不准。
我的初始化代码,基本都是放最前面的。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2018-2-2 01:56:11 | 显示全部楼层
你试试在初始化SD卡的时候,禁止中断(禁止任务调度),初始化完成以后,再开启,试试看。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

2

主题

8

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2018-8-1
在线时间
12 小时
发表于 2018-8-1 11:07:40 | 显示全部楼层
正点原子 发表于 2018-1-6 01:46
只要开这个,剩下的,代码自动处理了

原子哥,你好 ,分别用DMA模式和查询模式测试  10K字节的数据写入,写入时间都是43ms左右,不应该是DMA模式下更快而且快的明显吗?
回复

使用道具 举报

17

主题

193

帖子

0

精华

高级会员

Rank: 4

积分
708
金钱
708
注册时间
2014-7-2
在线时间
137 小时
发表于 2018-8-1 11:30:23 | 显示全部楼层
Jong 发表于 2018-8-1 11:07
原子哥,你好 ,分别用DMA模式和查询模式测试  10K字节的数据写入,写入时间都是43ms左右,不应该是DMA模 ...

DMA 不一定快, 但肯定减轻CPU 负担
回复

使用道具 举报

2

主题

8

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2018-8-1
在线时间
12 小时
发表于 2018-8-1 12:23:48 | 显示全部楼层
qiousanxi 发表于 2018-8-1 11:30
DMA 不一定快, 但肯定减轻CPU 负担

我的初衷是 想采用DMA模式写入SD卡,这样可以腾出时间让cpu做其他事情。但是结果是DMA模式和查询模式下 执行  写入10K字节 语句耗费的时间一样。因为在dma模式下,有这样的语句:while(((DMA2->LISR&(1<<27))==RESET)&&timeout)timeout--;//等待传输完成。
回复

使用道具 举报

17

主题

193

帖子

0

精华

高级会员

Rank: 4

积分
708
金钱
708
注册时间
2014-7-2
在线时间
137 小时
发表于 2018-8-1 15:50:29 | 显示全部楼层
你上系统的话就最好上信号量
回复

使用道具 举报

2

主题

8

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2018-8-1
在线时间
12 小时
发表于 2018-8-1 16:01:22 | 显示全部楼层
qiousanxi 发表于 2018-8-1 15:50
你上系统的话就最好上信号量

嗯,上系统确实比较好解决这个问题。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-7 17:19

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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