當前位置:首頁(yè) > 攝像頭技術(shù) > 攝像模組
攝像模組

Camera調試常見(jiàn)I2C問(wèn)題及解決方法

   在嵌入式系統,如手機等平臺上使用的Camera sensor通常是由類(lèi)似I2C這樣的總線(xiàn)進(jìn)行寄存器控制,由CPU端的Controller提供所需的驅動(dòng)時(shí)序,通常支持YUV和RGB等數據格式。有的Sensor需要由CPU進(jìn)行圖像處理工作,有的Sensor自己會(huì )集成圖像處理芯片,完成一些基礎的圖像處理工作,還有些高像素的Sensor甚至自己完成JPEG的編碼工作。因為硬件的多樣性,我所遇到的問(wèn)題可能和你的原因現象都不盡相同,分析內容僅供參考。Sensor端I2C總線(xiàn)沒(méi)有響應。
 
癥狀
      
    所有輸入電壓和時(shí)鐘信號都正常,往I2C總線(xiàn)上寫(xiě)入讀取寄存器數據的命令后,sensor沒(méi)有響應,沒(méi)有數據從I2C總線(xiàn)上輸出。
 
分析
 
    因為測量發(fā)現一切輸出信號都正常,所以往往都會(huì )懷疑Sensor硬件存在問(wèn)題,不過(guò)99%的情況,實(shí)際的原因總是因為I2C總線(xiàn)的ID值沒(méi)有設置對,導致設備不響應命令。據我的觀(guān)察,每次一個(gè)新的工程師在調試Sensor的時(shí)候幾乎都會(huì )遇上這個(gè)問(wèn)題。
 
    之所以這么容易設置錯誤的原因,是因為通常Camera Sensor的Spec上所寫(xiě)的I2C ID號,還包含了最后一位讀寫(xiě)方向位。而這一位在I2C總線(xiàn)的定義中,嚴格來(lái)說(shuō),不屬于ID的一部分,所以L(fǎng)inux I2C的驅動(dòng)API中的調用參數里的ID號,通常是不考慮這一位的,讀寫(xiě)方向位會(huì )在具體的讀寫(xiě)操作中,在寄存器中進(jìn)行設置。

解決
 
    例如Spec上會(huì )寫(xiě) 讀寫(xiě)寄存器操作 I2C ID 分別為 064和065,實(shí)際調用API時(shí)應該使用032作為該設備的I2C ID
 
 
癥狀
 
    與熒光燈的頻閃造成的大面積的滾動(dòng)水平條紋不同,表現出來(lái)的是一個(gè)像素高的水平條紋狀躁點(diǎn),位置不固定,數量比較多,而且隨光線(xiàn)強弱有一定的變化
 
 
    因為設置某些sensor寄存器的時(shí)候,會(huì )影響到這些水平條紋的顏色,所以基本上排除是在數據傳輸過(guò)程中板子對數據造成的干擾,也排除接觸不良的可能性,應該是數據在sensor內部已經(jīng)存在這些水平條紋。
    此外相同的初始化序列,相同的sensor,在廠(chǎng)商的demo版上也沒(méi)有發(fā)生這種情況,所以也基本排除軟件的問(wèn)題。
    最后,發(fā)現原先為了節省硬件成本,將sensor的兩個(gè)電壓相同的模擬電和數字電由同一芯片輸出供給,導致兩者之間互相干擾,影響了sensor的正常工作
 
解決
 
    將模擬電和數字電分離單獨供電;
 
圖像上有固定的鋸齒狀垂直條紋
 
癥狀

圖像上有明顯的垂直條紋,全屏分布,非常細密,好像百葉窗一樣。
 
分析
 
    仔細看可以發(fā)覺(jué)該垂直條紋實(shí)際上是由于圖像上相鄰的兩兩像素互相錯位造成的鋸齒狀條紋
 
    仔細分析spec可以看到,由于sensor是按字節送出圖像數據,在RGB565模式下,兩個(gè)字節表示一個(gè)像素。而在我所使用的CPU的Camera控制器中,數據是按4個(gè)字節也就是一個(gè)字為單位處理的,由于CPU這端是按LSB方式處理數據的,所以在一個(gè)字內部,未經(jīng)調整的話(huà),兩個(gè)像素的順序是顛倒過(guò)來(lái)的。也就是最終由DMA將數據送到內存的連續buffer中時(shí),像素的順序是:像素2,像素1,像素4,像素3。。。
 
 
解決
 
    用程序調整像素順序,為了減少附加計算對CPU的負擔,可以將這一步操作合并在其它類(lèi)似顏色轉換或PACK模式轉Planer模式等操作中。! z( q% q( x" C4 ^% P0 T
 
大尺寸時(shí)容易出現圖像錯位
 
癥狀
 
 
    當sensor工作在最大分辨率的情況下時(shí),圖像容易出現上下錯位的現象。
 
分析
 
    跟蹤程序可以看到這時(shí)候CPU的Camera控制器的FIFO緩存發(fā)生了溢出現象,也就是說(shuō)DMA來(lái)不及將FIFO中的數據傳送到內存中,該例中sensor在最大分辨率的情況下,輸出數據的時(shí)鐘工作在24MHZ,理論上說(shuō),DMA應該是來(lái)得急傳送數據的,但是可能因為內存帶寬還會(huì )被其它設備如CPU占用,導致來(lái)不及寫(xiě)入內存,使得DMA沒(méi)有最大負荷的工作,所以來(lái)不及將FIFO中的數據讀出,導致部分數據丟失,圖像錯位。4 j; q* g  T  C/ k9 D6 O- s
 
解決

 
 
    某些情況下,改變DMA傳輸的啟動(dòng)闕值可以解決該問(wèn)題,但是有些情況是無(wú)效的
 
    考慮到最高分辨率僅在拍照的時(shí)候使用,預覽的時(shí)候并不使用該分辨率,所以,在不影響預覽楨數的情況下,可以在拍照的一瞬間改變分辨率的同時(shí),修改sensor的時(shí)鐘頻率,降低到一個(gè)不會(huì )導致FIFO溢出的頻率
 
    另外,在截獲最高分辨率的圖像的同時(shí),盡量不執行其它的內存相關(guān)操作。截獲完圖像馬上切換回預覽用的分辨率。通過(guò)這些辦法,減少發(fā)生FIFO溢出的可能性。
 
 
讀取到的數據顯示出來(lái)的時(shí)候是花屏
 
癥狀
 
    讀取到的數據顯示出來(lái)的時(shí)候是花屏,但是明顯是隨著(zhù)所拍攝的對象的變化而變化的。
 
分析
 
    具體來(lái)說(shuō),常見(jiàn)的情況包括:
 
    顯示的數據是完全的花屏,或者可以看出物體大致輪廓,但顏色完全不對,例如一片綠色。這種情況往往是因為圖像數據格式不匹配,例如沒(méi)有處理YUV2RGB,YUV的各個(gè)分量采樣順序與軟件計算的取值順序不匹配等。
 
    如果花屏的具體表現是圖像不斷變換,沒(méi)有規律,通常有可能是數據接收的觸發(fā)邊沿有誤,導致沒(méi)有正確的接收數據。8 Q  v* t0 P* R
 
    另外有一次,花屏的時(shí)候,仔細觀(guān)察花屏的圖案,發(fā)現有部分錯位重復的圖案的跡象。因此分析可能是Sensor的物理layout,其長(cháng)寬比例與LCD剛好相反,仔細查看Spec得到確認。
 
解決2
 
    具體情況具體處理了。

相關(guān)文章
精彩評論:
0  相關(guān)評論