Android高通平台調試Camera驅動全紀錄


項目比較緊,3周內把一個帶有外置ISP,MIPI數據通信,800萬像素的camera從無驅動到實現客戶全部需求。


1日 搭平台,建環境,編譯內核,燒寫代碼。

我是一直在Window下搭個虛擬機登服務器搞開發的,對Linux系統環境實在無愛,每每一到項目剛開始要搭環境了,內心總有點排斥,過程就比較糾結,看來以后還是要搞個linux真機玩玩。


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

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

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

 

3日 編寫I2C通信的封裝函數,調試CPU與ISP間的I2C通信

對於一些成熟方案,上面的工作完成順利的話,驅動就差不多了。。很可惜,這塊ISP芯片在提升800萬camera性能的同時,並沒有給我帶來足夠多的技術支持,只能說,成也ISP,敗也ISP,解決方案全都自己來吧。萬里長征第一道坎便是I2C。

I2C通信本身要注意兩點,

1) SDA第9位ACK位為低時說明從設備有響應。

2) Slave address

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

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

 

4日 FAE現場支持

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

 

5日 調通I2C

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

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

分析現象,I2C總線已經可以通信了,問題只能是在ISP芯片上,於是,查電路圖,抄家伙起來把電路板上的電和時鍾全部再量一遍。。

    

結果發現,有一路來自自動對焦馬達的電壓只有1.7V,沒有達到要求,驅動里沒有把它的GPIO拉高,導致芯片無法正常開啟工作。

 

6日 編寫預覽驅動,測量MIPI數據

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

 

7日 配置VFE,點亮預覽

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

     

 

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

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

 

 

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

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

 

10日 登陸服務器提交代碼


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM