LinY 发表于 2024-1-30 11:22:57

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

和示例一样 在fatfs的read和write里面以DMA方式读写,但是奇怪后面的HAL_MMC_RxCpltCallback和HAL_MMC_TxCpltCallback一直没调用到
ReadStatus和WriteStatus一直是0
是我哪里配置有问题 还是说是少了什么启用命令




eric2013 发表于 2024-1-30 13:09:44

现在SDIO的时钟速度配套的多少,降低速度。

LinY 发表于 2024-1-30 13:59:29

eric2013 发表于 2024-1-30 13:09
现在SDIO的时钟速度配套的多少,降低速度。

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

LinY 发表于 2024-1-30 14:10:40



频率降到16倍频还是不行



LinY 发表于 2024-1-30 15:33:40

断点调试一步步跟进发现进了MMC_DMAError
错误码HAL_DMA_ERROR_TE

eric2013 发表于 2024-1-30 15:40:57

LinY 发表于 2024-1-30 15:33
断点调试一步步跟进发现进了MMC_DMAError
错误码HAL_DMA_ERROR_TE

把硬件流控制打开试试。

LinY 发表于 2024-1-30 17:13:12

eric2013 发表于 2024-1-30 15:40
把硬件流控制打开试试。

找到原因了
是有.c里面用了IRAM2
我把他关了 只用IRAM1
这样HAL_MMC_RxCpltCallback和HAL_MMC_TxCpltCallback就能调到了


硬件流控我也开了。

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

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

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


eric2013 发表于 2024-1-31 00:46:27

LinY 发表于 2024-1-30 17:13
找到原因了
是有.c里面用了IRAM2
我把他关了 只用IRAM1

谢谢告知问题原因。

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

无关风月 发表于 2024-1-31 09:27:57

也是遇到过,不过没仔细研究,官方的例子也是先是1线模式,初始化后改为4线:lol

LinY 发表于 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

难搞哦


eric2013 发表于 2024-2-1 08:10:46

LinY 发表于 2024-1-31 16:00
待处理问题,我用的sdio+fatfs+虚拟U盘挂载了一个32G颗粒
1.用DMA比不用还慢
2.用DMA有时候会出现异常, ...

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

LinY 发表于 2024-2-1 14:49:16

eric2013 发表于 2024-2-1 08:10
DMA要处理4字节对齐问题,你应该没有处理。

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



eric2013 发表于 2024-2-2 01:13:54

LinY 发表于 2024-2-1 14:49
我也是STM32F429的,有试过按照这个去配置的,也没效果

难道F4对eMMC的支持确实不太稳定。
页: [1]
查看完整版本: STM32F429 SDIO8线 MMC开启DMA后DMA结束回调不会调用