3. DMA 控制器原理:传输模式与通道仲裁
DMA(Direct Memory Access)控制器是 RAW 图采集系统中连接传感器、内存与处理器的核心数据通路。理解其传输模式与仲裁机制,是优化传输效率、避免数据丢失的前提。本章从硬件架构出发,深入剖析 DMA 的三种传输模式、多通道请求仲裁策略,并结合 RAW 图采集场景给出配置建议。
3.1 DMA 传输模式:单次、突发与循环
DMA 控制器支持三种基本传输模式,分别适用于不同数据流特征。下表从触发方式、传输粒度、适用场景三个维度进行对比:
| 传输模式 | 触发方式 | 传输粒度 | 典型 RAW 图场景 | CPU 干预频率 |
|---|---|---|---|---|
| 单次传输 | 单次请求触发一次传输 | 1 个数据单元(字节/半字/字) | 传感器单像素读出、调试模式 | 高(每次传输后需重新配置) |
| 突发传输 | 单次请求触发连续传输 | 固定长度突发(4/8/16 拍) | RAW 行数据搬运、帧缓存写入 | 低(一次配置完成整行) |
| 循环传输 | 硬件自动循环重载 | 整帧或固定块 | 连续视频流采集、环形缓冲区 | 极低(仅初始化配置) |
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 控制器的内部结构,包含通道寄存器组、仲裁器、地址发生器与总线接口:
3.2.2 请求仲裁策略
当多个通道同时发出 DMA 请求时,仲裁器根据预设策略决定哪个通道获得总线控制权。常见仲裁策略包括:
- 固定优先级: 通道编号越小优先级越高。适用于传感器数据流优先级明确高于其他外设的场景。缺点是低优先级通道可能被饿死。
- 轮询调度: 所有通道按固定顺序轮流获得总线。保证每个通道都有机会传输,但实时性无法保证。
- 加权公平: 为每个通道分配权重,高权重通道获得更多总线时间片。适合 RAW 图采集与显示刷新混合的场景。
- 紧急请求: 支持通道标记为“紧急”,仲裁器优先处理紧急请求。适用于传感器 FIFO 即将溢出的紧急情况。
3.2.3 RAW 图采集的仲裁配置建议
| 通道用途 | 推荐优先级 | 仲裁策略 | 说明 |
|---|---|---|---|
| RAW 传感器采集 | 最高 | 固定优先级 + 紧急 | 传感器 FIFO 深度有限,必须及时读取 |
| ISP 处理输出 | 中 | 加权公平(权重 3) | 处理流水线可容忍少量延迟 |
| 显示刷新 | 低 | 轮询 | 显示帧率可降频,不影响采集 |
| CPU 后备传输 | 最低 | 轮询 | 非实时任务,可等待空闲总线 |
3.3 传输模式与仲裁的协同优化
传输模式与仲裁策略并非独立选择,二者需要协同配置才能达到最优效率。以下给出两个典型场景的配置组合:
3.3.1 场景一:高帧率 RAW 视频流
- 传输模式: 循环传输 + 突发长度 16 拍
- 仲裁策略: 固定优先级,RAW 通道最高
- 缓冲区: 双缓冲,每缓冲 4 行 RAW 数据
- 效果: 总线利用率 > 90%,CPU 零干预
3.3.2 场景二:多传感器同步采集
- 传输模式: 突发传输(非循环),每帧结束后重新配置
- 仲裁策略: 加权公平,各传感器权重按帧率比例分配
- 同步机制: 硬件触发同步,所有通道同时启动
- 效果: 多路数据无冲突,帧对齐精度 < 1 像素时钟