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. 更多相关问答(答案在原帖截图中)
- DMA的Burst的理解(Jack)——Burst 传输的图解说明
- 关于burst的打断(Jack)——Burst 传输被抢占打断的图解说明
- SPI和DMA混合应用数据位宽(Jack)——SPI+DMA 混用时数据位宽匹配问题(四图详解)
- 各位大佬好,有个问题想请教一下。D-Code是否可以访问SRAM数据?如图一所写(🍊)——D-Code 总线与 SRAM 访问范围的资料对照疑问
来源笔记
- 老师,dma的速率是多少?(Jack)
- 老师,DMA能降低ahb总线带宽的意思是不是:我们通过dma搬运数据(Jack)
- 老师,根据您的对DMA的讲解,ARM CM4和DMA2同时通过APB2访问UART(Jack)
- 老师,DMA主控有两个端口——内存端口和外设端口。这两个端口都连接到总线矩阵(Jack)
- Q: 老师,如果多个外设连接到(Jack)
- 老师,cpu去外设读数据时需要经过AHB总线(CPU通过S总线→AHB总线矩阵→SR(Jack)
- 老师们,我在整理资料的时候发现了一个问题,是不是Cortex内核里面也有个Bus(Jack)
- STM32F411中D-BUS可以访问到SRAM(高耦合)
- DMA的Burst的理解(Jack)
- 关于burst的打断(Jack)
- SPI和DMA混合应用数据位宽(Jack)
- 各位大佬好,有个问题想请教一下。D-Code是否可以访问SRAM数据?如图一所写(🍊)