cutfall 发表于 2025-5-28 20:43

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

两个 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等)的访问。

别乱了阵脚 发表于 2025-6-9 13:42

BusMatrix通过仲裁机制(如轮询、优先级等)确保多个主控可以高效地访问总线,而不会导致死锁或长时间阻塞

暖了夏天蓝了海 发表于 2025-6-9 14:00

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

江河千里 发表于 2025-6-9 16:00

BusMatrix会仲裁这些请求,确保它们可以并行工作,而不会直接竞争总线

三生万物 发表于 2025-6-9 17:00

一般来说,BusMatrix会根据仲裁规则(如优先级、轮询等)决定哪个主控可以访问总线

一秒落纱 发表于 2025-6-9 20:00

由于DMA1和DMA2访问的是不同的总线(AHB2和AHB1)和存储器(SRAM2和SRAM1),它们可以并行工作,而不会直接竞争总线。BusMatrix会确保它们可以高效地访问总线

淡漠安然 发表于 2025-6-10 12:00

如果DMA1和DMA2同时发起请求,BusMatrix会根据仲裁规则选择其中一个。

冰春彩落下 发表于 2025-6-10 20:00

只有在总线负载非常高时,才可能出现短暂的仲裁延迟

远山寻你 发表于 2025-6-11 12:00

DMA1 从 ADC1(AHB2)到 SRAM2:DMA1作为总线主控,从AHB2总线上的ADC1读取数据,并写入SRAM2。DMA2 从 SRAM1 到 USART1(AHB1):DMA2作为总线主控,从SRAM1读取数据,并写入AHB1总线上的USART1

夜阑风雨 发表于 2025-6-12 12:00

由于STM32F4的BusMatrix设计,DMA1和DMA2可以在大多数情况下并行工作,而不会互相干扰
页: [1]
查看完整版本: 两个 DMA 是否可以并行工作而不竞争总线?