You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

STM32MP157F的dmaengine_prep_dma_cyclic内存到内存DMA无法运行求助

STM32 MP157F MDMA循环传输无法启动问题求助

背景与优化过程

我们基于STM32 MP157F的MDMA引擎(32个DMA通道)实现了自定义驱动,用于将FMC接口(挂载FPGA)映射区域的数据通过DMA复制到RAM,FPGA内置小型FIFO作为数据源。

高速数据采集场景下,DMA事务的建立时间直接影响数据完整性:

  • 最初采用工作队列创建下一个DMA事务,但因必要IO操作需等待,无法在dma_completed原子上下文直接执行,导致DMA事务间停顿最长达5ms,引发FPGA FIFO溢出。
  • 改用dmaengine_prep_dma_memcpy后,通过合并DMA映射页、提前准备DMA页、双通道切换三项优化,DMA间停顿通常低于1ms,但仍存在FIFO接近溢出的峰值情况。

当前问题

为实现无停顿的持续DMA传输,我们尝试使用dmaengine_prep_dma_cyclic,但遇到异常:

  • 可正常获取dma_cookie,通道状态始终显示DMA_IN_PROGRESS
  • 事务永不完成,回调函数也未触发
  • 对比之下,dmaengine_prep_dma_memcpy可正常完成传输

查看内核源码stm32-mdma.c发现:dmaengine_prep_dma_cyclic调用的stm32_mdma_set_xfer_param()始终配置硬件请求,而dmaengine_prep_dma_memcpy有独立的参数设置流程。

求助问题

  1. 是否可通过软件触发,使用dmaengine_prep_dma_cyclic实现内存到内存的DMA事务?
  2. 是否存在FPGA与SOC间未连接的信号(如缺少TSEL设置)导致该问题?

注:可提供最小驱动源码示例,该问题具有强硬件特异性。

内容的提问来源于stack exchange,提问作者Gunther

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 09:16:35