打印
[STM32F4]

两个 DMA 是否可以并行工作而不竞争总线?

[复制链接]
512|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
cutfall|  楼主 | 2025-5-28 20:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
两个 DMA 模块是否可以在不争夺总线的情况下同时工作?
例如:
BusMatrix.png文件中,可以看到 DMA1 和 DMA2 都连接了 SRAM1、SRAM2、AHB1 外设和 AHB2 外设。
如果我将 DMA1设置为从 ADC1(在 Connections.png 中所示的 AHB2总线中)获取数据到 SRAM2,并将 DMA2设置为从 SRAM1到 USART1(在 Connections.png 中所示的 AHB1 总线中)获取数据,这两个 DMA 是否会竞争成为总线的主控?还是他们要同时工作而不互相打扰?
如果是这样,当 DMA1不用时,是否可以将 ADC 部件移动到 DMA2以释放 DMA1中的一些带宽?

使用特权

评论回复
沙发
烟雨蒙蒙520| | 2025-5-31 23:20 | 只看该作者
如果你使用的是 STM32H7 或 STM32G4 系列,有 DMAMUX,你就可以将 ADC 的 request route 到 DMA2,这样就能“释放”DMA1。

使用特权

评论回复
板凳
烟雨蒙蒙520| | 2025-5-31 23:20 | 只看该作者
一般没必要切换,除非 DMA1 带宽不足,或 DMA channel 紧张

使用特权

评论回复
地板
光辉梦境| | 2025-6-9 12:00 | 只看该作者
STM32F4的BusMatrix是一个仲裁器,用于管理多个总线主控(如DMA、CPU、外设等)对共享总线(如AHB1、AHB2、SRAM等)的访问。

使用特权

评论回复
5
别乱了阵脚| | 2025-6-9 13:42 | 只看该作者
BusMatrix通过仲裁机制(如轮询、优先级等)确保多个主控可以高效地访问总线,而不会导致死锁或长时间阻塞

使用特权

评论回复
6
DMA1和DMA2是独立的DMA模块,它们可以同时发起总线请求

使用特权

评论回复
7
江河千里| | 2025-6-9 16:00 | 只看该作者
BusMatrix会仲裁这些请求,确保它们可以并行工作,而不会直接竞争总线

使用特权

评论回复
8
三生万物| | 2025-6-9 17:00 | 只看该作者
一般来说,BusMatrix会根据仲裁规则(如优先级、轮询等)决定哪个主控可以访问总线

使用特权

评论回复
9
一秒落纱| | 2025-6-9 20:00 | 只看该作者
由于DMA1和DMA2访问的是不同的总线(AHB2和AHB1)和存储器(SRAM2和SRAM1),它们可以并行工作,而不会直接竞争总线。BusMatrix会确保它们可以高效地访问总线

使用特权

评论回复
10
淡漠安然| | 2025-6-10 12:00 | 只看该作者
如果DMA1和DMA2同时发起请求,BusMatrix会根据仲裁规则选择其中一个。

使用特权

评论回复
11
冰春彩落下| | 2025-6-10 20:00 | 只看该作者
只有在总线负载非常高时,才可能出现短暂的仲裁延迟

使用特权

评论回复
12
远山寻你| | 2025-6-11 12:00 | 只看该作者
DMA1 从 ADC1(AHB2)到 SRAM2:DMA1作为总线主控,从AHB2总线上的ADC1读取数据,并写入SRAM2。DMA2 从 SRAM1 到 USART1(AHB1):DMA2作为总线主控,从SRAM1读取数据,并写入AHB1总线上的USART1

使用特权

评论回复
13
夜阑风雨| | 2025-6-12 12:00 | 只看该作者
由于STM32F4的BusMatrix设计,DMA1和DMA2可以在大多数情况下并行工作,而不会互相干扰

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

32

主题

32

帖子

0

粉丝