在 Hi3519DV500 架构中,VI (Video Input) 和 VPSS (Video Process Sub-System) 的协作模式由 VI_CAP(采集)、VI_PROC(处理)和 VPSS 三者之间的流转方式决定。
1. 核心工作模式定义
术语澄清
- VI 在线/离线:指 VI_CAP 与 VI_PROC 之间的数据传输模式。
- VPSS 在线/离线:指 VI_PROC 与 VPSS 之间的数据传输模式。
表 2-4: VI 和 VPSS 工作模式说明
| 模式 | VI_CAP 与 VI_PROC | VI_PROC 与 VPSS |
|---|---|---|
| 在线模式 | 在线数据流传输。VI_CAP 不写 RAW 到 DDR,直接送给 VI_PROC。 | 在线数据流传输。VI_PROC 不写 YUV 到 DDR,直接送给 VPSS。 |
| 离线模式 | VI_CAP 写 RAW 到 DDR,VI_PROC 从 DDR 读取进行后处理。 | VI_PROC 写 YUV 到 DDR,VPSS 从 DDR 读取进行后处理。 |
硬件约束Hi3519DV500 不支持 “VI 离线 + VPSS 在线”模式。若需类似效果,应使用“VI 离线 + VPSS 离线 + FMU 直通模式”。
2. 数据获取节点分析:RAW vs YUV
工作模式直接决定了开发者在哪个节点、使用哪个 API 可以截获图像数据。
2.1 Pipe 节点:RAW 数据的输出端
如果你需要获取未经 ISP 处理或半处理的原始数据(用于画质调优或算法训练),通常从 VI Pipe 节点操作。
- 操作 API:
hi_mpi_vi_get_pipe_frame - 适用模式:必须在 VI 离线 (Offline) 模式下。
2.2 Channel 节点:YUV 数据的输出端
这是业务开发最常用的节点,此时 ISP 已完成所有图像转换(去噪、锐化、CSC)。
- 操作 API:
hi_mpi_vi_get_chn_frame - 适用模式:在线/离线均可。
3. PIPE 工作模式分布规则
3.1 第 0 个 PIPE (PIPE 0)
PIPE 0 是系统的主管道,支持以下三种模式组合:
- VI 在线,VPSS 离线
- VI 在线,VPSS 在线
- VI 离线,VPSS 离线
3.2 其他 PIPE (PIPE 1-3)
限制条件
- 非 0 管道只能设置为 VI 离线,VPSS 离线。
- 当 PIPE 0 处于“在线”时,其他离线 PIPE 只能用于获取 PIPE FRAME,无法使用
VI_PROC的图像处理功能。
4. 深度探讨:为何不支持“VI 离线 + VPSS 在线”模式?
在 Hi3519DV500 的硬件设计中,该模式的缺失主要源于以下两个核心矛盾:
4.1 异步读取与同步传输的冲突
- VI 离线 (Offline):意味着
VI_PROC(ISP)需要从 DDR 中异步读取 RAW 数据。由于 DDR 总线带宽的竞争,读取过程存在微小的时延抖动(Jitter)。 - VPSS 在线 (Online):要求上级模块以绝对严格的硬件像素时钟 (Pixel Clock) 实时推送行数据(Line-by-line)。
矛盾点:当数据源头变成“不可控”的 DDR 读取时,硬件无法保证输出端能以极度精确的无抖动频率“喂”给 VPSS,这会打破硬件流水线的时钟同步。
4.2 物理链路与时延控制
海思在设计时为了优化功耗和面积,将 VI_PROC 到 VPSS 的在线路径与 VI_CAP 到 VI_PROC 的路径进行了耦合。
5. 离线模式的底层实现:DMA 与总线 I/O
在离线模式下,数据在 VI/VPSS 与内存(DDR)之间的搬运是通过 DMA (Direct Memory Access) 硬件引擎实现的。
5.1 它属于 I/O 操作吗?
这取决于观察的维度:
- 从硬件架构看:它是典型的 Bus I/O。它占用了 SoC 内部的高速总线带宽(AXI Bus),并产生存取延迟。
- 从软件逻辑看:它不是传统的“文件 I/O”。它不涉及内核空间拷贝,而是纯粹的物理内存(VB 缓冲区)操作,由 DMA 引擎自动完成,无需 CPU 介入搬运。
5.2 离线模式的性能代价
虽然离线模式提供了极大的灵活性,但在高性能场景下,它是一个沉重的负载:
离线模式的三大代价
- 带宽消耗 (Bandwidth):4K@60fps 的 YUV420 数据量约为 750MB/s。全离线模式下,VI 写一次 + VPSS 读一次,共吃掉 1.5GB/s 的 DDR 总线带宽。
- 功耗增加:频繁的 DDR 存取翻转是 SoC 发热的主要原因。
- 时延延迟 (Latency):离线模式必须等一整帧写完 DDR 才能进行下一步,这会产生约 33ms (30fps) 的固定端到端延迟。
FMU 的价值正是为了规避传统离线模式(DMA 整帧写入 中断 DMA 整帧读取)的巨大时延,海思设计了 FMU (Frame Management Unit)。它通过读写指针的实时管理,允许下游在数据尚未写完时提前开始读取,从而在物理离线的基础上实现了逻辑上的“准在线”效果。
6. 总结与建议
| 需求场景 | 推荐模式 | 数据流向 |
|---|---|---|
| 极速预览 / 电子后视镜 | 全在线 (Online-Online) | Sensor -> ISP -> VPSS (不写 DDR) |
| 普通监控 / 画质增强 | 在线-离线 (Online-Offline) | Sensor -> ISP -> DDR -> VPSS |
| 双摄 / 多帧WDR / RAW Dump | 全离线 (Offline-Offline) | Sensor -> DDR(RAW) -> ISP -> DDR(YUV) |
IMPORTANT在系统初始化 (
hi_mpi_sys_init) 之前,必须先调用hi_mpi_sys_set_vi_vpss_mode配置好模式。