海思SD3403/SS928开发(三)红外DC接入

文章详细阐述了视频接入的参数,包括支持的接口类型、分辨率和时序。在复用寄存器部分,展示了针对DC接口的配置代码。此外,还提到了根据不同接口类型选择相应的配置,并涉及加载驱动和MPP媒体处理软件的设定,以实现视频数据的处理和输出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、视频接入

参数说明:视频输入接口

支持 8-Lane image sensor 串行输入,支持 MIPI/LVDS/Sub-LVDS/HiSPi 多种接口
支持 2x4-Lane 或 4x2-Lane 等多种组合,最高支持 4 路 sensor 串行输入
最大分辨率 8192 x 8192
支持 8/10/12/14 Bit RGB Bayer DC 时序视频输入,时钟频率最高 150MHz
支持 BT.601、BT.656、BT.1120 视频输入接口
支持主流 CMOS 电平热成像传感器

数字摄像头(DC)接口时序
  • 水平时序
    VICAP 接数字摄像头时,VI_HSYNC_VD 表示数据有效信号,数据有效信号极性可
    配,水平时序所示。
    在这里插入图片描述

  • 垂直时序
    VICAP 支持两种垂直时序脉冲方式和行有效方式,如下图所示。垂直同步极性可配

    数字摄像头垂直时序脉冲方式
    在这里插入图片描述
    数字摄像头垂直时序行有效方式
    在这里插入图片描述
    对于 VICAP 内部处理来说,这两种时序相同,VICAP 内部检测到一个上升沿或下降
    沿,这认为是一帧的开始,然后检测数据有效信号,来判断当前数据是否有效。

二、复用寄存器

  • 管脚复用
  • 查看手册mipi dev/vi dev/vi chn/vi pipe/所支持的编号;
  • mipi配置,设置接入模式为cmos;(dc接口不需要lain id)
  • 设置vi离线还是在线模式;
  • 设置vi属性,使能vi设备;
  • vi绑定pipe;
  • 设置pipe属性,创建并开始pipe;
  • 设置通道属性,使能通道;
详细说明
  • 参考SS928V100 VI 输入场景详细说明.xlsx 中DC接入需要复用的寄存器

在这里插入图片描述

  • 复用寄器
static void vi_DC_mode_mux(void)
{
    void *iocfg2_base = sys_config_get_reg_iocfg2();

    sys_writel(iocfg2_base + 0x0158, 0x0206); /* VI_CLK */
    sys_writel(iocfg2_base + 0x0168, 0x0005); /* VI_VS */
    sys_writel(iocfg2_base + 0x0170, 0x0005); /* VI_HS */
    sys_writel(iocfg2_base + 0x016C, 0x0006); /* VI_DATA0 */
    sys_writel(iocfg2_base + 0x0178, 0x0006); /* VI_DATA1 */
    sys_writel(iocfg2_base + 0x017C, 0x0006); /* VI_DATA2 */
    sys_writel(iocfg2_base + 0x0174, 0x0006); /* VI_DATA3 */
    sys_writel(iocfg2_base + 0x0160, 0x0206); /* VI_DATA4 */
    sys_writel(iocfg2_base + 0x015C, 0x0206); /* VI_DATA5 */
    sys_writel(iocfg2_base + 0x0164, 0x0206); /* VI_DATA6 */
    sys_writel(iocfg2_base + 0x0154, 0x0206); /* VI_DATA7 */
    sys_writel(iocfg2_base + 0x0194, 0x0006); /* VI_DATA8 */
    sys_writel(iocfg2_base + 0x0190, 0x0006); /* VI_DATA9 */
    sys_writel(iocfg2_base + 0x0184, 0x0006); /* VI_DATA10 */
    sys_writel(iocfg2_base + 0x0180, 0x0006); /* VI_DATA11 */
    sys_writel(iocfg2_base + 0x0188, 0x0006); /* VI_DATA12 */
    sys_writel(iocfg2_base + 0x018C, 0x0006); /* VI_DATA13 */
}
  • 选择类型
