博客專欄

        EEPW首頁 > 博客 > 征程 6 環視快啟 sample

        征程 6 環視快啟 sample

        發布人:地平線開發者 時間:2024-10-27 來源:工程師 發布文章

        01 功能概述

        環視 4V 解串器直接接到 main 域,mcu 訪問 main 域 i2c、gpio、lpwm,對 camera sensor、serdes 以及 lpwm 進行初始化,完成環視的快速出圖。


        圖片


        mcu 啟動后,會在 mcu task 中調用 Camera_Init 接口,完成 camera sensor、serdes 以及 lpwm 的配置,并使能數據流,數據會通過加串器 bypass 給 IVI。


        Camera_Init 中會先檢查 AonSram 中當前需要配置的 camera 通路是否 working,如果 working 狀態,接口將直接退出,當檢查 flag 為非 working 狀態時,會將需要使能通路 flag 設置為 working,并開始初始化環視,并使能數據流 bypass 給 IVI。


        1.1 mcu 編譯

        mcu camera bypass 參考方案相關實現在 mcu/Service/Camera 目錄下。

               ├── inc
              │  ├── camera_common_gpio.h        
              │  ├── camera_common_i2c.h        
              │  ├── camera_common_lpwm.h        
              │  ├── Camera_PreInit.h        
              │  ├── Camera_Setting.h        
              │  └── Camera_Sub.h        
              ├── SConscript        
              └── src        
              ├── Camera_Autosar.c        
              ├── camera_common_lpwm.c        
              ├── Camera_PreInit.c        
              ├── camsys_common_gpio.c        
              ├── camsys_common_i2c.c        
              └── I2c_Operation.c


        由于 mcu 調試環境不適合 camera sensor & serdes 的調試工作,所以 camera sensor & serdes 的調試需要在 acore 側進行,由 acore 完成 camera sensor & serdes 調試,調試完成后通過 libcam 提供的 setting dump 命令得到 setting 文件,如 camdump-hbn_camera_test-608660-639939578641.log.i2c。


        在開發板執行如下命令,會在/log/camera 目錄下得到 dump 的 setting 文件:

               # 創建默認 dump 目錄:
               mkdir -p /log/camera
               # 關閉診斷功能:
               export CAM_DIAG_DISABLE=1
               # 關閉內參預讀功能:
               export CAM_IPARAM_MODE=1
               # 打開 debug 功能,不打印,但正常初始化并(開流完)后 dump 到文件:同時 i2c 源記錄
               export CAM_DEBUG_LEVEL=0x2201
               # 打開 debug 功能,不打印,但正常初始化完(不開流)后 dump 到文件:同時 i2c 源記錄
               export CAM_DEBUG_LEVEL=0xa01
               # 運行相應的配置,如:RX4/96724 4V 環視 HK ISX031
               /app/testcase/S10_Camera/testsuite/scripts/hbn_camera_test.sh 4v_yuv_cim0_ddr_1536p_isx031 config_HK_F196P1_MAX96724 R4
               # 或:RX4/96724 4V 環視 SENSING ISX031
               /app/testcase/S10_Camera/testsuite/scripts/hbn_camera_test.sh 4v_yuv_cim0_ddr_1536p_isx031 config_SENSING_F190S0T7_MAX96724 R4
              # 創建默認 dump 目錄:        mkdir -p /log/camera        # 關閉診斷功能:        export CAM_DIAG_DISABLE=1        # 關閉內參預讀功能:        export CAM_IPARAM_MODE=1        # 打開 debug 功能,不打印,但正常初始化并(開流完)后 dump 到文件:同時 i2c 源記錄        export CAM_DEBUG_LEVEL=0x2201        # 打開 debug 功能,不打印,但正常初始化完(不開流)后 dump 到文件:同時 i2c 源記錄        export CAM_DEBUG_LEVEL=0xa01        # 運行相應的配置,如:RX4/96724 4V 環視 HK ISX031        /app/testcase/S10_Camera/testsuite/scripts/hbn_camera_test.sh 4v_yuv_cim0_ddr_1536p_isx031 config_HK_F196P1_MAX96724 R4        # 或:RX4/96724 4V 環視 SENSING ISX031        /app/testcase/S10_Camera/testsuite/scripts/hbn_camera_test.sh 4v_yuv_cim0_ddr_1536p_isx031 config_SENSING_F190S0T7_MAX96724 R4

        在得到 dump 的 setting 文件后,地平線提供工具 Camera_Setting_Tools 對 dump 的 setting 文件進行解析,進而得到 mcu 側可用的 Camera_Setting.h 文件。

               ./Camera_Setting_Tools camdump-hbn_camera_test-23984-48446987219.log.i2c


        圖片


        Camera_Setting.h 文件中包含 i2c bus、i2c 寄存器、gpio 操作、延時等,完全復用 acore 執行側時序進行初始化。


        Camera_Setting.h 中的結構:

        typedef struct {
                       uint8_t bus; // i2c bus num
                       uint8_t i2c_addr; // i2c addr, exception:(i2c_addr \| alen \| dlen) = 0 for gpio
                       uint8_t i2c_op; // read/write/sleep
                       uint8_t alen; // i2c reg addr length, exception:(i2c_addr \| alen \| dlen) = 0 for gpio
                       uint8_t dlen; // i2c reg val length, exception:(i2c_addr \| alen \| dlen) = 0 for gpio
                       uint32_t reg_addr; // i2c reg addr or gpio
                       uint32_t value; // i2c reg value or gpio val
                       uint32_t time_us; // i2c timestemp
                       uint32_t delay_us; // i2c timestemp
               } cam_i2c_info_t;


        lpwm 的配置在 camera_common_lpwm.c 文件中,根據需要配置 lpwm 參數,將參數填入 g_LpwmAttr 的初始化。


        圖片


        由于該參考方案需要 mcu 跨域訪問 i2c & ioext,而默認 mcu 側不一定配置了 main 域的 i2c & ioext,所以需要確認需要訪問的 i2c bus 以及 gpio 是否需要額外配置,如果需要額外配置,需要對 i2c 以及 ioext 的 Config 進行修改,并在 Camera_PreInit.c 中增加適配,并在 mcu HorizonTask.c 中 I2c_Init()之前調用 Camera_PreInit.h 中提供的 Camera_PreInit()接口。


        I2c 配置 matrix A 參考修改:

        mcu/Config/McalCdd/gen_matrix_A/I2c/inc/I2c_PBcfg.h


        將#define I2C_CONFIG_CHANNEL (4U)定義修改為#define I2C_CONFIG_CHANNEL (10U)。


        #define I2C_CONFIG_CHANNEL (10U)
        mcu/Config/McalCdd/gen_matrix_A/I2c/src/I2c_PBcfg.c
        將 I2cConfig[4]初始化修改為 I2cConfig[10],并進行初始化。
               const I2c_ConfigType I2cConfig[10] =
               {
                       {
                               I2cHwChannel0,
                               MASTER_MODE,
                               ADDRESS_7_BITS,
                               I2C_FAST_MODE,
                               0
                       },
                       {
                               I2cHwChannel1,
                               MASTER_MODE,
                               ADDRESS_7_BITS,
                               I2C_FAST_MODE,
                               0
                       },
               {
                               I2cHwChannel2,
                               MASTER_MODE,
                               ADDRESS_7_BITS,
                               I2C_FAST_MODE,
                               0
                       },
                       {
                               I2cHwChannel3,
                               MASTER_MODE,
                               ADDRESS_7_BITS,
                               I2C_FAST_MODE,
                               0
                       },
                       {
                               I2cHwChannel4,
                               MASTER_MODE,
                               ADDRESS_7_BITS,
                               I2C_FAST_MODE,
                               0
                       },
                       {
                               I2cHwChannel5,
                               MASTER_MODE,
                               ADDRESS_7_BITS,
                               I2C_FAST_MODE,
                               0
                       },
                       {
                               I2cHwChannel6,
                               MASTER_MODE,
                               ADDRESS_7_BITS,
                               I2C_STANDARD_MODE,
                               0
                       },
               {
                               I2cHwChannel7,
                               MASTER_MODE,
                               ADDRESS_7_BITS,
                               I2C_STANDARD_MODE,
                               0
                       },
                       {
                               I2cHwChannel8,
                               MASTER_MODE,
                               ADDRESS_7_BITS,
                               I2C_STANDARD_MODE,
                               0
                       },
               {
                               I2cHwChannel9,
                               MASTER_MODE,
                               ADDRESS_7_BITS,
                               I2C_STANDARD_MODE,
                               0
                       },
               };


        ioext 配置 matrix A 參考修改:

        mcu/Config/McalCdd/gen_matrix_A/IoExt/inc/TCA9539_Cfg.h


        增加 acore tca9539 拓展 io i2c bus 定義


              #define TCA9539_ACORE_I2C_CHANNEL               5U
        TCA9539_DEVICE 中增加參數 TCA9539_DEVICE2
               typedef enum
               {
                               TCA9539_DEVICE0 = 0,
                               TCA9539_DEVICE1 = 1,
                               TCA9539_DEVICE2,  // add for acore TCA9539
                               TCA9539_DEVICE_MAX
               } TCA9539_DEVICE;
        mcu/Config/McalCdd/gen_matrix_A/IoExt/src/TCA9539_Cfg.c
        TCA9539_DeviceMapping 增加{TCA9539_ACORE_I2C_CHANNEL, 0x74u}參數
               const TCA9539_DeviceMappingType TCA9539_DeviceMapping[TCA9539_DEVICE_MAX] =
               {
                               {TCA9539_0_I2C_CHANNEL, 0x74u},    /* Device 0 */
                               {TCA9539_0_I2C_CHANNEL, 0x75u},    /* Device 1 */
                               {TCA9539_ACORE_I2C_CHANNEL, 0x74u},   /* Device acore */
               };
        TCA9539_RegRecord 增加{{0u, 0u}, {0xFFu, 0xFFu}, {0u, 0u}, {0xFFu, 0xFFu}參數
               TCA9539_RegRecordType TCA9539_RegRecord[TCA9539_DEVICE_MAX] =
               {
                       {
                               {0u, 0u},
                               {TCA9539_0_OUTPUT_LEVEL_0, TCA9539_0_OUTPUT_LEVEL_1},
                               {TCA9539_0_POLORITY_INVERSION_0, TCA9539_0_POLORITY_INVERSION_1},
                               {TCA9539_0_CONFIGURATION_0, TCA9539_0_CONFIGURATION_1}
                       },
                       {
                               {0u, 0u},
                               {TCA9539_1_OUTPUT_LEVEL_0, TCA9539_1_OUTPUT_LEVEL_1},
                               {TCA9539_1_POLORITY_INVERSION_0, TCA9539_1_POLORITY_INVERSION_1},
                               {TCA9539_1_CONFIGURATION_0, TCA9539_1_CONFIGURATION_1}
                       },
                       {
                               {0u, 0u},
                               {0xFFu, 0xFFu},
                               {0u, 0u},
                               {0xFFu, 0xFFu}
                       },
               };


        在生成完 Camera_Setting.h 并配置好 g_LpwmAttr 后以及適配完 i2c&ioext 后:

        • 將 Camera_PreInit()函數放在 mcu 初始化任務中,注意要在 I2c_Init(NULL_PTR)之前。

        • 將 Lpwm_Ops(0, 0)和 Camera_Init()放在 task 中只執行一次,就可以編譯 mcu 鏡像了。


        注:

        1. 如果是解串器接到 switch 并分別接到 mcu 側 i2c bus 和 acore i2c bus,需要將解析后的 Camera_Setting.h 文件中 bus 替換成 mcu 側對應 bus,且不需要對 I2c_PBcfg 以及 IoExt_PBcfg 進行額外適配修改。

        2. Camera_Setting_Tools 工具可在 mcu 工程 mcu/Tools/mcu_camsys_tools 目錄找到。


        1.2 soc 側配置修改


        soc 側在環視 4V 快起時,需要在 hb_j6dev.json 中 deserial 的配置添加"flags":"0x20",表示打開環視 4V 快起功能。


        圖片


        打開該功能后,soc 在初始化時,會通過 i2c 讀取 deserial 的 0x108 寄存器判斷是否 mcu 已經開流。


        • 如果 mcu 已經開流,soc 側會跳過 deserial、sensor 的上電及初始化配置。

        • 如果 mcu 未開流,soc 側會對 deserial、sensor 進行正常的上電及初始化配置。


        1.3 mcu 側運行


        mcu 啟動后,通過 i2cdetect 確認檢查 camera 設備被掃到。


        圖片


        確認是否出流可以通過加串器出流寄存查看:I2c_Read 3 0x27 16 8 0x108


        圖片


        1.4 PYM-Sample


        soc 側可通過以下命令打開環視 4V,進行測試驗證。


        /app/sample/S83_Sample/S83E04_Module/camera_sample/scripts/camera_sample.sh matrix 4V_4xISX031_RX4_HK_SYNC t33554432


        deserial 判斷 mcu 是否已經初始化:


        圖片


        sensor 判斷 mcu 是否已經初始化:


        圖片


        soc 側也可通過以下命令打開 3V,進行測試驗證。


        /app/sample/S83_Sample/S83E04_Module/camera_sample/scripts/camera_sample.sh matrix 3V_2xOVX8B_1xOVX3C_RX0


        *博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。



        關鍵詞: 算法 自動駕駛

        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 巴林右旗| 河西区| 洞头县| 洛宁县| 南雄市| 隆昌县| 清水河县| 无锡市| 峨眉山市| 慈利县| 浦北县| 武山县| 和政县| 阿合奇县| 沾益县| 房产| 长阳| 洛扎县| 宜宾县| 阳西县| 旬邑县| 阳谷县| 河池市| 清流县| 灵丘县| 泸州市| 泽州县| 湘乡市| 泗水县| 云南省| 台东县| 修水县| 东兰县| 班玛县| 阜阳市| 张家界市| 贵定县| 楚雄市| 勐海县| 甘德县| 商洛市|