您的当前位置:首页正文

海思2232sensor调试

2024-06-21 来源:年旅网


调试sc2232总结

1、驱动调试方法:

(1)首先,sc2232这款sensor厂家提供了3个配置文件config_entry.ini、sc2232_1080p25.ini、sc2232_1080p25_2lane.ini,另外两个驱动代码文件sc2232_cmos.c、sc2232_sensor_ctl.c等。

其中,sc2232_cmos.csc2232_cmos.c主要实现 ISP 需要的回调函数,这些回调函数中包含了 sensor 的适配算法,如注册了3a库回调函数,ae初始化参数,增益、帧率等初始化算法。

sc2232_sensor_ctl.c用于底层驱动控制,主要实现sensor的读写和初始化动作,也就是读写寄存器,主要是根据datasheet文档进行的代码开发。

(2)其次,讲讲3个配置文件,其中config_entry.ini是所有配置的入口,内容如下:

首先设置UserMode参数,该参数用于选择哪一种模式,0表示mode.0;1表示mode.1;这里刚开始我都不知道,后来慢慢研究才明白的。

然后,sc2232_1080p25.ini这个文件代表的是datasheet里面的DVP并行视频端口模式,也就是CMOS模式,这种模式是12-bit并行数据。

sc2232_1080p25_2lane.ini这个文件代表的是datasheet里面的MIPI模式,也就是串行视频端口模式,只是8/10bit,1/2lane串行输出。

(lane解释:用于连接发送端和接收端的一对高速差分线,既可以是时钟lane,也可以是数据lane。)

可以使用beyondcompare对比这两个文件,只有个别参数配置不一样。

(3)stream工具的使用方法

Stream工具需要上面说到的3个ini配置文件,当配置好参数之后,在stream的configs目录下建立一个sc2232目录,把ini配置文件放到目录下。还需要复制两个自适应配置文件,分别是普通模式和wdr模式的,当然如果厂家提供有的话就不用复制其他方案的了。这个配置文件在sc2232_1080p25.ini和sc2232_1080p25_2lane.ini里面可以设置是否使用。

最重要的是还要把前面说的两个.c驱动代码文件编译出来的的libsns_sc2232.so文件拷贝到libs目录下,这样stream才能真正调用了驱动代码使他生效。

好了,准备工作做好了,运行Stream工具之前要先kill掉固件程序,还要把watchdog

跑起来,所以执行

killall -9 guard && killall -9 core && /huamai/app/script/watchdog.sh > /dev/null &

然后挂载stream工具到设备,当然还要把pqtool也要一起挂载,方便调节参数。

运行stream:

./HiIspTool.sh -a sc2232

当执行ps有以下进程表示运行成功:

再运行windows端的ITTP_Stream.exe客户端进行连接,就可以看到视频了,前提是驱动和参数都没有问题。

(4)I2C寄存器值的调试

. 寄存器可以使用命令读写:usage: i2c_write . sample:

. 0x1 0x56 0x0 0x28 2 2.

. 0x1 0x56 0x0 0x28. default reg_width and data_width is 1.

. usage: i2c_read

. sample:

. 0x1 0x56 0x0 0x10 2 2.

. 0x1 0x56 0x0 0x10 2 2 2.

. 0x1 0x56 0x0 0x10. default reg_width, data_width, reg_step is 1.

i2c_num: ls /dev/i2c*, 一般有0x0 和 0x1

dev_addr: imx290的iic地址为0x34(固定)

reg_addr: 开始寄存器地址

reg_addr_end: 结束寄存器地址

reg_width: 寄存器地址字节数

data_width: 数据字节数

但是命令读写太慢了,而且容易输错,海思pqtool提供了专门的读写I2C寄存器的工具

这个工具读写方便效率高,操作简单。

2、固件代码参数的修改。

(1)首先在chip_type_e里面添加芯片类型chip_type_sc2232 = 25;

(2)然后在sal_video_init添加设置enViMode,

else if(video_module->chip_type[0] == chip_type_sc2232)

{

enViMode = SMARTSENS_SC2232_MIPI_1080P_25FPS;

}

