VIISP 模块培训总结:从接口协议到实战排查
# VIISP 模块培训总结从接口协议到实战排查 **摘要**本文系统梳理了视频输入VI与图像信号处理ISP模块的核心知识体系涵盖 MIPI/LVDS/DC/BT.656/BT.1120 等视频接口协议、Sensor 接入流程、海思与联咏平台 VI 接入方法、可见光 ISP 核心模块曝光、白平衡、降噪、宽动态以及 IMX224 帧率异常等典型问题的排查思路。适合从事安防监控、机器视觉、嵌入式图像采集的工程师阅读。 --- ## 一、课程概览 本次 VIISP 模块培训分为四个单元 | 单元 | 内容 | 目标 | |------|------|------| | 1 | 可见光 ISP 基础知识 | 理解 ISP 核心模块原理 | | 2 | VI 接入模块 | 熟悉海思、联咏平台 VI 接入方法 | | 3 | 常见问题排查 | 掌握典型故障的排查思路 | | 4 | 总结回顾 | 串联知识体系 | --- ## 二、视频接口协议 VI 模块通过多种接口接收 Sensor 输出的原始视频数据以下是主流接口的对比 ### 2.1 MIPI Rx MIPI RxMobile Industry Processor Interface Receiver通过低电压差分信号接收原始视频数据BAYER/RGB并转化为 DC 时序传递给 VICAP 模块。 **核心要点** - 支持 MIPI D-PHY、LVDS、HiSPi 等串行视频信号输入 - 1 对差分随路时钟 1~4 对数据 Lane - 只完成接口时序转换不处理图像数据格式 - 基于 MIPI CSI-2 协议分为 5 层应用层、组包/解包层、底层协议层、通道管理层、物理层 **硬件连接示例** 1 对时钟 Lane 2 对数据 Lane2-Lane 模式 ### 2.2 LVDS LVDSLow Voltage Differential Signaling通过同步码区分消隐区和有效数据支持两种同步方式 | 同步方式 | 说明 | |----------|------| | SOF/EOF SOL/EOL | 帧起始/结束 行起始/结束 | | SAV/EAV | 有效/无效像素数据的开始/结束标记 | 同步码由 4 个字段组成位宽与像素数据一致前 3 个为固定基准码字第 4 个由 Sensor 厂家决定。 ### 2.3 DCDigital 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 PIPEISP 流水线→ 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 AEAuto Exposure控制进入感光元件的光量由**光圈、快门、增益**三要素组合控制。 **曝光三要素** | 参数 | 效果 | |------|------| | 快门 | 越大 → 画面越暗 | | 光圈 | 越大 → 画面越亮 | | 增益 | 越大 → 画面越亮 | **衍生前端参数** - 亮度 - 曝光模式快门/增益/光圈 - 强光抑制基于高亮区域曝光 - 背光补偿基于感兴趣区域曝光 - 防红外过爆 ### 7.2 白平衡AWB AWBAutomatic 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 寄存器配置异常 - **硬件问题**上电时序异常 --- ## 九、总结回顾 本次培训覆盖了 VIISP 模块的完整知识体系 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 使用指南 --- *本文基于 VIISP 模块培训课件整理主讲人童佳乐。如有遗漏或错误欢迎指正。*