HI3516DV300 图像输入

HI3516DV300 图像输入

易百纳的一个开发板,以及GC2053的摄像头。
HI3516DV300 图像输入_第1张图片

硬件

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

HI3516DV300 图像输入_第6张图片

HI3516DV300 图像输入_第7张图片
4. 摄像头
GC2053 是一个遵循MIPI CSI标准的2 lane摄像头。通过I2C可以控制对其进行控制。

HI3516DV300 图像输入_第8张图片
HI3516DV300 图像输入_第9张图片

程序

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

HI3516DV300 图像输入_第11张图片
基于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}
    }
  }
};

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};

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}
};

ISP

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

HI3516DV300 图像输入_第12张图片

总结

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

其它

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

参考文章

  1. camera的mipi-csi接口简单理解
  2. 图像bayer格式介绍

你可能感兴趣的:(海思学习笔记,图像处理)