static void vi_pin_mux(int vi_intf_type)
{
    switch (vi_intf_type) {
        case VI_MIPI_RX_MODE:
            mipi_rx_pin_mux(MIPI_RX_0);
            mipi_rx_pin_mux(MIPI_RX_1);
            break;
        case VI_CMOS_BT1120_MODE:
            mipi_rx_pin_mux(MIPI_RX_0);
            vi_bt1120_mode_mux();
            break;
        case VI_THERMO_MODE:
            mipi_rx_pin_mux(MIPI_RX_0);
            thermo_sensor_pin_mux();
            break;
        case VI_THERMO_T3_MODE:
            mipi_rx_pin_mux(MIPI_RX_0);
            thermo_t3_pin_mux();
            break;
        case VI_MODE_1_DC:
            mipi_rx_pin_mux(MIPI_RX_0);
            vi_DVP_mode_mux();
sys_config_print("==========   DVP   ==========\n");
            break;
        default:
            break;
    }
}
  • 选择COMS
static int is_coms(const char *name, unsigned int name_len)
{
    unsigned int len;

    if (name_len == 0) {
        sys_config_print("name len is 0!\n");
        return 0;
    }
    len = SENSOR_NAME_LEN;

    if ((strncmp("bt1120", name, len) == 0) || (strncmp("bt656", name, len) == 0) ||
        (strncmp("bt601", name, len) == 0) || (strncmp("DC", name, len) == 0)) 
    {
        return 1;
    } else {
        return 0;
    }
}

三、加载驱动

在这里插入图片描述

四、修改mpp代码

根据 MPP 媒体处理软件 V5.0 开发参考.pdf中所说的绑定关系确定DC的videv、MIPI选择3
在这里插入图片描述

  • comm_vi配置
static ot_vi_dev_attr g_DC_dev_attr = {
    .intf_mode = OT_VI_INTF_MODE_DC,
    /* Invalid argument */
    .work_mode = OT_VI_WORK_MODE_MULTIPLEX_1,   // 1 路复合工作模式
    /* mask component */    
    .component_mask = {0xFF0000, 0x0},
    .scan_mode = OT_VI_SCAN_PROGRESSIVE,    // VI 输入为逐行图像        OT_VI_SCAN_INTERLACED // VI 输入为隔行图像
    /* Invalid argument */
    .ad_chn_id = {-1, -1, -1, -1},
    /* data seq */
    .data_seq = OT_VI_DATA_SEQ_UYVY,


    /* sync param */
    .sync_cfg = {
        .vsync           = OT_VI_VSYNC_PULSE,           // 垂直同步脉冲模式,即一个脉冲到来表示新的一帧或一场
        // .vsync           = OT_VI_VSYNC_FIELD,           // DC 模式下表示行有效信号
        .vsync_neg       = OT_VI_VSYNC_NEG_HIGH,        // OT_VI_VSYNC_FIELD 表示偶数场的 vsync 信号为高电平  // OT_VI_VSYNC_PULSE 表示vsync 同步脉冲为正脉冲
        .hsync           = OT_VI_HSYNC_VALID_SIG,       // 水平同步数据有效信号     // OT_VI_HSYNC_PULSE
        .hsync_neg       = OT_VI_HSYNC_NEG_HIGH,        // OT_VI_HSYNC_VALID_SIG 表示高电平表示有效数据
        .vsync_valid     = OT_VI_VSYNC_VALID_SIG,       // 表示垂直同步时序行有效信号      // OT_VI_VSYNC_NORM_PULSE 表示垂直有效同步标识
        .vsync_valid_neg = OT_VI_VSYNC_NORM_PULSE,  // OT_VI_VSYNC_VALID_SIG 表示高电平为有效信号
        .timing_blank    = {
            //水平前消隐区宽度   水平有效宽度    水平后消隐区宽度
            /* hsync_hfb      hsync_act     hsync_hhb */
            0,                0,            0,
            //帧图像或隔行输入   帧图像或隔行     帧图像或隔行输入时
            //时奇场图像的垂直   输入时奇场垂     奇场垂直后消隐区高
            //前消隐区高度      直有效高度       度
            /* vsync0_vhb     vsync0_act     vsync0_hhb */
            0,                0,            0,
            //隔行输入时偶场垂   隔行输入时偶       隔行输入时偶场垂
            //直前消隐区高度     场垂直有效高度     直后消隐区高度
            /* vsync1_vhb     vsync1_act     vsync1_hhb */
            0,                0,              0
        }
    },

    /* data type */
    .data_type = OT_VI_DATA_TYPE_RAW, //OT_VI_DATA_TYPE_YUV,   //OT_VI_DATA_TYPE_RAW

    /* data reverse */
    .data_reverse = TD_FALSE,

    /* input size */
    .in_size = {640, 512},

    /* data rate */
    .data_rate = OT_DATA_RATE_X1,
};
static combo_dev_attr_t g_mipi_DC_attr =
{
    .devno         = 0,
    .input_mode    = INPUT_MODE_MIPI,  //    /* input mode */
    .data_rate = MIPI_DATA_RATE_X1,
    .img_rect = {0, 0, 640, 512},
    .mipi_attr =
    {
        DATA_TYPE_RAW_12BIT,
        OT_MIPI_WDR_MODE_NONE,
        {0, 1, 2, 3, 4, 5, 6, 7}
    }
};
  • sample_vi_cfg配置

