1231 字
6 分钟
[海思 3519DV500] VI 与 VPSS 绑定模式

在 Hi3519DV500 架构中,VI (Video Input) 和 VPSS (Video Process Sub-System) 的协作模式由 VI_CAP(采集)、VI_PROC(处理)和 VPSS 三者之间的流转方式决定。


1. 核心工作模式定义#

术语澄清
  • VI 在线/离线:指 VI_CAPVI_PROC 之间的数据传输模式。
  • VPSS 在线/离线:指 VI_PROCVPSS 之间的数据传输模式。

表 2-4: VI 和 VPSS 工作模式说明#

模式VI_CAP 与 VI_PROCVI_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 节点操作。

  • 操作 APIhi_mpi_vi_get_pipe_frame
  • 适用模式:必须在 VI 离线 (Offline) 模式下。

2.2 Channel 节点:YUV 数据的输出端#

这是业务开发最常用的节点,此时 ISP 已完成所有图像转换(去噪、锐化、CSC)。

  • 操作 APIhi_mpi_vi_get_chn_frame
  • 适用模式:在线/离线均可。

3. PIPE 工作模式分布规则#

3.1 第 0 个 PIPE (PIPE 0)#

PIPE 0 是系统的主管道,支持以下三种模式组合:

  1. VI 在线,VPSS 离线
  2. VI 在线,VPSS 在线
  3. 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_PROCVPSS 的在线路径与 VI_CAPVI_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 离线模式的性能代价#

虽然离线模式提供了极大的灵活性,但在高性能场景下,它是一个沉重的负载:

离线模式的三大代价
  1. 带宽消耗 (Bandwidth):4K@60fps 的 YUV420 数据量约为 750MB/s。全离线模式下,VI 写一次 + VPSS 读一次,共吃掉 1.5GB/s 的 DDR 总线带宽。
  2. 功耗增加:频繁的 DDR 存取翻转是 SoC 发热的主要原因。
  3. 时延延迟 (Latency):离线模式必须等一整帧写完 DDR 才能进行下一步,这会产生约 33ms (30fps) 的固定端到端延迟。
FMU 的价值

正是为了规避传统离线模式(DMA 整帧写入 \rightarrow 中断 \rightarrow 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 配置好模式。

[海思 3519DV500] VI 与 VPSS 绑定模式
https://www.eustia-astraea.top/posts/hisi/hi3519dv500-vi-vpss-binding/
作者
mcsl
发布于
2024-03-23
许可协议
CC BY-NC-SA 4.0