当前是从海思平台的mpp角度理解VI这一部分的。
视频输入(VI)模块实现的功能:通过 MIPI Rx(含 MIPI 接口、LVDS 接口和 HISPI 接口),SLVS-EC,BT.1120,BT.656,BT.601,DC 等接口接收视频数据。VI 将接收到的数据存入到指定的内存区域,在此过程中,VI 可以对接收到的原始视频图像数据进行处理,实现视频数据的采集。
VI的功能框图(VI在软件上分为4个部分):
VI 从软件上划分了输入设备(DEV),输入 PIPE(图示为物理 PIPE,虚拟 PIPE 只包含ISP_BE)、物理通道(PHY_CHN)、扩展通道(EXT_CHN)四个层级。
下面分别做介绍:
视频输入设备(DEV):所有 VI 设备都是相互独立的,支持时序解析。
输入 PIPE:VI 的 PIPE 包含了 ISP 的相关处理功能,主要是对图像数据进行流水线处理,输出YUV 图像格式给通道。
物理通道(PHY_CHN):Hi3559AV100 VI 只有一个物理通道,支持 8 个扩展通道。Hi3559AV100 物理通道支持的典型分辨率如 7680x4320@30fps、3840x2160@120fps、3840x2160@60fps、3840x2160@30fps、1080p@240fps、1080p @120fps、1080p @60fps、1080p@30fps 等。
扩展通道(EXT_CHN):扩展通道是物理通道的扩展,扩展通道具备缩放、裁剪、鱼眼矫正功能,它通过绑定物理通道,将物理通道输出作为自己的输入,然后输出用户设置的目标图像。
注意:不同的芯片MIPI和DEV的绑定关系不一样。Hi3559AV100 的 Dev 与 MIPI 绑定关系是固定的,不能动态修改绑定关系。
线性模式(非 WDR 模式)的一条通路应该是一个物理 PIPE 绑定一个 Dev,WDR模式下需要多个物理 PIPE 绑定一个 Dev,例如 2 合 1WDR,我们需要 2 个物理PIPE 绑定到一个 Dev。且在 WDR 模式下只有绑定到 Dev 的第 1 条物理 PIPE 的通道有数据输出,其他绑定的物理 PIPE 的通道是没有图像数据输出。每个 PIPE 都可以与任意 Dev 绑定,但不能动态修改绑定关系。
从模式 SENSOR,需要使用 VI 的从模式模块。从模式与 VI 的物理 PIPE 对应关系是固定的。用户需要根据 SENSOR 管脚的连线和从模式与 PIPE 的对应关系确定使用哪个从模式模块,然后选择对应的物理 PIPE 号创建物理 PIPE,否则会没有数据。
从模式与 PIPE 的对应关系如下:
HI3559AV100的设备、PIPE。通道个数如下:
DEV |
PHY_PIPE |
VIR_PIPE |
PHY_CHN |
EXT_CHN |
8 |
8 |
2 |
1 |
8 |
HI3559AV100视频输入通道功能:
Hi3559AV100 SOC 有两个 VI 逻辑模块,默认两个逻辑都是打开的。在 Linux 操作系统下,逻辑的开关可以使用 viproc_en 模块参数控制,Huawei LiteOS 不涉及。Linux 操作系统下加载 VI 的驱动时可以控制逻辑 1 的开关,但是逻辑 0 必须要打开。打开逻辑 1的操作方法为 insmod hi3559av100_vi.ko viproc_en=1,1,关闭逻辑 1 的操作方法为insmod hi3559av100_vi.ko viproc_en=1,0。
下面是芯片hi3559av100的datasheet上关于mipi rx的说明:
MIPI RX
移动行业处理器接口 MIPI Rx(Mobile Industry Processor Interface Receiver),通过低电压差分信号接收原始视频数据(BAYER RGB 数据),并将其转化为 DC(DigitalCamera)时序后传递给下一级模块 VICAP(Video Capture)。
MIPI Rx 支持 MIPI D-PHY、LVDS(Low-Voltage Differential Signal)、HiSPi(HighSpeed Serial Pixel Interface)(MIPI Rx HiSPi 规范中包含HiVCM 和 SLVS 两种物理层电气标准)等串行视频信号输入,串行视频接口可以提供更高的传输带宽,增强传输的稳定性。MIPI Rx 是一个支持多种差分视频输入接口的采集单元,主要功能是接口时序的转换。通过不同的功能配置,MIPI Rx 可以接收 MIPI/LVDS/sub-LVDS/HiSPi 接口的数据,并且支持多种速度和分辨率的传输需求,兼容多种图像传感器。MIPI Rx 包括 4 个 D-PHY,每个 PHY 各自有两对差分随路时钟(CLK0/CLK1),每对时钟对应 2 对数据。因此 MIPI Rx 可以同时支持 1~8 路 sensor 输入。
通道指 MIPI_Rx 内部的数据处理通道,对应连接到 VICAP 通道,每个通道单独处理一个Sensor 的数据。
mipi rx框图:
MIPI Rx 只完成接口的时序转换,不处理图像的数据格式。在满足带宽的前提下可以支持任意分辨率和帧率。MIPI Rx 的带宽有两部分限制:combo-PHY 的接口数据率和内部处理速度。两路 sensor 输入都是接口最大支持 2.5Gbps/Lane,内部处理速度最大600M*2pixels/s。
MIPI Rx 控制器支持 MIPI、LVDS 和 HiSPi 模式,每种模式下的软件配置包含两部分:控制器和 combo-PHY。
以下分别介绍各个模式的配置流程:
1.MIPI模式
MIPI 模式下需要配置 PHY 的工作模式、数据传输所用的通道数、数据类型及宽动态模式。MIPI 模式的帧/行同步信息包含于数据包中,由控制器完成数据包的解析,从而恢复出像素数据。
step1. 上电启动。
step2. 根据使用场景将 MISC_CTRL130 寄存器中相应通道的 mipi_work_mode 配置为 MIPI 模式。
step3. 配置 CRG 寄存器中的 PERI_CRG61,打开 mipi_bus_clken、mipi_cil_clken 以及对应通道的 mipi_pix_clken。配置 mipi 总线软复位,撤销复位;配置对应通道 pix_core 复位,撤销复位。
step4. 配置 CRG 寄存器中的 PERI_CRG69,配置 sensor 复位,撤销复位;打开 sensor 时钟门控,并配置时钟频率。
step5. 配置 CRG 寄存器中的 PERI_CRG60,选择 MIP_Rx 通道时钟频率。
step6. 配置 MIPI_Rx 的 Lane 数(MIPI_LANES_NUM)和 Lane ID (LANE_ID*_CHN*)。
step7. 配置接收数据类型、WDR 模式等。
step8. 配置 PHY 的工作模式(PHY_MODE_LINK*)、PHY 通道延迟调节(PHY_SKEW_LINK*)、PHY 通道使能(PHY_EN_LINK*)、PHY 均衡调节(PHY_EQ_LINK*)、PHY 性能调节(PHY_CFG_LINK*)。
step9. 配置系统控制寄存器。场景模式选择(HS_MODE_SELECT)、PHY_EN、LANE_EN,打开 PHY_CIL_CTRL、选择 PHYCFG_MODE(对于 MIPI 模式,应选择0 或者 4)。
step10. 配置对应的 PHYCFG_EN。
step11. 配置 sensor 序列。
2. LVDS 和 HiSPi 模式配置流程
LVDS/HiSPi 模式下需要配置 RAW DATA 类型、数据大小端、同步方式、WDR 类型和图像宽高等寄存器。LVDS 模式依靠同步码识别帧/行同步信息,根据 RAW DATA 类型的不同,同步码可以为 8/10/12/14/16-bit。
step1.上电启动。
step2. 根据使用场景将 MISC_CTRL130 寄存器中相应通道的 mipi_work_mode 配置为 LVDS模式。
step3. 配置 CRG 寄存器中的 PERI_CRG61,打开 mipi_bus_clken、mipi_cil_clken 以及对应通道的 mipi_pix_clken。配置 mipi 总线软复位,撤销复位;配置对应通道 pix_core 复位,撤销复位。
step4. 配置 CRG 寄存器中的 PERI_CRG69,配置 sensor 复位,撤销复位;打开 sensor 时钟门控,并配置时钟频率。
step5. 配置 CRG 寄存器中的 PERI_CRG60,选择 MIP_Rx 通道时钟频率。
step6. 配置接收数据类型、WDR 模式,图像宽高(LVDS 模式下,配置的宽度是图像实际宽度除以 Lane 数-1)、同步头、Lane ID 等信息。
step7. 配置 PHY 的工作模式(PHY_MODE_LINK*)、PHY 通道延迟调节(PHY_SKEW_LINK*)、PHY 通道使能(PHY_EN_LINK*)、PHY 均衡调节(PHY_EQ_LINK*)、PHY 性能调节(PHY_CFG_LINK*);配置 LVDS 模式 Lane 同步头信息(PHY_SYNC_CODE*_LINK*)。
step8. 配置系统控制寄存器。场景模式选择(HS_MODE_SELECT)、PHY_EN、LANE_EN,打开 PHY_CIL_CTRL、选择 PHYCFG_MODE(对于 LVDS 模式,应选择1)。
step9. 配置对应的 PHYCFG_EN。
step10. 配置 sensor 序列。