<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          MTK 平臺(tái)相機(jī)bringup流程

          共 6325字,需瀏覽 13分鐘

           ·

          2023-06-20 10:46

          和你一起終身學(xué)習(xí),這里是程序員Android

          經(jīng)典好文推薦,通過(guò)閱讀本文,您將收獲以下知識(shí)點(diǎn):

          一、Camera 框架介紹
          二、Camera Bringup 需要配置的文件
          三、復(fù)盤總結(jié)

          一、Camera 框架介紹

          Camera 的框架分為 Kernel 部分和 hal 部分,其中kernel部分主要有兩塊:

          • image sensor driver,負(fù)責(zé)具體型號(hào)的sensor的id檢測(cè),上電,以及在preview、capture、初始化、3A等等功能設(shè)定時(shí)的寄存器配置;

          • isp driver,通過(guò)DMA將sensor數(shù)據(jù)流上傳;
            HAL層部分主要有三部分組成:

          • imageio,主要負(fù)責(zé)數(shù)據(jù)buffer上傳的pipe;

          • drv,包含imgsensor和isp的hal層控制;

          • feature io,包含各種3A等性能配置;

          二、Camera Bringup 需要配置的文件

          (本文以hi1634q型號(hào)的前攝為例,平臺(tái)是mt6789,kernel版本為5.10)

          2.1、Device Config Files

          修改時(shí)刪除多余的 sensor driver name,只保留自己的即可;

          /device/mediateksample/k6789v1_64
          ProjectConfig.mk

          /device/mediatek/mt6789

          CameraConfig.mk
          device-camera.mk

          注意:CUSTOM_HAL_IMGSENSOR 、CUSTOM_HAL_SUB_IMGSENSOR 、CUSTOM_KERNEL_IMGSENSOR 、CUSTOM_KERNEL_SUB_IMGSENSOR 這四個(gè)必須都要指定 sensor name;不能遺漏

          /device/mediatek/common/kernel-headers

          kd_imgsensor.h

          指定 sensor name 和 sensor model id !這里一定要check不能出錯(cuò)!

          2.2、Kernel Config Files

          /kernel-5.10/arch/arm64/configs

          mgk_64_k510_defconfig

          修改時(shí)刪除多余的 sensor driver name,只保留自己的即可;

          /kernel-5.10/drivers/misc/mediatek/imgsensor/inc

          kd_imgsensor.h

          指定 sensor name 和 sensor model id 和 device config files 那邊修改一樣!這里一定要check不能出錯(cuò)!

          /kernel-5.10/arch/arm64/boot/dts/mediatek

          cust_mt6789_camera.dtsi

          (1)修改 cust_mt6789_camera.dtsi 中 pio 節(jié)點(diǎn)的各個(gè)Pin number,其中 1 對(duì)應(yīng) sensor index, 最好是將其他不相關(guān)的 sensor 定義都刪除,排除干擾,提供一個(gè)干凈整潔的代碼!并將文件中 kd_camera_hw1 節(jié)點(diǎn)中的 pin 增加對(duì)應(yīng)節(jié)點(diǎn),rst 引腳和 mclk 引腳需要根據(jù)原理圖上的信息去 map 查找,具體對(duì)應(yīng)的是哪個(gè) gpio引腳,pinctrl也只需要保留對(duì)應(yīng)節(jié)點(diǎn)即可(必須從0開(kāi)始遞增,否則遍歷會(huì)出錯(cuò)!),如下圖紅圈部分:

          (2) 在 cust_mt6789_camera.dtsi 文件中 kd_camera_hw1 節(jié)點(diǎn)中將采用 PMIC 供電方式的 pin 增加如下子節(jié)點(diǎn),再加一個(gè) cust-sensor = “sensor_mipi_raw”,或者是 cam1_enable_sensor = “sensor_mipi_raw ”(方便匹配指定sensor):

          (3)在對(duì)應(yīng)的 i2c 總線中定義 camera 設(shè)備,i2c0 到 i2c8,具體是哪一條 i2c 路線需要到原理圖查找,同時(shí)設(shè)備在 i2c 線上的地址是 sensor 的物理地址的高七位的值(實(shí)際過(guò)程中此地址只需要不和 i2c 路線的其它設(shè)備地址沖突即可,但是為了便于查找,盡量使用高七位的地址),同時(shí)刪除無(wú)關(guān)的設(shè)備配置,包括其它的camera sensor、eeprom 相關(guān)、點(diǎn)亮 sensor 的原理圖上不存在的引腳配置。

          /kernel-5.10/drivers/misc/mediatek/imgsensor/src/common/v1_1

          hi1634q_mipi_raw

          此目錄下添加驅(qū)動(dòng)文件,仿照類似型號(hào) sensor 修改成自己的,然后改成自己的名字,刪除 mipi_raw 下的eeprom 以及 makefile 中的 eeprom 相關(guān),排除干擾項(xiàng)。

          到 sensor.c 和 sensor.h 文件修改具體內(nèi)容,主要包括 imgsensor_info、init_setting、preview_setting 等 mode setting 中的數(shù)據(jù)、winsize_info 數(shù)據(jù)修改,最后修改 driver 的入口函數(shù) XXX_MIPI_RAW_SensorInit(),一般在 sensor.c 文件最下面。

          imgsensor_sensor_list.c
          imgsensor_sensor_list.h

          imgsensor_sensor_list.h 中添加相應(yīng)的 sensor 的 init(入口函數(shù)) 的函數(shù);

          imgsensor_sensor_list.c 中添加相應(yīng)的 sensor 的id、name、init(入口函數(shù)) ,注意順序和 vendor 層相對(duì)應(yīng),此處需要注意的是最好把位置放在你對(duì)應(yīng)sensor idx 的位置上,這樣就不會(huì)有匹配出錯(cuò)的情況出現(xiàn)。

          imgsensor_pwr_seq.c
          此文件中修改引腳電壓值以及上電延時(shí)等信息,注意 sensor driver name 的大小寫,同時(shí)嚴(yán)格按照 sensor data 上電模塊的說(shuō)明,添加延時(shí)。需要注意的是 AVDD, DVDD, DOVDD 的電壓需要確認(rèn)是否正確,并且在上完前兩路電之后第三路電最好加個(gè) 1ms 的延遲,不然可能會(huì)出現(xiàn)意料之外的問(wèn)題;

          /kernel-5.10/drivers/misc/mediatek/imgsensor/src/common/v1_1/camera_hw/

          imgsensor_cfg_table.c

          此處修改硬件配置信息,主要是三路電的配置,是 regulator 還是 gpio類型的,如果 sensor 原理圖有其它引腳,也可以繼續(xù)添加,同時(shí)刪除原理圖不存在的引腳,例如 pdn 引腳。

          2.3、Vender Config Files

          /vendor/mediatek/proprietary/custom/common/hal/imgsensor_src

          sensorlist.cpp

          Note: sensorlist.cpp 中的 SensorList[] 與 imgsensor_sensor_list.c 中的 gimgsensor_sensor_list 的 sensor 的順序必須一致,否則 user space 和 kernel space 在通過(guò) ioctl 傳遞命令 id 時(shí)會(huì)對(duì)應(yīng)錯(cuò)誤。

          /vendor/mediatek/proprietary/custom/mt6789/hal/imgsensor_src

          cfg_setting_imgsensor.cpp

          注意:kernel 底層的MCLK_0/1/2 ----> 分別對(duì)應(yīng)HAL層的 MCLK_1/2/3

          Tunning文件
          Note:

          (1)Tuning Parameter 與 Metadata 可以采用下圖作為參考,參考復(fù)制對(duì)應(yīng)文件夾并將其中所有的Sensor Name、Sensor Id等更改成當(dāng)前需要porting的sensor的對(duì)應(yīng)名稱,一共三處。此處需要注意:參考的sensor tunning 配置必須對(duì)應(yīng)上,例如 前攝只能參考和 sub 相關(guān)的文件配置,否則會(huì)出現(xiàn)踩內(nèi)存現(xiàn)象;

          (2) 修改過(guò)程中注意 sensor name 和 driver 驅(qū)動(dòng)的大小寫問(wèn)題即可,具體的 mediatek 信息不會(huì)影響點(diǎn)亮階段,但會(huì)對(duì)后續(xù)的出圖細(xì)節(jié)有影響,需要點(diǎn)亮之后再進(jìn)行調(diào)試

          (3)Kernel 版本號(hào)可以根據(jù)當(dāng)前 Project 的 ProjectConfig.mk 中的 LINUX_KERNEL_VERSION 得知。

          Driver 是 v1_1 或者其他版本可以通過(guò) Platform 下的 Makefile 中的 COMMON_VERSION 得知。

          /vendor/mediatek/proprietary/custom/mt6789/hal/imgsensor/ver1/


          /vendor/mediatek/proprietary/custom/mt6789/hal/imgsensor_metadata/

          /vendor/mediatek/proprietary/custom/common/hal/imgsensor_metadata/sensor/

          /vendor/mediatek/proprietary/scripts/soong/mtkcam/

          mtkcamvars.go

          /vendor/mediatek/proprietary/tools/dct/dws/mt6789

          k6789v1_64.dws

          dws(設(shè)備樹(shù)相關(guān))check gpio,一般不需要改動(dòng)。

          /vendor/mediatek/proprietary/hardware/mtkcam/include/mtkcam/drv/

          IHalSensor.h

          檢查一下信息是否和 kernel 層信息相同或者是否需要添加 sensor ,一般不需要改動(dòng)。

          三、復(fù)盤總結(jié)

          通過(guò)上面的代碼流程,可以知道上開(kāi)機(jī)時(shí),camera模塊先會(huì)將所有的MCLK打開(kāi),然后對(duì)依次對(duì)對(duì)應(yīng)的sensor進(jìn)行上電,讀取ID(判斷I2C是否正常通訊)。這部分調(diào)試過(guò)程中遇到的問(wèn)題總結(jié)如下:

          3.1、注意事項(xiàng)

          kernel 重要的是 module 的驅(qū)動(dòng)代碼和設(shè)備樹(shù)添加,驅(qū)動(dòng)代碼的改動(dòng)需要根據(jù)模組廠給的配置文檔,一般里面包含了驅(qū)動(dòng)的所有信息,包括一些 dts 配置、init setting、i2c_addr、分辨率(注意屏比例)、上電時(shí)序等一些重要信息
          device 中 config.mk 文件修改后,要將 out 相關(guān)所有目錄刪除,再全部編譯,否則會(huì)導(dǎo)致踩內(nèi)存的橙色界面
          vender 參考的 sensor tunning 配置必須對(duì)應(yīng)上,例如 前攝只能參考和 sub 相關(guān)的文件配置,否則會(huì)出現(xiàn)踩內(nèi)存現(xiàn)象
          參考 sensor 進(jìn)行復(fù)制替換時(shí)注意大小寫的問(wèn)題?。?!
          注意排除干擾項(xiàng)、無(wú)關(guān)項(xiàng),單獨(dú)點(diǎn)亮一顆 sensor 時(shí),先到 config 文件刪除其余無(wú)關(guān)的 sensor 驅(qū)動(dòng),eeprom 相關(guān)的也刪除,camera 設(shè)備原理圖沒(méi)有的引腳也要到 dtsi 和上電相關(guān)的文件 cfg_table.c 中刪除。

          3.2、ID讀取不到,I2C不通

          檢查上電時(shí)序,3項(xiàng)電壓(AVDD/DVDD/IOVDD)是否正確;
          檢查 kernerl 層的 imgsensor_sensor_list.c 和 vendor 層的 sensorlist.cpp 中的位置是否一致。
          I2C地址及通道設(shè)置是否正確;
          確認(rèn) i2c 可以正常通信,通過(guò)萬(wàn)用表看看有無(wú)電流,萬(wàn)用表也可以用來(lái)測(cè)量配置的 regulator 是否正確,測(cè)量電壓時(shí)首先屏蔽 imgsensor_hw.c 中的下電代碼,最后編譯完成,通過(guò) i2c write/read 工具讀寫寄存器,將對(duì)應(yīng) regulator 的所有電源全部打開(kāi),之后測(cè)量電壓。
          檢查 cfg_setting_imgsensor.cpp 中 MCLK 和 HW 鏈接配置是否正確;
          如果還是無(wú)法讀到 sensor id,先熟悉以下驅(qū)動(dòng)代碼以及上電代碼,通過(guò)打印 log 的方式檢查具體執(zhí)行到哪個(gè)模塊:camera 的入口在 imgsensor.c 最下方的 init 函數(shù),通過(guò)它綁定一個(gè) platform 的驅(qū)動(dòng),我們?cè)诘津?qū)動(dòng)對(duì)應(yīng)的 probe 函數(shù)下看它如何執(zhí)行,主要包括設(shè)備的匹配注冊(cè),imgsensor_hw_init,imgsensor_proc_init,sensorlist_init,其中上電部分的代碼通過(guò) imgsensor_hw_init 到達(dá) imgsensor_hw.c 文件,獲取硬件信息配置之后分別到平臺(tái)定義的標(biāo)準(zhǔn)化接口 mclk.c、regulator.c、gpio.c 中執(zhí)行標(biāo)準(zhǔn)化接口,這樣一路打印 log,大概率會(huì)發(fā)現(xiàn)上電過(guò)程哪里出現(xiàn)問(wèn)題,根據(jù)問(wèn)題去檢查對(duì)應(yīng)模塊。
          讀到 sensor id 之后,如果相機(jī)無(wú)法預(yù)覽,需要到 imgsensor.c 以及驅(qū)動(dòng)代碼中檢查 open 之后的執(zhí)行情況,check 驅(qū)動(dòng)中的 init_setting 、mode setting 、imgsensor_winsize_info 是否正確。

          3.3、Camera 啟動(dòng)時(shí)間過(guò)長(zhǎng)

          檢查 Sensor 上電時(shí)序要求的延時(shí),是否有偏長(zhǎng)的情況;
          去掉多余的 I2C 地址,因?yàn)榇蟛糠烛?qū)動(dòng)會(huì)多添加一些地址;
          OTP的加載調(diào)整到每次開(kāi)機(jī)時(shí)第一次打開(kāi)加載,之后不加載;
          sensorInit如果時(shí)間過(guò)長(zhǎng),可以調(diào)節(jié)I2C speed(400->1000);

          原文鏈接:https://blog.csdn.net/Sugar_wolf/article/details/127512088

          【騰訊文檔】Camera學(xué)習(xí)知識(shí)庫(kù)
          https://docs.qq.com/doc/DSWZ6dUlNemtUWndv


          友情推薦:

          Android 開(kāi)發(fā)干貨集錦

          至此,本篇已結(jié)束。轉(zhuǎn)載網(wǎng)絡(luò)的文章,小編覺(jué)得很優(yōu)秀,歡迎點(diǎn)擊閱讀原文,支持原創(chuàng)作者,如有侵權(quán),懇請(qǐng)聯(lián)系小編刪除,歡迎您的建議與指正。同時(shí)期待您的關(guān)注,感謝您的閱讀,謝謝!

          點(diǎn)擊閱讀原文,為大佬點(diǎn)贊!

          瀏覽 116
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  最新国语对白精彩视频 | 久久肏逼网 | 成年人视频免费 | 久久丫精品 | 国产一级搞鸡 |