1. 程式人生 > >camera 驅動除錯常見問題總結

camera 驅動除錯常見問題總結

在嵌入式系統,如手機等平臺上使用的Camera sensor通常是由類似I2C這樣的匯流排進行暫存器控制,由CPU端的Controller提供所需的驅動時序,通常支援YUV和RGB等資料格式。有的Sensor需要由CPU進行影象處理工作,有的Sensor自己會整合影象處理晶片,完成一些基礎的影象處理工作,還有些高畫素的Sensor甚至自己完成JPEG的編碼工作。因為硬體的多樣性,我所遇到的問題可能和你的原因現象都不盡相同,分析內容僅供參考。

Sensor端I2C匯流排沒有響應

  • 症狀
    

    所有輸入電壓和時鐘訊號都正常,往I2C總線上寫入讀取暫存器資料的命令後,sensor沒有響應,沒有資料從I2C總線上輸出。

  • 分析

    因為測量發現一切輸出訊號都正常,所以往往都會懷疑Sensor硬體存在問題,不過99%的情況,實際的原因總是因為I2C匯流排的ID值沒有設定對,導致裝置不響應命令。據我的觀察,每次一個新的工程師在除錯Sensor的時候幾乎都會遇上這個問題。     之所以這麼容易設定錯誤的原因,是因為通常Camera Sensor的Spec上所寫的I2C ID號,還包含了最後一位讀寫方向位。而這一位在I2C匯流排的定義中,嚴格來說,不屬於ID的一部分,所以Linux I2C的驅動API中的呼叫引數裡的ID號,通常是不考慮這一位的,讀寫方向位會在具體的讀寫操作中,在暫存器中進行設定。
  • 解決
    例如Spec上會寫 讀寫暫存器操作 I2C ID 分別為 0x64和0x65,實際呼叫API時應該使用0x32作為該裝置的I2C ID

影象中有不斷變化的細密的水平條紋

  • 症狀
    與熒光燈的頻閃造成的大面積的滾動水平條紋不同,表現出來的是一個畫素高的水平條紋狀躁點,位置不固定,數量比較多,而且隨光線強弱有一定的變化
  • 分析
    因為設定某些sensor暫存器的時候,會影響到這些水平條紋的顏色,所以基本上排除是在資料傳輸過程中板子對資料造成的干擾,也排除接觸不良的可能性,應該是資料在sensor內部已經存在這些水平條紋。     此外相同的初始化序列,相同的sensor,在廠商的demo版上也沒有發生這種情況,所以也基本排除軟體的問題。     最後,發現原先為了節省硬體成本,將sensor的兩個電壓相同的模擬電和數字電由同一晶片輸出供給,導致兩者之間互相干擾,影響了sensor的正常工作
  • 解決
    將模擬電和數字電分離單獨供電

影象上有固定的鋸齒狀垂直條紋

  • 症狀
    影象上有明顯的垂直條紋,全屏分佈,非常細密,好像百葉窗一樣。
  • 分析
    仔細看可以發覺該垂直條紋實際上是由於影象上相鄰的兩兩畫素互相錯位造成的鋸齒狀條紋     仔細分析spec可以看到,由於sensor是按位元組送出影象資料,在RGB565模式下,兩個位元組表示一個畫素。而在我所使用的CPU的Camera控制器中,資料是按4個位元組也就是一個字為單位處理的,由於CPU這端是按LSB方式處理資料的,所以在一個字內部,未經調整的話,兩個畫素的順序是顛倒過來的。也就是最終由DMA將資料送到記憶體的連續buffer中時,畫素的順序是:畫素2,畫素1,畫素4,畫素3。。。
  • 解決
    用程式調整畫素順序,為了減少附加計算對CPU的負擔,可以將這一步操作合併在其它類似顏色轉換或PACK模式轉Planer模式等操作中。

大尺寸時容易出現影象錯位

  • 症狀
    當sensor工作在最大解析度的情況下時,影象容易出現上下錯位的現象。
  • 分析
    跟蹤程式可以看到這時候CPU的Camera控制器的FIFO快取發生了溢位現象,也就是說DMA來不及將FIFO中的資料傳送到記憶體中,該例中sensor在最大解析度的情況下,輸出資料的時鐘工作在24MHZ,理論上說,DMA應該是來得急傳送資料的,但是可能因為記憶體頻寬還會被其它裝置如CPU佔用,導致來不及寫入記憶體,使得DMA沒有最大負荷的工作,所以來不及將FIFO中的資料讀出,導致部分資料丟失,影象錯位。
  • 解決
    某些情況下,改變DMA傳輸的啟動闕值可以解決該問題,但是有些情況是無效的     考慮到最高解析度僅在拍照的時候使用,預覽的時候並不使用該解析度,所以,在不影響預覽楨數的情況下,可以在拍照的一瞬間改變解析度的同時,修改sensor的時鐘頻率,降低到一個不會導致FIFO溢位的頻率     另外,在截獲最高解析度的影象的同時,儘量不執行其它的記憶體相關操作。截獲完影象馬上切換回預覽用的解析度。通過這些辦法,減少發生FIFO溢位的可能性。

讀取到的資料顯示出來的時候是花屏

  • 症狀
    讀取到的資料顯示出來的時候是花屏,但是明顯是隨著所拍攝的物件的變化而變化的。
  • 分析
    具體來說,常見的情況包括:     顯示的資料是完全的花屏,或者可以看出物體大致輪廓,但顏色完全不對,例如一片綠色。這種情況往往是因為影象資料格式不匹配,例如沒有處理YUV2RGB,YUV的各個分量取樣順序與軟體計算的取值順序不匹配等。     如果花屏的具體表現是影象不斷變換,沒有規律,通常有可能是資料接收的觸發邊沿有誤,導致沒有正確的接收資料。     另外有一次,花屏的時候,仔細觀察花屏的圖案,發現有部分錯位重複的圖案的跡象。因此分析可能是Sensor的物理layout,其長寬比例與LCD剛好相反,仔細檢視Spec得到確認。
  • 解決
    具體情況具體處理了。