標籤:android http io ar os sp 資料 on 2014
項目比較緊,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日 登陸伺服器提交代碼
請把Camera hold住 - Android高通平台調試Camera驅動全紀錄