全志V853芯片适配双目GC2053的操作步骤

Posted 神棍地海棠

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了全志V853芯片适配双目GC2053的操作步骤相关的知识,希望对你有一定的参考价值。

1.主题

Tina V85x 平台适配双目GC2053的操作步骤
GC2053数据手册:ov-GC2053datas

2.问题背景

Tina V85x 平台支持多目sensor场景。Tina V85x SDK默认配置一般都是单目sensor,比如SDK V1.0默认是单目GC2053。为方便用户适配双目或多目sensor,下面以V853 perf1方案+双目GC2053为例,介绍适配的操作步骤。

3.解决办法

一、双目GC2053适配
适配双目GC2053主要修改以下几处:

1、dts设备树
文件:device/config/chips/v853/configs/perf1/board.dts
修改:

  • (1)修改csi/isp频率
    为节省带宽,可将csi/isp频率由原来默认的300MHz降至200MHz。
vind0:vind@0 
-           vind0_clk = <300000000>;
+           vind0_clk = <200000000>;
            status = "okay";
  • (2)修改成离线模式
    因双目场景下,ISP需分时复用,故只能支持离线模式,即work_mode改成1(离线)。具体可参考->
tdm0:tdm@0 
-               work_mode = <0>;
+               work_mode = <1>;
            ;

            isp00:isp@0 
-               work_mode = <0>;
+               work_mode = <1>;
            ;

            scaler00:scaler@0 
-               work_mode = <0>;
+               work_mode = <1>;
            ;

            scaler10:scaler@4 
-               work_mode = <0>;
+               work_mode = <1>;
            ;

            scaler20:scaler@8 
-               work_mode = <0>;
+               work_mode = <1>;
            ;

            scaler30:scaler@12 
-               work_mode = <0>;
+               work_mode = <1>;
            ;
  • (3)修改sensor配置
    sensor0默认是gc2053,无需修改。但是需要修改sensor1的配置为gc2053。修改后,sensor0和sensor1的配置如下:
sensor0:sensor@0 
                device_type = "sensor0";
                sensor0_mname = "gc2053_mipi";
                sensor0_twi_cci_id = <1>;
                sensor0_twi_addr = <0x6e>;
                sensor0_mclk_id = <0>;
                sensor0_pos = "rear";
                sensor0_isp_used = <1>;
                sensor0_fmt = <1>;
                sensor0_stby_mode = <0>;
                sensor0_vflip = <0>;
                sensor0_hflip = <0>;
                sensor0_iovdd-supply = <&reg_aldo2>;
                sensor0_iovdd_vol = <1800000>;
                sensor0_avdd-supply = <&reg_bldo2>;
                sensor0_avdd_vol = <2800000>;
                sensor0_dvdd-supply = <&reg_dldo2>;
                sensor0_dvdd_vol = <1200000>;
                sensor0_power_en = <>;
                sensor0_reset = <&pio PA 18 1 0 1 0>;
                sensor0_pwdn = <&pio PA 19 1 0 1 0>;
                sensor0_sm_hs = <>;
                sensor0_sm_vs = <>;
                flash_handle = <&flash0>;
                act_handle = <&actuator0>;
                status  = "okay";
            ;

            sensor1:sensor@1 
                device_type = "sensor1";
                sensor1_mname = "gc2053_mipi_2";
                sensor1_twi_cci_id = <0>;
                sensor1_twi_addr = <0x6e>;
                sensor1_mclk_id = <1>;
                sensor1_pos = "front";
                sensor1_isp_used = <1>;
                sensor1_fmt = <1>;
                sensor1_stby_mode = <0>;
                sensor1_vflip = <0>;
                sensor1_hflip = <0>;
                sensor1_iovdd-supply = <&reg_aldo2>;
                sensor1_iovdd_vol = <1800000>;
                sensor1_avdd-supply = <&reg_bldo2>;
                sensor1_avdd_vol = <2800000>;
                sensor1_dvdd-supply = <&reg_dldo2>;
                sensor1_dvdd_vol = <1200000>;
                sensor1_power_en = <>;
                sensor1_reset = <&pio PA 20 1 0 1 0>;
                sensor1_pwdn = <&pio PA 21 1 0 1 0>;
                sensor1_sm_hs = <>;
                sensor1_sm_vs = <>;
                flash_handle = <>;
                act_handle = <>;
                status  = "okay";
            ;
  • (4)修改各video节点的配置
    双目GC2053场景下,可支持的video节点分别为:
    sensor0:video 0/4/8/12
    sensor1:video 1/5/9/13
    故只需修改以上8个video节点的配置即可。修改后的配置如下:
