• HI3516DV300 图像输入


    HI3516DV300 图像输入

    易百纳的一个开发板,以及GC2053的摄像头。
    在这里插入图片描述

    硬件

    1. 海思
      海思sensor接口如下,用的是差分信号,共4对数据线(或者说4条lane),两对差分时钟。
      在这里插入图片描述
    2. 连接器
      海思核心板和扩展板之间通过板件连接器相连,数据线和时钟线在之间连接。另外注意两个I2C也被接过去了,用于控制sensor。
      核心板:
      在这里插入图片描述
      扩展板:
      在这里插入图片描述
    3. 扩展板
      由于要对接两个摄像头,采用2lane+2lane的方式,一个时钟和2条lane对接一个摄像头,具体的可以参考海思手册。出了两个接口。对接的是MIPI CSI接口
      在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述
    4. 摄像头
    GC2053 是一个遵循MIPI CSI标准的2 lane摄像头。通过I2C可以控制对其进行控制。

    在这里插入图片描述
    在这里插入图片描述

    程序

    没找到摄像头数据是怎么进来的资料,只能从板子里反推了。MIPI进的是RAW10的数据,到PIPE被转为RGB(有些PIPE不支持yuv),最后再在VI chn转为sp422出去。
    在这里插入图片描述

    在这里插入图片描述
    基于VIO的第一个例子函数进行修改:
    在这里插入图片描述

    MIPI

    MIPI模式,进RAW10的数据。
    lane的划分模式用第二个,第一个设备就用0,2,第二个用1,3。

    combo_dev_attr_t MIPI_GC2053_ATTR =
    {
      /* input mode */
      .devno = 0,
      .input_mode = INPUT_MODE_MIPI,  
      .data_rate = MIPI_DATA_RATE_X1,
      .img_rect = {0, 0, 1920, 1080},
      {
        .mipi_attr = 
        {
            DATA_TYPE_RAW_10BIT, 
            HI_MIPI_WDR_MODE_NONE, 
            {0, 2, -1, -1}
        }
      }
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    VI DEV

    VI设备和MIPI好像差不多,由于是10bit的,掩码前10位为1,类型也是RGB。

    VI_DEV_ATTR_S DEV_ATTR_GC2053_1080P_BASE =
        {
            /* interface mode */
            VI_MODE_MIPI,
            /* multiplex mode */
            VI_WORK_MODE_1Multiplex,
            /* r_mask    g_mask    b_mask*/
            {0xffc00000, 0x0000000},
            /* progessive or interleaving */
            VI_SCAN_PROGRESSIVE, /*逐行*/
            /*AdChnId*/
            {-1, -1, -1, -1},
            /*enDataSeq, only support yuv*/
            VI_DATA_SEQ_UVUV,
            /* synchronization information */
            {
                /*port_vsync   port_vsync_neg     port_hsync        port_hsync_neg        */
                VI_VSYNC_PULSE,
                VI_VSYNC_NEG_HIGH,
                VI_HSYNC_VALID_SINGNAL,
                VI_HSYNC_NEG_HIGH,
                VI_VSYNC_NORM_PULSE,
                VI_VSYNC_VALID_NEG_HIGH,
                /*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}},
            /* input data type */
            VI_DATA_TYPE_RGB,
            /* bReverse */
            HI_FALSE,
            /* input size */
            {1920, 1080},
            {{
                 {1920, 1080},
             },
             {VI_REPHASE_MODE_NONE, VI_REPHASE_MODE_NONE}},
            {WDR_MODE_NONE, 1080},
            DATA_RATE_X1};
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42

    PIPE

    像素格式这里要选择bayer格式,是相机的原始数据格式。

    VI_PIPE_ATTR_S PIPE_ATTR_GC2053_10800P_RGB = {
        /* bBindDev bYuvSkip */
        VI_PIPE_BYPASS_NONE,  
        HI_FALSE,  /*YUV skip enable */
        HI_FALSE,  /* ISP Bypass */
        1920,
        1080,
        PIXEL_FORMAT_RGB_BAYER_10BPP,
        COMPRESS_MODE_NONE,
        DATA_BITWIDTH_10,    /* bit_width width: 16 illegal, should be  when YUV!*/
        HI_FALSE,
        {PIXEL_FORMAT_RGB_BAYER_10BPP, DATA_BITWIDTH_10, VI_NR_REF_FROM_RFR,
         COMPRESS_MODE_NONE},
        HI_FALSE,
        {-1, -1}
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    ISP

    这里的这一步主要是配置摄像头,输出RAW格式的数据,否则是没有数据输出或者输出的数据不是我们相要的(要看厂家的手册)。用的是卖家的代码,这里主要配置一个sensor类型就可以了。

    在这里插入图片描述

    总结

    基于海思的一个VIO的例子,进行sensor配置信息的添加,完成了图像的输入。使用ISP配置GC2053输出10bit的RAW数据(Bayer),VI接收的时候是RGB。

    其它

    做了一半的时候发现是有GC2053的配置的,错怪了卖家。还有就是ISP获取结构体有一个函数没有传感器类型的枚举值,而是一个id,实际的传感器类型是通过Makfile传过来的。总之,看代码的时候还是要认真一点。

    参考文章

    1. camera的mipi-csi接口简单理解
    2. 图像bayer格式介绍
  • 相关阅读:
    【云原生 | 43】快速搭建Docker Registry私有仓库
    优雅而高效的JavaScript——try...catch语句(js异常处理)
    CSP-2023 复赛游记
    win10系统下使用onnxruntime部署yolov5模型
    初学Vue(全家桶)-第19天(vue3):vue3响应式原理
    总结了30段极简的Python代码!(一)
    TiDB Lightning 错误处理功能
    【redis-03】redis注解的使用解析
    精品基于Uniapp+SSM实现的Android平台的健康管理系统
    进程地址空间
  • 原文地址:https://blog.csdn.net/weixin_45090728/article/details/127874698