在这里插入图片描述
根据输入格式选择不同的类型
例如:

vi_cfg[i].pipe_info[j].pipe_attr.pixel_format                   = OT_PIXEL_FORMAT_YUV_400;
vi_cfg[i].pipe_info[j].isp_need_run 							= TD_FALSE;
vi_cfg[i].pipe_info[j].pipe_attr.isp_bypass                     = TD_TRUE;          // yuv true

vi_cfg[i].pipe_info[j].chn_info[0].chn_attr.pixel_format        = OT_PIXEL_FORMAT_YUV_400;

配置完vpss和venc就可以输出视频了

五、输出红外视频

在这里插入图片描述

### 关于海思SD3403SS928芯片与MobileNet模型的兼容性和应用 #### MobileNet模型概述 MobileNet 是一种专门为移动设备设计的小型卷积神经网络架构,旨在实现高效计算的同时保持较高的准确性。该系列模型通过引入深度可分离卷积来减少参数数量并加速推理过程。 #### 海思SD3403/SS928芯片特性 海思SD3403/SS928是一款专为监控市场打造的专业Ultra-HD智能IP摄像机SOC,具备强大的视频处理能力和集成度高的特点[^1]。这类SoC通常集成了NPU(神经网络处理器),用于支持AI算法运行,特别是图像识别类任务。 #### 兼容性分析 鉴于海思SD3403/SS928内置有专门针对视觉处理优化过的硬件单元以及可能存在的专用AI加速器,理论上能够很好地适配像MobileNet这样轻量级且高效的CNN结构。具体来说: - **资源消耗低**:由于MobileNet本身的设计理念就是降低运算复杂度,在功耗敏感的应用场景下非常适合部署到此类嵌入式平台上; - **实时性强**:借助SoC内部高性能DSP/NPU的支持,可以满足大多数情况下对于快速响应的要求; - **灵活性高**:即使默认配置不完全匹配需求,也可以通过对固件编程调整以适应特定应用场景下的性能表现; 因此,基于上述几点理由,可以说海思SD3403/SS928与MobileNet之间存在良好的兼容性基础,并能在实际项目中发挥各自优势达成预期效果。 #### 实际应用案例 在安防监控领域内,利用这两者的组合可以帮助构建更加智能化的安全防护体系。例如,可以通过训练好的MobileNet模型来进行人员检测、行为分析等功能扩展,从而提升整个系统的实用价值和服务水平。 ```python import tensorflow as tf from PIL import Image import numpy as np # 加载预训练的MobileNet模型 model = tf.keras.applications.MobileNetV2(weights='imagenet') def preprocess_image(image_path): img = Image.open(image_path).resize((224, 224)) array = np.array(img) / 255. input_batch = array[np.newaxis, ...] return input_batch image_data = preprocess_image('test.jpg') predictions = model.predict(image_data) print(predictions) ``` 此代码片段展示了如何加载一个预先训练好的MobileNet V2模型并对输入图片数据进行预测操作。虽然这段Python脚本主要用于说明目的而非直接适用于目标平台,但它提供了一个基本框架供开发者参考以便移植至具体的嵌入式环境中执行相似的任务逻辑。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值