vinc00:vinc@0 
                vinc0_csi_sel = <0>;
                vinc0_mipi_sel = <0>;
                vinc0_isp_sel = <0>;
                vinc0_isp_tx_ch = <0>;
                vinc0_tdm_rx_sel = <0>;
                vinc0_rear_sensor_sel = <0>;
                vinc0_front_sensor_sel = <0>;
                vinc0_sensor_list = <0>;
                work_mode = <0x1>;
                status = "okay";
            ;

            vinc01:vinc@1 
                vinc1_csi_sel = <1>;
                vinc1_mipi_sel = <1>;
                vinc1_isp_sel = <1>;
                vinc1_isp_tx_ch = <0>;
                vinc1_tdm_rx_sel = <1>;
                vinc1_rear_sensor_sel = <1>;
                vinc1_front_sensor_sel = <1>;
                vinc1_sensor_list = <0>;
                status = "okay";
            ;

            vinc10:vinc@4 
                vinc4_csi_sel = <0>;
                vinc4_mipi_sel = <0>;
                vinc4_isp_sel = <0>;
                vinc4_isp_tx_ch = <0>;
                vinc4_tdm_rx_sel = <0>;
                vinc4_rear_sensor_sel = <0>;
                vinc4_front_sensor_sel = <0>;
                vinc4_sensor_list = <0>;
                work_mode = <0x1>;
                status = "okay";
            ;

            vinc11:vinc@5 
                vinc5_csi_sel = <1>;
                vinc5_mipi_sel = <1>;
                vinc5_isp_sel = <1>;
                vinc5_isp_tx_ch = <0>;
                vinc5_tdm_rx_sel = <1>;
                vinc5_rear_sensor_sel = <1>;
                vinc5_front_sensor_sel = <1>;
                vinc5_sensor_list = <0>;
                status = "okay";
            ;

            vinc20:vinc@8 
                vinc8_csi_sel = <0>;
                vinc8_mipi_sel = <0x0>;
                vinc8_isp_sel = <0>;
                vinc8_isp_tx_ch = <0>;
                vinc8_tdm_rx_sel = <0>;
                vinc8_rear_sensor_sel = <0>;
                vinc8_front_sensor_sel = <0>;
                vinc8_sensor_list = <0>;
                work_mode = <0x1>;
                status = "okay";
            ;

            vinc21:vinc@9 
                vinc9_csi_sel = <0>;
                vinc9_mipi_sel = <0x0>;
                vinc9_isp_sel = <0>;
                vinc9_isp_tx_ch = <0>;
                vinc9_tdm_rx_sel = <0>;
                vinc9_rear_sensor_sel = <0>;
                vinc9_front_sensor_sel = <0>;
                vinc9_sensor_list = <0>;
                work_mode = <0x1>;
                status = "okay";
            ;

            vinc30:vinc@12 
                vinc12_csi_sel = <0>;
                vinc12_mipi_sel = <0x0>;
                vinc12_isp_sel = <0>;
                vinc12_isp_tx_ch = <0>;
                vinc12_tdm_rx_sel = <0>;
                vinc12_rear_sensor_sel = <0>;
                vinc12_front_sensor_sel = <0>;
                vinc12_sensor_list = <0>;
                work_mode = <0x1>;
                status = "okay";
            ;

            vinc31:vinc@13 
                vinc13_csi_sel = <1>;
                vinc13_mipi_sel = <1>;
                vinc13_isp_sel = <1>;
                vinc13_isp_tx_ch = <0>;
                vinc13_tdm_rx_sel = <1>;
                vinc13_rear_sensor_sel = <1>;
                vinc13_front_sensor_sel = <1>;
                vinc13_sensor_list = <0>;
                status = "okay";
            ;

2、内核配置
双mipi sensor场景下,ISP分时复用,需要使用TDM,故需打开TDM。
文件:device/config/chips/v853/configs/perf1/linux/config-4.9
修改:打开TDM配置

CONFIG_SUPPORT_ISP_TDM=y
CONFIG_TDM_LBC_EN=y

3、mpp middleware

首先,确保mpp配置中选中了gc2053 sensor。检查方法:
make menuconfig,依次进入配置项:

Allwinner  --->
    eyesee-mpp  --->
        [*]   select sensor
        [*]     use sensor gc2053

然后,在ISP效果文件中,为第二个sensor添加效果文件配置。
位置:external/eyesee-mpp/middleware/sun8iw21/media/LIBRARY/libisp/isp_cfg/isp_ini_parse.c
修改:将原来的两组gc2053_mipi配置分别拷贝一份,然后修改名字为gc2053_mipi_2即可,其他参数不用修改。

struct isp_cfg_array cfg_arr[] = 
...

#ifdef SENSOR_GC2053
    "gc2053_mipi",  "gc2053_mipi_isp600_20220511_164617_vlc4_day", 1920, 1088, 20, 0, 0, &gc2053_mipi_v853_isp_cfg,
    "gc2053_mipi",  "gc2053_mipi_isp600_20220415_144837_ir", 1920, 1088, 20, 0, 1, &gc2053_mipi_ir_isp_cfg,
    "gc2053_mipi_2",  "gc2053_mipi_isp600_20220511_164617_vlc4_day", 1920, 1088, 20, 0, 0, &gc2053_mipi_v853_isp_cfg,
    "gc2053_mipi_2",  "gc2053_mipi_isp600_20220415_144837_ir", 1920, 1088, 20, 0, 1, &gc2053_mipi_ir_isp_cfg,
#endif

...

按以上步骤修改完成后,需重新编译mpp和固件,命令如下:

cleanmpp && mkmpp && mp

二、双目GC2053验证
支持验证双目GC2053的mpp sample有:
sample_rtsp(支持双目采集+编码+RTSP)、sample_smartIPC_demo(支持双目采集+编码+RTSP+人形检测)、sample_smartPreview_demo(支持双目采集+预览)
如果不需要RTSP功能,注释掉代码中的宏 #define SUPPORT_RTSP_TEST 即可。
有关mpp sample的使用方法,请参考https://bbs.aw-ol.com/topic/1906/

以上是关于全志V853芯片适配双目GC2053的操作步骤的主要内容,如果未能解决你的问题,请参考以下文章

全志V853芯片放开快启方案打印及在快起方式下配置isp led的方法

详解全志V853上的ARM A7和RISC-V E907之间的通信方式

全志V853的NPU的demo试玩

双目视觉深度——GC-Net算法详解 / Cost Volume模块详解

一文带你看懂全志V853开发板原理图

双目深度算法——基于Cost Volume的方法(GC-Net / PSM-Net / GA-Net)