3. DMA 控制器原理:传输模式与通道仲裁

DMA(Direct Memory Access)控制器是 RAW 图采集系统中连接传感器、内存与处理器的核心数据通路。理解其传输模式与仲裁机制,是优化传输效率、避免数据丢失的前提。本章从硬件架构出发,深入剖析 DMA 的三种传输模式、多通道请求仲裁策略,并结合 RAW 图采集场景给出配置建议。

3.1 DMA 传输模式:单次、突发与循环

DMA 控制器支持三种基本传输模式,分别适用于不同数据流特征。下表从触发方式、传输粒度、适用场景三个维度进行对比:

传输模式 触发方式 传输粒度 典型 RAW 图场景 CPU 干预频率
单次传输 单次请求触发一次传输 1 个数据单元(字节/半字/字) 传感器单像素读出、调试模式 高(每次传输后需重新配置)
突发传输 单次请求触发连续传输 固定长度突发(4/8/16 拍) RAW 行数据搬运、帧缓存写入 低(一次配置完成整行)
循环传输 硬件自动循环重载 整帧或固定块 连续视频流采集、环形缓冲区 极低(仅初始化配置)
关键指标: 突发传输的“突发长度”直接影响总线利用率。对于 RAW10/RAW12 格式,建议突发长度对齐到 4 拍(即 4 像素),避免总线碎片化。

3.1.1 单次传输模式

单次传输模式下,DMA 每收到一个请求只传输一个数据单元。该模式控制简单,但每次传输后都需要重新仲裁总线,导致大量时钟周期浪费在握手与地址更新上。在 RAW 图采集场景中,单次传输仅适用于传感器输出速率极低(< 1 MSPS)或调试阶段逐像素验证的场景。

3.1.2 突发传输模式

突发传输是 RAW 图采集中最常用的模式。DMA 在获得总线控制权后,连续传输固定长度的数据块,期间不释放总线。突发长度通常可配置为 4、8、16 或 32 拍。对于 RAW 图的行数据,建议将突发长度设置为行像素数的约数,例如 1920 像素的行可配置为 16 拍 × 120 次突发。

// 突发传输配置示例(基于 STM32 DMA 控制器)
DMA_InitTypeDef DMA_InitStruct;
DMA_InitStruct.DMA_Mode = DMA_MODE_NORMAL;       // 非循环模式
DMA_InitStruct.DMA_PeripheralDataSize = DMA_PDATAALIGN_HALFWORD; // 16bit RAW
DMA_InitStruct.DMA_MemoryDataSize = DMA_MDATAALIGN_HALFWORD;
DMA_InitStruct.DMA_BurstSize = DMA_BURST_16;     // 16 拍突发
DMA_InitStruct.DMA_Number = 1920 / 16;            // 总传输次数 = 行像素 / 突发长度
HAL_DMA_Init(&hdma_raw, &DMA_InitStruct);

3.1.3 循环传输模式

循环传输模式在传输完成后自动重载初始地址和计数值,无需 CPU 重新配置。该模式特别适合连续 RAW 图帧采集,配合双缓冲或环形缓冲区,可实现零 CPU 开销的持续数据流。循环模式的关键在于地址回绕逻辑:当内存地址到达缓冲区末尾时,自动跳回起始地址。

注意: 循环传输模式下,必须确保缓冲区大小是突发长度的整数倍,否则最后一次突发可能跨越缓冲区边界,导致数据覆盖或地址越界异常。

3.2 DMA 通道与请求仲裁

现代 DMA 控制器通常集成多个独立通道,每个通道可独立配置源地址、目的地址、传输宽度和触发源。多通道同时请求时,仲裁器根据优先级策略决定总线使用权。

3.2.1 通道架构

下图展示了一个典型 4 通道 DMA 控制器的内部结构,包含通道寄存器组、仲裁器、地址发生器与总线接口:

DMA 控制器内部架构(4 通道) 通道 0 RAW 传感器 通道 1 ISP 输出 通道 2 显示刷新 通道 3 CPU 后备 仲裁器 固定优先级 轮询调度 加权公平 紧急请求 地址发生器 源/目的地址 + 增量 总线接口 AHB / AXI 主端口 说明: 每个通道独立配置, 仲裁器决定总线授权顺序。

3.2.2 请求仲裁策略

当多个通道同时发出 DMA 请求时,仲裁器根据预设策略决定哪个通道获得总线控制权。常见仲裁策略包括:

  • 固定优先级: 通道编号越小优先级越高。适用于传感器数据流优先级明确高于其他外设的场景。缺点是低优先级通道可能被饿死。
  • 轮询调度: 所有通道按固定顺序轮流获得总线。保证每个通道都有机会传输,但实时性无法保证。
  • 加权公平: 为每个通道分配权重,高权重通道获得更多总线时间片。适合 RAW 图采集与显示刷新混合的场景。
  • 紧急请求: 支持通道标记为“紧急”,仲裁器优先处理紧急请求。适用于传感器 FIFO 即将溢出的紧急情况。

3.2.3 RAW 图采集的仲裁配置建议

通道用途 推荐优先级 仲裁策略 说明
RAW 传感器采集 最高 固定优先级 + 紧急 传感器 FIFO 深度有限,必须及时读取
ISP 处理输出 中 加权公平(权重 3) 处理流水线可容忍少量延迟
显示刷新 低 轮询 显示帧率可降频,不影响采集
CPU 后备传输 最低 轮询 非实时任务,可等待空闲总线
实战技巧: 在 FPGA 或 DSP 平台上,建议为 RAW 采集通道启用“紧急请求”标志,并设置一个独立的阈值寄存器。当传感器 FIFO 水位超过 75% 时,自动触发紧急请求,强制仲裁器立即响应,避免数据丢失。

3.3 传输模式与仲裁的协同优化

传输模式与仲裁策略并非独立选择,二者需要协同配置才能达到最优效率。以下给出两个典型场景的配置组合:

3.3.1 场景一:高帧率 RAW 视频流

  • 传输模式: 循环传输 + 突发长度 16 拍
  • 仲裁策略: 固定优先级,RAW 通道最高
  • 缓冲区: 双缓冲,每缓冲 4 行 RAW 数据
  • 效果: 总线利用率 > 90%,CPU 零干预

3.3.2 场景二:多传感器同步采集

  • 传输模式: 突发传输(非循环),每帧结束后重新配置
  • 仲裁策略: 加权公平,各传感器权重按帧率比例分配
  • 同步机制: 硬件触发同步,所有通道同时启动
  • 效果: 多路数据无冲突,帧对齐精度 < 1 像素时钟
核心结论: 突发传输减少总线切换开销,循环传输消除 CPU 重配置延迟,合理的仲裁策略防止通道饿死。三者结合,是 RAW 图采集系统达到线速传输的关键。