日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android高通平台调试Camera驱动全纪录

發(fā)布時間:2025/4/16 Android 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android高通平台调试Camera驱动全纪录 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

項目比較緊,3周內(nèi)把一個帶有外置ISP,MIPI數(shù)據(jù)通信,800萬像素的camera從無驅(qū)動到實現(xiàn)客戶全部需求。


1日 搭平臺,建環(huán)境,編譯內(nèi)核,燒寫代碼。

我是一直在Window下搭個虛擬機登服務(wù)器搞開發(fā)的,對Linux系統(tǒng)環(huán)境實在無愛,每每一到項目剛開始要搭環(huán)境了,內(nèi)心總有點排斥,過程就比較糾結(jié),看來以后還是要搞個linux真機玩玩。


2日 編寫camera驅(qū)動大致框架,配置GPIO,I2C,MIPI,電壓,時鐘等。
很少能碰到FAE只給硬件手冊,沒有Linux和Android驅(qū)動的。因為是camera sensor外接ISP芯片,杯具就發(fā)生了。整個系統(tǒng)是這樣,高通平臺的開發(fā)板,自己寫驅(qū)動來控制ISP芯片,ISP芯片與camera sensor封裝在一起,ISP控制sensor,實質(zhì)就是sensor寫寄存器。

????????????
??開始寫驅(qū)動了,說好聽的那是站在巨人的肩膀上借鑒別的驅(qū)動,說難聽的就是照葫蘆畫瓢,反正再改下Kconfig, Makefile,這驅(qū)動框架就算是有了。
??對驅(qū)動開發(fā)而言,前期的主要工作應(yīng)該就是配置GPIO口和芯片上電時序了。

????????
每個特定平臺在操作GPIO,電壓,時鐘上都會有自己的一套內(nèi)核API封裝實現(xiàn),只要能看懂會用這些API即可。配置完后,須在驅(qū)動初始化函數(shù)里,正確設(shè)置芯片的上電時序,確保芯片硬件上能正常工作起來。

?

3日 編寫I2C通信的封裝函數(shù),調(diào)試CPU與ISP間的I2C通信

對于一些成熟方案,上面的工作完成順利的話,驅(qū)動就差不多了。。很可惜,這塊ISP芯片在提升800萬camera性能的同時,并沒有給我?guī)碜銐蚨嗟募夹g(shù)支持,只能說,成也ISP,敗也ISP,解決方案全都自己來吧。萬里長征第一道坎便是I2C。

I2C通信本身要注意兩點,

1) SDA第9位ACK位為低時說明從設(shè)備有響應(yīng)。

2) Slave address

芯片手冊對這個從設(shè)備地址沒有統(tǒng)一的寫法,有的給出8位地址,有的給出7位地址,一開始容易混淆。如果給出的是8位地址,那第8位是指Write-0或者Read-1,實際的I2C芯片地址是7位的。Linux源碼里struct i2c_board_info的板基信息應(yīng)填寫7位I2C地址,另外,I2C芯片地址可以通過開發(fā)板shell環(huán)境下$ ls /sys/bus/i2c/devices/ 查看。舉個例子,

static struct i2c_board_info msm_camera_boardinfo[] __initdata = {
?{
??I2C_BOARD_INFO("ov8820", 0x78 >> 1),
?},

?

4日 FAE現(xiàn)場支持

FAE過來了,就確認了一件事,沒有現(xiàn)成驅(qū)動了,我徹底死心了。后來還發(fā)現(xiàn)一個規(guī)律,只要FAE來現(xiàn)場那就意味著啥都搞不出來了。。幾個人匯聚思想還不如一個人靜下心來研究。不過他們此行至少留下一份重要的資料-ISP芯片指令序列,camera所有功能的實現(xiàn)就靠它了。

?

5日 調(diào)通I2C

I2C的調(diào)通具有里程碑式的意義,它不僅標志著硬件性能正常開啟,更為后來璀璨絢爛的camera世界奠定了堅實的基礎(chǔ)。。

有段時間卡在I2C 通信上,給ISP芯片0x3c寫入開啟芯片命令0xf0成功,但是再發(fā)送其他命令全部失敗。

分析現(xiàn)象,I2C總線已經(jīng)可以通信了,問題只能是在ISP芯片上,于是,查電路圖,抄家伙起來把電路板上的電和時鐘全部再量一遍。。

????

結(jié)果發(fā)現(xiàn),有一路來自自動對焦馬達的電壓只有1.7V,沒有達到要求,驅(qū)動里沒有把它的GPIO拉高,導(dǎo)致芯片無法正常開啟工作。

?

6日 編寫預(yù)覽驅(qū)動,測量MIPI數(shù)據(jù)

根據(jù)葵花寶典里的ISP指令序列,在Linux驅(qū)動里和Android高通抽象層里填寫相關(guān)代碼,便可實現(xiàn)預(yù)覽功能。不過很不幸,光靠那兩下子預(yù)覽還是出不來的。開啟預(yù)覽程序時,用示波器量MIPI總線上的圖像數(shù)據(jù),能夠得到理想的MIPI波形,說明底層驅(qū)動的預(yù)覽功能OK,問題在于高通平臺的CAMIF VFE上,于是,翻閱高通的技術(shù)資料,學習添加VFE的一些配置。

?

7日 配置VFE,點亮預(yù)覽

預(yù)覽的成功具有劃時代的意義,它不僅標志著camera模塊在整個Android系統(tǒng)架構(gòu)中的成型,更為后來的拍照,錄像,圖像效果等功能奠定了堅實的基礎(chǔ)。預(yù)覽的出現(xiàn),意味著我不用再回答那些類似像“camera亮沒”之類的只注重表面現(xiàn)象的問題,從那一刻起,我仿佛站上了另一個高度,有種夢回漢唐的感覺。。??????

?????

?

8日 健壯代碼,編寫拍照功能,對焦功能

至此,整個camera模塊從上層應(yīng)用到底層驅(qū)動已全部打通,接下來就可以見神殺神,見佛殺佛了。。

?

?

9日 編寫白平衡,色彩效果,場景模式,ISO,防震,閃光燈等功能

這年頭碼農(nóng)傷不起啊!就按葵花寶典上的ISP指令序列往里使勁填充。

?

10日 登陸服務(wù)器提交代碼

總結(jié)

以上是生活随笔為你收集整理的Android高通平台调试Camera驱动全纪录的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。