DMA与总线问答合集

📖 精选 📅 2026-09-04
#来源/立芯星球 #类型/问答合集 #技术/DMA #技术/总线 #技术/AHB

DMA与总线问答合集

由本目录 12 篇 DMA 与总线主题问答的答案精华按知识点重组而成,原帖全部保留,每节末尾标注出处。

1. DMA 的速率上限

DMA 的速率最高不会超过 AHB 总线的速度,同时还受两方面限制:CPU 抢占 AHB 总线的情况,以及被写入外设的写入速度、读出外设的读出速度。想让 DMA 尽可能高速运行,可以用 Burst 模式抢占 AHB 总线

老师,dma的速率是多少?(Jack)

2. "DMA 降低 AHB 总线带宽"的正确理解

有同学把"降低带宽"理解为"DMA 搬数据让 CPU 干别的",这是不对的。正确理解:DMA 可以不经过 CPU 去访问外设——数据从外设经 AHB 总线直接放进 SRAM,CPU 不必发起"外设→SRAM"的搬运访问,省下的是原本 CPU 访问占用的总线带宽

老师,DMA能降低ahb总线带宽的意思是不是:我们通过dma搬运数据(Jack)

3. 多主设备访问同一总线:仲裁器串行化

ARM CM4 和 DMA2 同时通过 APB2 访问 UART 和 ADC 时如何运作?UART 和 ADC 不能同时被访问。多个主设备(如 CM4 和 DMA2)的访问会通过仲裁器(arbiter)进行串行化处理。

老师,根据您的对DMA的讲解,ARM CM4和DMA2同时通过APB2访问UART(Jack)

4. DMA 主控的双端口设计

DMA 主控有内存端口和外设端口两个端口,都连到总线矩阵。为什么 APB2 的数据必须经"外设端口收、内存端口写"两段路,而不能直接用外设端口写入 SRAM?答案:无法通过外设总线执行内存写操作——这正是外设端口与内存端口在权限上的区别,也是双端口设计的原因。

老师,DMA主控有两个端口——内存端口和外设端口。这两个端口都连接到总线矩阵(Jack)

5. 同一条 APB2 上的多个外设会竞争吗

多个外设连接到同一个 APB2 总线,不会在处理器或 DMA 介入之前发生总线竞争;多个外设可以同时发送数据而不发生竞争,因为 APB2 总线带宽足以支撑它们同时通信。

Q: 老师,如果多个外设连接到(Jack)

6. CPU 读一次外设数据经过几次 AHB

CPU 去外设读数据(CPU 通过 S 总线 → AHB 总线矩阵 → 外设寄存器映射地址,数据原路返回)算一次经过 AHB;把外设数据搬到 SRAM 又是一次经过 AHB——一共两次经过 AHB 总线,这个理解是对的。

老师,cpu去外设读数据时需要经过AHB总线(CPU通过S总线→AHB总线矩阵→SR(Jack)

7. Cortex 内核的 I/D/S 总线与 MCU 总线矩阵的关系

Cortex-M 内核通常会把取指、数据访问和系统访问分成多个对外的 master 端口(常见 I-Code/D-Code/System),这些端口以 AHB-Lite 协议连接到 MCU 的 AHB 总线互连矩阵,从而在 SoC 层面形成 I/D/System 三条访问通路,以提升并行性并减少结构冲突。

老师们,我在整理资料的时候发现了一个问题,是不是Cortex内核里面也有个Bus(Jack)

8. D-BUS 能否访问 SRAM:与启动方式有关

在 STM32F411 中,D-BUS 具备访问 SRAM 的可能性,但只有当选择从 SRAM 启动时才可访问:该启动模式下代码区域位于 SRAM,SRAM 的物理地址 0x2000_0000 被映射到地址 0,D-BUS 才能对 SRAM 进行访问。

STM32F411中D-BUS可以访问到SRAM(高耦合)

9. 更多相关问答(答案在原帖截图中)

来源笔记