2. DCMIPP硬件架构解析
DCMIPP(Digital Camera Interface Pixel Pipeline)是STM32N6中用于连接MIPI CSI-2摄像头并完成图像采集、预处理与搬运的专用外设。理解它的硬件架构,核心不是记住寄存器名字,而是搞清楚一帧图像从CSI-2接收端进入芯片后,经过哪些处理单元、在什么位置被裁剪或缩放、最终由谁写入哪块内存。只有把这条数据通路在脑中建立起来,配置时才知道每个参数作用在链路的哪一级。
一、从CSI-2到内存的整体通路
STM32N6的DCMIPP前端通过MIPI D-PHY/CSI-2主机接口接收串行图像数据。CSI-2控制器完成包解析、虚拟通道(Virtual Channel)区分和数据类型识别后,把像素数据交给DCMIPP的像素管线。管线内部依次包含:像素打包/解包单元、裁剪(Crop)单元、下采样(Downsize)单元、统计单元,以及输出阶段的DMA打包器。处理后的数据经AHB/AXI总线接口写入指定内存区域,通常放在AXI SRAM或外部存储中供CPU、NPU或DMA2D进一步使用。
需要特别注意的是,DCMIPP内部存在两条可独立工作的数据通路:主通路(Pipe)和辅助通路(Auxiliary Pipe)。主通路面向高分辨率图像采集,支持裁剪、下采样和多种输出格式;辅助通路通常用于同时输出一路较小尺寸的图像(例如预览流或缩略图),两路可以共享同一CSI-2输入,但各自拥有独立的裁剪、缩放和DMA配置。这种“一入两出”的结构是DCMIPP区别于传统DCMI的关键能力之一。
二、像素管线各级的作用与参数落点
像素管线是DCMIPP真正做“图像处理”的部分。以主通路为例,第一级是像素解包:CSI-2送来的RAW10或RAW12数据在传输时按紧凑格式打包,解包单元把它还原成每个像素占16位的内部表示,方便后续统一处理。这一级通常不需要用户配置,但理解它有助于解释为什么RAW10的DMA输出字节数与像素数不是简单的一比一。
第二级是裁剪(Crop)。它从传感器输出的完整画幅中截取一个矩形区域(ROI),由起始坐标和宽高四个参数决定。裁剪的意义在于:如果应用只关心画面中央的1280×720区域,就没必要把整幅4000×3000都搬进内存。裁剪参数直接决定后续所有处理的数据量,因此应优先确定。
第三级是下采样(Downsize)。DCMIPP支持1/2、1/4等整数分频的降采样,用于在保持视野不变的前提下减小输出分辨率。例如裁剪出2560×1440后做1/2下采样,得到1280×720。下采样与裁剪是两种不同的“变小”手段:裁剪改变视野,下采样保留视野但降低细节。工程上常先裁剪掉无效边缘,再下采样到目标分辨率。
第四级是统计单元,它对图像做直方图或均值统计,供自动曝光(AE)和自动白平衡(AWB)算法使用。统计结果不占用DMA带宽,而是通过寄存器读取。最后,数据进入DMA打包器,按配置的输出格式(RAW8/RAW10/RGB565/YUV422等)重新打包,并通过总线写入内存。
三、DMA与总线接口
DCMIPP的每个通路都有独立的DMA通道,支持单缓冲和双缓冲(乒乓)两种模式。单缓冲下,一帧写完后必须由CPU及时取走,否则下一帧会覆盖;双缓冲则准备两块内存,DMA写A块时CPU处理B块,写完后自动切换,适合连续采集。配置时需要给出输出缓冲区首地址、行跨度(pitch)和总大小。行跨度允许大于实际行字节数,这样可以在每行末尾留出对齐填充,便于后续按固定步长访问。
总线侧,DCMIPP通过AXI主接口访问内存,具备一定的突发传输能力。由于图像数据量大,DMA目标应尽量放在带宽较高的AXI SRAM中;若放入外部PSRAM,需要评估总线竞争对帧率的影响。此外,DCMIPP可产生帧开始、帧结束、行结束等中断,用于驱动采集状态机。
四、与DCMI的差异及STM32N6平台特性
传统DCMI只是一个并口采集加DMA搬运的接口,本身不做裁剪、缩放或格式转换,所有后处理都要靠CPU或DMA2D完成。DCMIPP则把裁剪、下采样、统计和格式打包集成在采集链路内,显著降低了CPU负担。另一个关键差异是DCMIPP原生面向MIPI CSI-2,而DCMI面向并行接口,这使STM32N6更适合连接现代高分辨率串行摄像头。
在STM32N6平台上,DCMIPP还与NPU、DMA2D、LTDC等外设共享内存带宽。典型用法是:DCMIPP把一帧图像写入AXI SRAM,NPU从同一块内存读取做推理,DMA2D再把结果叠加到显示层。因此规划内存布局时,应把DCMIPP的输出缓冲区放在访问延迟低、带宽充足的位置,并避免与其它高带宽外设争抢同一总线区域。