MCU的DMA吞吐量取决于通路与仲裁
外设速率没有提高,换了一块片内存储区后却开始丢数据,这并不矛盾。MCU 的直接存储器访问吞吐量首先取决于通路能否到达,其次取决于共享通路多久才能得到服务,主频与通道优先级都不能替代这两项判断。
处理器能够访问某个地址,不代表每个传输控制器也能到达。多存储体器件可能同时包含紧耦合存储器、不同电源域的静态存储器及外部存储窗口,各主设备的连接关系并不相同。缓冲数组默认进入速度最快的数据段,恰好可能被放进目标控制器无法访问的区域。此时软件读写完全正常,硬件搬运却报告总线错误或无法完成,扩大数组与延长等待都不会修复缺失的物理路径。
定位应从链接后的实际地址出发。先查看映射文件,确认数组最终落在哪个存储体,再沿参考手册中的互连图检查选用控制器的主端口、跨域桥及目标从端口。某些系列的普通控制器无法访问紧耦合区,另一些器件却提供了特定访问通路,因此不能把名称相同当成连接相同。迁移芯片时需要重新核对这张访问矩阵,尤其要警惕链接脚本沿用旧器件地址但没有触发编译错误的情况。容量相邻也不能作为可达性依据,地址表中的连续区域可能属于不同互连。
专用段可以把这项约束固化下来。将外设缓冲区集中放入经过验证的可达存储体,并在构建时检查地址范围与容量,能避免后续新增静态变量改变默认布局。若控制器只能到达较慢区域,可以让处理器先在快速区完成计算,再复制到交换区,但必须计入复制时间和额外空间。没有证据证明可达之前,不应通过增大突发长度追求性能,因为控制参数无法绕过不存在的连接。
通路可达以后,真正限制连续数据流的常常是服务延迟。两个主设备争用同一个存储体或桥接端口时,访问请求需要仲裁。即使平均总线带宽高于输入速率,一次较长的竞争访问仍可能让外设在短时间内等不到搬运。若可用接收余量为十六字节,数据每微秒到达两字节,忽略其他延迟时也只剩八微秒等待空间。预算应进一步扣除请求同步、桥接以及启动搬运所需时间。
因此,通道优先级需要与总线层次一起分析。同一控制器内部的高优先级,只能影响它负责的通道选择,未必提高整个系统互连上的主设备等级。过长突发可能改善大块搬运效率,也可能拉长其他主设备的等待;过短突发则增加仲裁与地址开销。应结合目标端口的仲裁规则、突发是否会被拆分及其他主设备的访问形态,计算外设最坏情况下能否及时得到一次有效服务。
对 MCU 的压力测试应构造真实竞争,而不是只跑单通道复制。让处理器持续访问目标存储体,同时启动显示刷新或另一路搬运,观察溢出标志和最长服务间隔。若器件支持独立存储体,可将高吞吐工作区与紧迫接收区分开,使访问走不同从端口。只按地址把数组分开却仍落在同一物理存储体,通常不能消除瓶颈。优化结果应体现截止时间得到满足,而不只是平均复制速度增加。
稳定搬运需要两份证据:缓冲区确实位于硬件可达区域,最坏争用下也能在外设余量耗尽前获得服务。先查路径,再算等待预算,吞吐量指标才有工程意义。





