mtk ccu調試

參考平臺:MT6765Q

一、概念

CCU(Camera Control Unit,相機控制單元),用來控制相機拍出來的畫面

二、簡介

mtk的ccu有單獨的mcu,在CCU中跑AE相關運算,可以省掉CPU的AE運算時間。

  • 通過ccu調用i2c接口寫入sensor的shutter和gain。可以省掉cpu調用i2c接口的時間,但不能加速AE收斂;

  • 在ccu中跑AE Algo,可以省掉cpu跑AE Algo的時間,而且可以加速AE收斂;

  • 不同平臺之間,有的平臺強制跑CCU AE Algo,有的則可以切到CPU AE Algo。

三、ccu rules

由於CCU driver 由系統工具根據sensor driver 自動生成,故而ccu要求image sensor driver遵守以下rules:

1.無論添加的sensor驅動文件名字是什麼,在kd_imgsensor.h定義的sensor driver name必須和驅動文件名一致。比如添加gc5025的驅動文件名爲"gc5025_mipi_raw",則kd_imgsensor.h中應該作如下定義:


#define SENSOR_DRVNAME_GC5025_MIPI_RAW  "gc5025_mipi_raw"

2.驅動文件中.c和.h文件除去.c/.h後綴後名字應該保持一致

如:gc5025mipiraw_Sensor.c和gc5025mipiraw_Sensor.h

3.驅動文件中應該使用ccu支持的函數,除了以下白名單中的函數:

  • iWriteRegI2C

  • iWriteRegI2CTiming

  • iReadRegI2C

  • iReadRegI2CTiming

  • fls

4.驅動文件中使用的宏必須先在sensor驅動.c/.h中聲明,不允許使用在其他文件中定義的宏

四、相關FAQ

1.開啓ccu log

adb root
adb shell setprop vendor.debug.drv.ccu_drv 5
adb shell setprop vendor.debug.ccuif.ccu_drv 5
adb shell pkill camera*

注意:ccu log打印在main log中,在main log中搜索"I2C wr dump",就可以看到ccu寫給sensor的register值了。

2.更新shutter和gain函數後,快速編譯ccu lib的方法

由於ccu的代碼跑在自己的mcu中,會對kernel driver中shutter和gain相關的函數單獨編譯。此時只編譯bootimage無法更新ccu的內容,shutter和gain的修改不能生效。此時要麼全編代碼要麼快速變異ccu lib,方法如下:

1)清掉舊的ccu lib文件

$out/target/product/$platform/obj_arm/EXECUTABLES/libccu_$sensor_name.dm_intermediates
$out/target/product/$platform/obj_arm/EXECUTABLES/libccu_$sensor_name.pm_intermediates
$out/target/product/$platform/obj_arm/EXECUTABLES/libccu_$sensor_name_intermediates

2)部分編譯ccu_tool目錄

3) 把新生成的下面內容,push到手機內(system/vendor/bin)

$out/target/product/$platform/vendor/bin/libccu_$sensor_name.dm
$out/target/product/$platform/vendor/bin/libccu_$sensor_name.pm

3.mt6765關閉ccu

修改文件關閉CCU總開關

alps/vendor/mediatek/proprietary/hardware/libcamera_ext/ccu/mt6765/ver1/drv/src/ccuif/src/ccu_mgr.cpp

void CcuMgr::_checkCcuEnable()
{
    CcuMgr::IsCcuMgrEnabled = false;
    char value[100] = {'\0'};
    //property_get("debug.ccu_mgr_ccu.enable", value, "1");  
    property_get("debug.ccu_mgr_ccu.enable", value, "0"); // 把ccu 的總開關關閉。
    CcuMgr::IsCcuMgrEnabled = atoi(value);
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章