硬汉嵌入式论坛

 找回密码
 立即注册
查看: 503|回复: 12
收起左侧

STM32F429 SDIO8线 MMC开启DMA后DMA结束回调不会调用

[复制链接]

11

主题

36

回帖

69

积分

初级会员

积分
69
发表于 2024-1-30 11:22:57 | 显示全部楼层 |阅读模式
和示例一样 在fatfs的read和write里面以DMA方式读写,但是奇怪后面的HAL_MMC_RxCpltCallback和HAL_MMC_TxCpltCallback一直没调用到
ReadStatus和WriteStatus一直是0
是我哪里配置有问题 还是说是少了什么启用命令

1.png 2.png 3.png 4.png


回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106856
QQ
发表于 2024-1-30 13:09:44 | 显示全部楼层
现在SDIO的时钟速度配套的多少,降低速度。
回复

使用道具 举报

11

主题

36

回帖

69

积分

初级会员

积分
69
 楼主| 发表于 2024-1-30 13:59:29 | 显示全部楼层
eric2013 发表于 2024-1-30 13:09
现在SDIO的时钟速度配套的多少,降低速度。

现在配置的ClockDiv=8
也就是180/8=22.5
回复

使用道具 举报

11

主题

36

回帖

69

积分

初级会员

积分
69
 楼主| 发表于 2024-1-30 14:10:40 | 显示全部楼层
5.png

频率降到16倍频还是不行



回复

使用道具 举报

11

主题

36

回帖

69

积分

初级会员

积分
69
 楼主| 发表于 2024-1-30 15:33:40 | 显示全部楼层
断点调试一步步跟进发现进了MMC_DMAError
错误码HAL_DMA_ERROR_TE
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106856
QQ
发表于 2024-1-30 15:40:57 | 显示全部楼层
LinY 发表于 2024-1-30 15:33
断点调试一步步跟进发现进了MMC_DMAError
错误码HAL_DMA_ERROR_TE

把硬件流控制打开试试。
回复

使用道具 举报

11

主题

36

回帖

69

积分

初级会员

积分
69
 楼主| 发表于 2024-1-30 17:13:12 | 显示全部楼层
eric2013 发表于 2024-1-30 15:40
把硬件流控制打开试试。

找到原因了
是有.c里面用了IRAM2 [0x10000000-0x1000FFFF]
我把他关了 只用IRAM1 [0x20000000-0x2002FFFF]
这样HAL_MMC_RxCpltCallback和HAL_MMC_TxCpltCallback就能调到了
6.png

硬件流控我也开了。

但是现在是出现另外的问题,我用的sdio+fatfs+虚拟U盘挂载了一个32G颗粒
1.就是用DMA比不用还慢
2.用DMA有时候会出现异常,会提示U盘需要修复
3.拷贝文件进U盘时,瞬间完成然后实际文件没在里面的

4.用DMA有时候会出现异常,f_mount等等函数会直接提示FR_DISK_ERR

感觉DMA不研究透 问题太多了


回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106856
QQ
发表于 2024-1-31 00:46:27 | 显示全部楼层
LinY 发表于 2024-1-30 17:13
找到原因了
是有.c里面用了IRAM2 [0x10000000-0x1000FFFF]
我把他关了 只用IRAM1 [0x20000000-0x2002FF ...

谢谢告知问题原因。

防不胜防,这个CCM RAM是不支持DMA的。
回复

使用道具 举报

5

主题

132

回帖

147

积分

初级会员

积分
147
发表于 2024-1-31 09:27:57 | 显示全部楼层
也是遇到过,不过没仔细研究,官方的例子也是先是1线模式,初始化后改为4线
回复

使用道具 举报

11

主题

36

回帖

69

积分

初级会员

积分
69
 楼主| 发表于 2024-1-31 16:00:12 | 显示全部楼层
待处理问题,我用的sdio+fatfs+虚拟U盘挂载了一个32G颗粒
1.用DMA比不用还慢
2.用DMA有时候会出现异常,会提示U盘需要修复
3.拷贝文件进U盘时,瞬间完成然后显示文件也在里面,断点之后实际文件没有
4.用DMA有时候会出现异常,f_mount等等函数会直接提示FR_DISK_ERR

感觉DMA不研究透 问题太多了
对我这样的新手 用HAL库是开发起来友好多了 不用去操作具体寄存器层面了
但是只是会用,都不知道为啥这么调用。

这个DMA感觉用HAL不一定能搞定了 估计还得去看看具体DS
搞完MMC的DMA 回头还得看看ETH的DMA

难搞哦


回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106856
QQ
发表于 2024-2-1 08:10:46 | 显示全部楼层
LinY 发表于 2024-1-31 16:00
待处理问题,我用的sdio+fatfs+虚拟U盘挂载了一个32G颗粒
1.用DMA比不用还慢
2.用DMA有时候会出现异常, ...

DMA要处理4字节对齐问题,你应该没有处理。
回复

使用道具 举报

11

主题

36

回帖

69

积分

初级会员

积分
69
 楼主| 发表于 2024-2-1 14:49:16 | 显示全部楼层
eric2013 发表于 2024-2-1 08:10
DMA要处理4字节对齐问题,你应该没有处理。

我也是STM32F429的,有试过按照这个去配置的,也没效果
7.png
8.png

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106856
QQ
发表于 2024-2-2 01:13:54 | 显示全部楼层
LinY 发表于 2024-2-1 14:49
我也是STM32F429的,有试过按照这个去配置的,也没效果

难道F4对eMMC的支持确实不太稳定。
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-7 18:38 , Processed in 0.258963 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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