VIISP 模块培训总结:从接口协议到实战排查
# VI&ISP 模块培训总结:从接口协议到实战排查 > **摘要**:本文系统梳理了视频输入(VI)与图像信号处理(ISP)模块的核心知识体系,涵盖 MIPI/LVDS/DC/BT.656/BT.1120 等视频接口协议、Sensor 接入流程、海思与联咏平台 VI 接入方法、可见光 ISP 核心模块(曝光、白平衡、降噪、宽动态),以及 IMX224 帧率异常等典型问题的排查思路。适合从事安防监控、机器视觉、嵌入式图像采集的工程师阅读。 --- ## 一、课程概览 本次 VI&ISP 模块培训分为四个单元: | 单元 | 内容 | 目标 | |------|------|------| | 1 | 可见光 ISP 基础知识 | 理解 ISP 核心模块原理 | | 2 | VI 接入模块 | 熟悉海思、联咏平台 VI 接入方法 | | 3 | 常见问题排查 | 掌握典型故障的排查思路 | | 4 | 总结回顾 | 串联知识体系 | --- ## 二、视频接口协议 VI 模块通过多种接口接收 Sensor 输出的原始视频数据,以下是主流接口的对比: ### 2.1 MIPI Rx MIPI Rx(Mobile Industry Processor Interface Receiver)通过低电压差分信号接收原始视频数据(BAYER/RGB),并转化为 DC 时序传递给 VICAP 模块。 **核心要点:** - 支持 MIPI D-PHY、LVDS、HiSPi 等串行视频信号输入 - 1 对差分随路时钟 + 1~4 对数据 Lane - 只完成接口时序转换,不处理图像数据格式 - 基于 MIPI CSI-2 协议,分为 5 层:应用层、组包/解包层、底层协议层、通道管理层、物理层 **硬件连接示例:** 1 对时钟 Lane + 2 对数据 Lane(2-Lane 模式) ### 2.2 LVDS LVDS(Low Voltage Differential Signaling)通过同步码区分消隐区和有效数据,支持两种同步方式: | 同步方式 | 说明 | |----------|------| | SOF/EOF + SOL/EOL | 帧起始/结束 + 行起始/结束 | | SAV/EAV | 有效/无效像素数据的开始/结束标记 | 同步码由 4 个字段组成,位宽与像素数据一致,前 3 个为固定基准码字,第 4 个由 Sensor 厂家决定。 ### 2.3 DC(Digital Camera)接口 DC 时序传输需要外部时钟信号,典型配置: - 1 个 CLK 时钟信号 - HS/VS 行场同步信号 - 16 根数据线 ### 2.4 BT.656 / BT.1120 | 标准 | 用途 | 时钟频率 | 说明 | |------|------|----------|------| | BT.656 | PAL/NTSC 标清视频 | 27MHz | 逐行 YUV422 | | BT.1120 | 高清视频 | 74.25MHz | Y/C 分开输入,16 根数据线 | ### 2.5 接口选择建议 | 应用场景 | 推荐接口 | |----------|----------| | 热成像 | DC / LVDS | | 可见光 | MIPI / LVDS | --- ## 三、Sensor 基础知识 ### 3.1 通信与数据接口 - **通信接口**:SPI、I2C(用于配置 Sensor 寄存器) - **数据接口**:MIPI、LVDS、PARALLEL - **时钟**:可用晶振或平台时钟,多目设备需保证时钟同源 ### 3.2 主从模式 | 模式 | HS/VS 方向 | |------|-----------| | 主模式 | Sensor 输出 HS/VS | | 从模式 | 平台提供 HS/VS | ### 3.3 关键信号定义 | 信号 | 说明 | |------|------| | **PCLK** | 像素点同步时钟,每个 PCLK 对应一个像素点(~48MHz),需做包地处理 | | **MCLK** | 外部时钟输入,由主控或晶振提供(~24MHz) | | **VSYNC** | 帧同步信号,一帧一个,频率 ~30Hz | | **HSYNC** | 行同步信号,频率 ~几十 KHz | --- ## 四、海思 VI 模块架构 ### 4.1 整体结构 ``` Sensor → MIPI Rx → VI DEV(时序解析)→ VI PIPE(ISP 流水线)→ VI CHAN(通道处理) ``` | 模块 | 功能 | |------|------| | **VI DEV** | 负责时序解析,支持 MIPI/LVDS/BT.1120/BT.656/BT.601/DC 等接口 | | **VI PIPE** | 包含 ISP 处理功能,对图像数据进行流水线处理,输出 YUV 格式 | | **VI CHAN** | 物理通道:帧率控制、裁剪、镜像、旋转、图层叠加、电子防抖 | | **扩展通道** | 物理通道的扩展,具备缩放、裁剪、鱼眼矫正功能 | ### 4.2 海思平台接入 Sensor 流程 海思平台接入一个 Sensor 涉及 **ISP 库** 和 **DSP 库** 两部分的修改: **ISP 库修改:** - Sensor 寄存器配置(`sensor_os05_ctrl.c`) - MIPI 属性、VI DEV 属性、ISP 属性(`sensor_os05_vin_attr.c`) - I2C 和时钟配置(`isp_func_ipc.c`) **DSP 库修改:** - VI PIPE 和 CHAN 属性(`dsp_vi_priv.c`) ### 4.3 联咏(NT)平台接入流程 联咏平台接入一个 Sensor 涉及 **Sensor 驱动** 和 **DSP** 修改: **Sensor 驱动(位于 DSP 库中):** - Sensor 寄存器配置 - MIPI 属性、VI DEV 属性、I2C 和时钟配置(`sen_os05a10.c`) **DSP 修改:** - VI CHAN 属性(`dsp_vi_def.h`) --- ## 五、Sensor 接入详细步骤 ### 5.1 配置 Sensor(以 OS05 为例) 1. **确定基本参数**:时钟 24MHz、分辨率 2688×1944、MIPI 接入、RAW 10bit 2. **获取寄存器序列**:根据分辨率、帧率、线性/宽动态、主从模式、时钟、接口类型、Lane 数等信息向 Sensor 厂商 FAE 索取 3. **确认寄存器读写方式**:I2C/SPI 及设备号 4. **从硬件原理图获取**:接口类型、Lane 数、时钟管脚、读写方式 ### 5.2 时钟配置 参考海思寄存器文档,以 OS05 为例: ```c // 基地址 0x1201,寄存器 0x0114,组合地址 0x12010114 #define VI_SENSOR_CLK_REG 0x12010114 ISP_SAMPLE_SYS_SetReg(VI_SENSOR_CLK_REG, 0x14141414); // SENSOR_INCLK24M ``` ### 5.3 VI 模块配置(三步走) 1. **配置 MIPI**:设定全局 Lane 分布模式(HS MODE) 2. **配置 VI**:包括 DEV、PIPE、CHAN 属性 3. **配置 ISP**:图像信号处理参数 **MIPI 属性(DEV ATTR)关键参数:** - 输入接口类型 - 接口传输速率 - 分辨率 - MIPI/LVDS 属性 - Lane ID:未使用的 Lane 配为 -1 ### 5.4 调试与验证 | 命令 | 用途 | |------|------| | `cat /proc/umap/hi_mipi` | 查看 MIPI 状态 | | `cat /proc/umap/vi` | 查看 VI 状态 | | `cat /proc/hdal/vcap/info` | 查看 Sensor 配置是否生效 | | `echo dbg 0 0x20 > /proc/ctl_sen/cmd` | 查看中断个数和时间间隔 | | `echo dbg 0 0x1 > /proc/ctl_sen/cmd` | 查看当前 Sensor 配置状态 | | `echo dbgtype 0 1 > /proc/nvt_ctl_sie/cmd` | 查看 SIE 状态(可见光+热成像) | --- ## 六、G5 平台 Sensor 驱动 ### 6.1 驱动编译 Sensor 驱动源代码位于 CBB 组件中,分为可见光 `cbb_sensorDrv` 和热成像 `cbb_ifrSensorDrv`。 ```makefile # 修改 Makefile SDK_PATH = /data1/work/G5_SDK/hik_NT9852x_linux_sdk_v2.04.003 export KERNEL_DIR = /data1/work/G5_SDK/hik_NT9852x_linux_sdk_v2.04.003/BSP/linux-kernel # 编译 make # 输出: sensorDrv.ko 和 ifrSensorDrv.ko ``` ### 6.2 关键配置参数 **电源配置:** ```c typedef struct _SEN_POWER { UINT32 mclk; // MCLK 时钟来源 UINT32 pwdn_pin; // 上电管脚 UINT32 rst_pin; // 复位管脚 UINT32 rst_time; // 复位时间 (ms) UINT32 stable_time; // 复位到 I2C 可读写时间 (ms) } SEN_POWER; static SEN_POWER sen_power[CTL_SEN_ID_MAX] = { {CTL_SEN_CLK_SEL_SIEMCLK, CTL_SEN_IGNORE, 0x46, 1, 1} }; ``` **I2C 配置:** ```c #define SEN_I2C_ADDR 0x6C >> 1 static SEN_I2C sen_i2c[CTL_SEN_ID_MAX] = {{SEN_I2C_ID_1, SEN_I2C_ADDR}}; ``` **Mode 配置:** ```c static CTL_SENDRV_GET_MODE_BASIC_PARAM mode_basic_param[SEN_MAX_MODE] = { { CTL_SEN_MODE_1, // Sensor 模式 CTL_SEN_IF_TYPE_MIPI, // 接入协议 CTL_SEN_DATA_FMT_RGB, // 像素格式 CTL_SEN_MODE_LINEAR, // 线性模式(宽动态: CTL_SEN_MODE_STAGGER_HDR) 3000, // 帧率 (30fps) 1, // 帧数目(线性=1,宽动态=2) CTL_SEN_STPIX_B, // 初始像素点 CTL_SEN_PIXDEPTH_10BIT, // 10bit {2688, 1944}, // 输出图像大小 {{0, 0, 2688, 1944}}, // 有效数据位置 CTL_SEN_RATIO(4, 3), // 宽高比 {1000, 248000}, // Sensor 支持的增益范围 }, }; ``` --- ## 七、可见光 ISP 核心模块 ### 7.1 曝光(AE) AE(Auto Exposure)控制进入感光元件的光量,由**光圈、快门、增益**三要素组合控制。 **曝光三要素:** | 参数 | 效果 | |------|------| | 快门 | 越大 → 画面越暗 | | 光圈 | 越大 → 画面越亮 | | 增益 | 越大 → 画面越亮 | **衍生前端参数:** - 亮度 - 曝光模式(快门/增益/光圈) - 强光抑制(基于高亮区域曝光) - 背光补偿(基于感兴趣区域曝光) - 防红外过爆 ### 7.2 白平衡(AWB) AWB(Automatic White Balance)用于在不同色温下将白色物体还原为白色。 - 路灯色温较低(偏暖黄) - 天空色温较高(偏蓝) - 支持多种白平衡模式以适应特殊场景 ### 7.3 降噪 | 类型 | 原理 | 优缺点 | |------|------|--------| | **2D 降噪** | 空域处理:像素与周围像素平均 | 简单但会造成画面模糊 | | **3D 降噪** | 时域处理:考虑帧间关系,像素时域平均 | 效果更好但计算量大 | 当前大部分平台通过 VPSS/VPRC(IME) 实现降噪,DSP 开放接口,ISP 使用 Pqtools 等上位机工具调整参数。 ### 7.4 宽动态(WDR) 宽动态技术用于在强烈明暗对比场景下让摄像机看清更多细节。 | 类型 | 说明 | |------|------| | **Build-in** | Sensor 内部做好融合,平台解压缩 | | **DOL-2** | 2 帧宽动态,Sensor 输出长短帧,平台负责融合 | | **DOL-3** | 3 帧宽动态,Sensor 输出长中短帧,平台融合 | > **目前主流方案为 2 帧宽动态(DOL-2)** --- ## 八、常见问题排查 ### 排查方法论 ``` 发送端 → 传输链路 → 接收端 ↓ ↓ ↓ 寄存器 中断/错误 宽高正确性 序列匹配 MIPI错误 平台调试信息 硬件信号 时序匹配 管脚复用 ``` ### 8.1 IMX224 帧率不足问题(典型案例) **问题描述:** IMX224 Sensor 图像正常,但偶现重新上电后帧率异常,仅 20 帧左右。 **排查思路:** **Step 1:尝试三种复位方式复现** - 硬复位:重新上电 - 软复位:仅刷一遍 Sensor 序列(`dspdebug -setIspReg 3 1`) - 重新配 MIPI + 刷 Sensor 序列(`dspdebug -setdsptest 149 1`) 三种方式都有概率复现问题,且设备运行一段时间后也会异常。 **Step 2:检查 MIPI 错误累计** ``` cat /proc/umap/hi_mipi ``` 关键错误类型: | 错误类型 | 说明 | |----------|------| | `vc0CRC` | VC0 通道数据 CRC 错误计数 | | `vc0OrderErr` | VC0 帧序错误计数 | | `vc0NmatCnt` | VC0 通道帧起始/结束短包不匹配计数 | | `HCntErr` | Header 的 ECC 无法纠错的错误计数 | **发现:** 当 `vc0OrderErr` 错误增加时,会出现帧率异常。 **Step 3:缩小排查范围** 发现宽动态模式下没有报错、不丢帧。对比宽动态与普通模式不同的 20 几个寄存器,结合数据手册逐个核查。 **根因:** 宽动态下配置的是 2-Lane 的值,而线性模式下配置的是初始化值(1-Lane),应该统一调整为 2-Lane 的值。 **解决:** 修改线性模式下的 Lane 配置为 2-Lane 后,MIPI 错误累计归零,帧率异常问题解决。 **经验总结:** 时序不匹配是 MIPI 接入问题的核心原因,排查方向为: - **软件问题**:Sensor 寄存器配置异常 - **硬件问题**:上电时序异常 --- ## 九、总结回顾 本次培训覆盖了 VI&ISP 模块的完整知识体系: 1. **VI 硬件接口**:MIPI、LVDS、DC、BT.656、BT.1120 等接口的原理与选型 2. **VI 接入流程**:Sensor 配置 → MIPI 配置 → VI DEV/PIPE/CHAN 配置 → ISP 配置 3. **常见问题排查**:从发送→传输→接收的三层排查法,MIPI 错误累计分析 4. **调试方法**:`/proc` 文件系统命令查看各模块状态 --- ## 参考资料 - [MIPI CSI-2 协议详解](https://www.cnblogs.com/linhaostudy/p/11334435.html) - HiSilicon Hi3559A User Guide - HiMPP V4.0 媒体处理软件开发参考 - MIPI 使用指南 --- *本文基于 VI&ISP 模块培训课件整理,主讲人:童佳乐。如有遗漏或错误,欢迎指正。*