(3)sensor设备参数

combo_dev_attr_t MIPI_2lane_SENSOR_SC2232_10BIT_1080_NOWDR_ATTR =

{

.devno = 0,

.input_mode = INPUT_MODE_MIPI,

{

.mipi_attr =

{

RAW_DATA_10BIT,

HI_MIPI_WDR_MODE_NONE,

{0, 1, -1, -1}

}

}

};

对应配置文件的[sensor_mode.0.0]

(4)Isp_image参数修改:

stPubAttr.enBayer = BAYER_BGGR;

stPubAttr.stWndRect.s32X = 0;

stPubAttr.stWndRect.s32Y = 0;

stPubAttr.stWndRect.u32Width = 1920;

stPubAttr.stWndRect.u32Height = 1080;

stPubAttr.f32FrameRate = 25;

对应[isp_image.0]部分

(5)设置视频缓存池大小

调用接口HI_MPI_VB_SetConf设置缓存池大小,需要在hisi_mppsys_init函数添加:

case chip_type_sc2232:

case chip_type_ar0237:

hi_sys.enSize[0] = PIC_HD1080;

hi_sys.enSize[1] = PIC_HD720;

hi_sys.enSize[2] = PIC_VGA;

hi_sys.enSize[3] = PIC_HD1080;

hi_sys.maxpicsize = PIC_HD1080;

hi_sys.mmz_count[0] = 14;

hi_sys.mmz_count[1] = 8;

hi_sys.mmz_count[2] = 8;

hi_sys.mmz_count[3] = 14;

对应【vb_conf】参数

(6)vi视频输入设备属性

调用HI_MPI_VI_SetDevAttr接口函数,设置属性:

VI_DEV_ATTR_S DEV_ATTR_MIPI_BASE_SC2232 =

{

/* interface mode */

VI_MODE_MIPI,

/* multiplex mode */

VI_WORK_MODE_1Multiplex,

/* r_mask g_mask b_mask*/

{0xfff0000, 0x0},

/* progessive or interleaving */

VI_SCAN_PROGRESSIVE,

/*AdChnId*/

{ -1, -1, -1, -1},

/*enDataSeq, only support yuv*/

VI_INPUT_DATA_YUYV,

/* synchronization information */

{

/*port_vsync port_vsync_neg port_hsync port_hsync_neg */

VI_VSYNC_FIELD, 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, 1920, 0,

/*vsync0_vhb vsync0_act vsync0_hhb*/

0, 1080, 0,

/*vsync1_vhb vsync1_act vsync1_hhb*/

0, 0, 0

}

},

/* use interior ISP */

VI_PATH_ISP,

/* input data type */

VI_DATA_TYPE_RGB,

/* bRever */

HI_FALSE,

/* DEV CROP */

{0, 0, 1920, 1080}

};

对应【vi_dev.0】参数:

主要修改视频设备接口模式au32CompMask[VIU_DEV_COMP_MASK_NUM];

IntfMode 和分量掩码值

(7)设置VI通道属性

调用HI_MPI_VI_SetChnAttr设置vi通道属性,在MPP_COMM_VI_StartIspAndVi函数中添加sc2232的enViMode设置视频捕获区域的宽和高:

case SMARTSENS_SC2232_MIPI_1080P_25FPS:

stCapRect.u32Width = 1920;

stCapRect.u32Height = 1080;

对应[vi_chn.0]参数:

(8)Load3516cv300参数配置:

sc2232)

bus_type=\"i2c\";

pinmux_mode=\"i2c_mipi\";

sensor_clk_freq=27000000;

intf_mode=\"default\";

viu_frequency=83300000; # 83.3M, viu clock frequency

isp_div=1; # isp div clk, freq = viu_clk_freq / div

;;

参数解释:

bus_type:总线类型,如i2c或者spi等类型;

pinmux_mode:设置mipi串行或者dvp并行模式,以及其他模式;

sensor_clk_freq:sensor的时钟频率;

viu_frequency:视频采集单元viu的时钟频率;

因篇幅问题不能全部显示,请点此查看更多更全内容