**:
之前一段時間有幸在高通android平台上除錯2款camera sensor,一款是ov的5m yuv sensor,支援jpeg out,同時也支援af,除錯比較比較簡單,因為別的專案已經在使用了,只是把相關的驅動移植過來就好;另一款是samsung的一款比較新的3m yuv ff sensor,在最新專案中要使用的,本文以除錯該sensor為例,從底層驅動的角度分享一下高通android平台下除錯camera的經驗,而對於高通平台camera部分的架構以及原理不做過多的介紹。
一、準備工作
從專案中看,在硬體(板子)ready前,軟體部分是要準備好的。單獨從底層驅動來看,軟體部分可以分為2個部分,乙個是高通平台相關的,再乙個就是sensor部分的,通常的做法就是把sensor相關的設定移植到高通平台的框架之中。這樣就需要先拿到sensor的spec以及廠商提供的sensor register setting file。spec的用途是清楚高通平台和sensor通訊(讀寫暫存器)的時序以及相關引數設定;而廠商提供的setting file則是在使用camera各個功能(preview、snapshot...)時候需要寫入到sensor中的.
本專案中,高通平台為msm7x27,camera為samsung 5ca。從spec中知道,該sensor的i2c id為0x78,i2c的通訊採用雙位元組方式,另外也弄清楚了讀寫sensor暫存器的規則,從除錯角度看這些基本上夠用了。另外廠商提供的setting file,其實就是暫存器列表,告訴我們再什麼時候將哪些暫存器寫入什麼值,通常是乙個暫存器位址再加上乙個暫存器的值,不過samsung提供的是pc上除錯使用的文字,需要自己轉換成c語言中的二維陣列。從檔案中看,暫存器資料可以分為幾個部分:初始化、iq設定(tuning相關)、clk設定、preview設定、snapshot設定,基本上有這幾個就夠了,其他的比如調節亮度啦、設定特殊效果啦、設定白平衡啦等等都可以自己通過spec來完成。
sensor部分的東西搞定後,接下來就是修改高通camera部分的驅動了,主要有:
kernal部分:
1、檢查sensor的電源配置,並修改軟體中的設定。本專案中使用2.8/1.8/1.5共3個電源。
2、檢查並修改sensor reset設定。注意reset的時間設定,務必和spec中一致,否則會導致sensor無法工作。
3、修改i2c驅動,使用雙位元組讀寫的介面,並完成讀取sensor id的介面。這個用來檢驗i2c通訊是否ok
4、匯入暫存器設定,分別在初始化、preview、snapshot等幾個部分寫入對應的暫存器值。
注意:reset以及寫暫存器部分一定要按照spec的規定加入一些delay,否則會導致sensor工作異常
user空間部分:
這個部分主要是根據硬體的規格來配置vfe,如sensor輸出資料的格式,介面方式、解析度大小、同步訊號模式等,比較簡單,但一定要檢查仔細,任何乙個地方不對都會導致除錯失敗。
到這裡為止,軟體部分的準備已經告一段落了。
二、除錯環境準備(板子出來了,但sensor sample還沒到位)
首先,測試點的準備。
除錯前就需要想好,如果sensor無法工作,要怎麼去debug,這就需要去測量一些訊號,比如power、reset、i2c、m/p clk、h/v同步訊號、資料訊號等,要確保這些訊號都可以測量到。
其次要選擇軟體的除錯環境,這裡選擇在adb環境中執行高通的mm-qcamera-test程式來除錯,相關的trace都可以列印出來。
這樣就萬事俱備,只欠sensor了。
三、除錯(sensor終於拿到了)
將sensor接到板子上,開機後,adb中執行除錯程式,preview畫面並沒有出來,失敗,有點小失望,本來覺得可以一氣呵成的,但畢竟這是乙個全新的sensor,任何乙個地方沒有想到位做到位都會導致失敗。那就找原因吧。
1、首先從trace得知,i2c已經讀到了sensor的id:0x05ca,這可以說明i2c通訊是沒有問題的
2、接著檢查sensor的電源配置,測量了供給sensor的3個電源,都是ok的。
3、測量mclk,這個是提供給sensor使用的,正常(24mhz)
4、測量pclk,這個是sensor輸出的,正常(58mhz,高通上限為96mhz),和暫存器中配置的一致。
5、測量h/v同步訊號,這個是sensor輸出的,正常。和fps和解析度一致。
6、測量資料訊號,這個是sensor輸出的,正常。(資料訊號,示波器上可以看到)
這樣看來,sensor已經在正常工作了,但為何preview畫面沒有出來呢?繼續檢查高通這邊的設定。
從trace看,高通的vfe已經reset並且start了,但一直接沒有輸出preview資料,這就奇怪了,sensor明明已經輸出了,為什麼vfe接收後並沒有把資料吐出來呢,難道這個sensor輸出的資料vfe無法識別?為了驗證這個問題,我在另一塊板子上測量了ov sensor輸出資料的波形,主要是m/p clk、h/v同步訊號,然後再拿來對比,不過並沒有發現異常,只是h/v同步訊號有所不同,主要高低的占空比不太一致,會不會是這樣訊號的問題呢?為了進一步驗證,我同時測量了h/v 訊號和資料訊號,這時發現ov sensor輸出的資料訊號是包在v幀同步訊號的低電平中;而samsung 5ca輸出的資料訊號是包在v幀同步訊號的高電平中,會不會是因為v訊號極性設定不對導致vfe沒有讀取到sensor輸出的資料呢?重新檢查了一下高通vfe的設定,果然有乙個引數是用來設定v訊號極性的,這個引數預設是active low的,我這邊並沒有去修改它。接著把這個引數修改為active high,重新build、download後,開機執行,ok了,preview畫面可以正常顯示了。到這裡為止sensor的硬體除錯可以算作完成了,後續的其他功能也可以慢慢完善了。
note:v同步即幀同步訊號,代表一幀資料的開始,vfe會根據該訊號來讀取一幀資料。
h同步即行同步訊號,代表一行資料的開始,vfe會根據該訊號來讀取一行資料。h訊號一定是包在v同步中的。
高通Android平台硬體除錯之Camera篇
之前一段時間有幸在高通android平台上除錯2款camera sensor,一款是ov的5m yuv sensor,支援jpeg out,同時也支援af,除錯比較比較簡單,因為別的專案已經在使用了,只是把相關的驅動移植過來就好 另一款是samsung的一款比較新的3m yuv ff sensor,...
Android 高通平台Camera除錯
1.af除錯部分 1 通過屬性控制 af log控制 setprop persist.vendor.camera.loginfomask 0x8000000 af info level log setprop persist.vendor.camera.lo erbosemask 0x8000000...
年前高通平台驅動除錯
最近接了個任務 再6085平台上除錯atheros6002wifi模組。按理說,高通已經把工作都做完了,我沒什麼好做的了。可是一直都不是很順。首先,我拿到的模組是sd插卡式的。結果我的開發板上沒有焊大sd插槽,只有乙個tf插槽。沒辦法,只能自己用排線飛了。飛完後,好像怎麼都沒有按照預期的執行。跟蹤日...