Camera driver V4L2驅動架構介紹

2022-08-17 09:57:19 字數 2501 閱讀 7004

●    攝像頭方面的知識

要了解選用的攝像頭的特性,包括訪問控制方法、各種引數的配置方法、訊號輸出型別等。

●    v4l2的api和資料結構

編寫驅動前要熟悉應用程式訪問v4l2的方法及設計到的資料結構。

●    3c2440 camera控制器+ov9650(ov9655)

●    v4l2 api及資料結構

●    v4l2驅動框架

●    ov9650(ov9655)+s3c2440+v4l2例項

二、s3c2440 camera控制器+ov9650(ov9655)

(1)s3c2440 camera控制器介紹

s3c2440支援itu-r bt601/656格式的數字影象輸入,支援的2個通道的dma,preview通道和codec通道,參見下圖。

preview通道可以將ycbcr4:2:2格式的影象轉換為rgb(16bit或24bit)格式的資料,並存放於為preview dma分配的記憶體中,最大解析度為640*480。主要用於本地液晶屏顯示。如果將preview dma的記憶體和framebuffer記憶體重疊的話,就可以實現採集直接輸出到液晶屏上了。

codec通道可以輸出ycbcr4:2:0或ycbcr4:2:2格式到為codec dma分配的記憶體中。最大解析度為4096*4096。主要用於影象的編譯碼處理。

上圖中的window cut功能是指在影象可以先做乙個裁剪。通過設定ciwdofst完成此功能,見下圖。影象進入p、c通道後,各自的scaler單元還可以對其進行縮放、旋轉等處理。

s3c2440 camera控制器支援桌球儲存。為了防止採集和輸出之間的衝突,採用了桌球儲存方式。每次採集一幀後,自動轉到下乙個儲存區。如果你因為記憶體空間不足,不想使用此功能的話,可以將四個區域設定到同一塊空間。

在做影象處理時,需要關注到最後儲存區中的影象格式,如codec通道硬體自動把y、cb、cr分離儲存。

s3c2440 camera 控制器last irq功能的使用,也是需要掌握的。如果處理不好,輸出的影象效果會受影響。

控制器會在每個vsync下降沿判斷imgcpten訊號等命令。如果在下降沿發現imgcpten訊號有效,則產生irq中斷。然後才開始一幀影象的真正採集。而如果在vsync下降沿判斷到imgcpten為低電平且之前lastirqen沒有使能,則不會產生任何中斷,且不會再進行下一幀的採集。如果你想在imgcpten關閉後,一幀採集完後產生乙個中斷通知你,那麼就需要在最後一次中斷產生前(stop capturing後的vysnc下將沿)使能lastirq就可以了。

我在移植linux驅動時就遇到了乙個last irq的問題。現象是輸出影象上面總是有一條比其它部分反應慢。採集運**像,就能看出現象。檢視**是因為沒有設立lastirq,因為每次如果不在lastirq產生的情況下讀取,影象緩衝中的資料是不穩定的,可能照成影象不完整。修改**支援lastirq後,問題解決。

camera控制器時鐘設定也是需要注意的,ov9650需要camera控制器為其提供時鐘。

提供給外部攝像頭的時鐘是由upll輸出時鐘分頻得到的。而camif的時鐘是由hclk提供的。本例中,提供給ov9650的時鐘為24m。

(2)ov9650(ov9655)設定方法

ov9650是omnivision公司的coms攝像頭,130萬畫素,支援sxvga、vga、qvga、cif等影象輸出格式。 最大速率在sxvga時為15fps,在vga時為30fps。

ov9650攝像頭時序如下圖:

上圖中d[9:2]用於8-bityuv或者rgb565/rgb555(d[9]msb、d[2]lsb)。d[9:0]用於10-bit rgb。本例中使用8-bit yuv模式。

我手邊開發板的camera和s3c2440的接線原理圖如下(對應camera中具體的訊號名稱參見前文的驅動整體架構圖)。

注:gpg12用於pwen訊號

ov9650攝像頭設定方法是通過sccb匯流排設定

sccb可以看作是一種簡化的i2c匯流排,可以使用io模擬sccb時序。

(3)編寫arm測試**測試camera功能

在keil環境下編寫乙個測試**完成從攝像頭採集影象輸出到液晶屏。下面列出程式的流程。

(4)編寫測試**過程中常見的問題

●    攝像頭暫存器的配置

因為攝像頭有很多暫存器,可能一下無法理解裡面所有的配置含義,所以開始時希望得到乙份可用的配置。但往往從別人的測試**中拿到配置後,仍然無法使用。我這裡列出幾個可能的原因:(1)攝像頭中的影象輸出格式和你在camera控制器中設定的不一致,同乙個攝像頭可以設定多種輸入格式,如:ycbycr或cbycry。(2)影象輸出的一些時序和你的camera控制器設定不一致,攝像頭可以設定一些時序,如:影象資料在campclk的上公升沿有效還是下降沿有效。(3)注意輸出影象的格式和framebuffer控制器的匹配,如位元組順序等問題。

●    ov9650和ov9655的使用區別

這裡主要列出兩者之間在復位訊號上有差別,ov9650是高電平復位,而ov9655是低電平復位。

Camera driver V4L2驅動架構介紹

攝像頭方面的知識 要了解選用的攝像頭的特性,包括訪問控制方法 各種引數的配置方法 訊號輸出型別等。v4l2的api和資料結構 編寫驅動前要熟悉應用程式訪問v4l2的方法及設計到的資料結構。3c2440 camera控制器 ov9650 ov9655 v4l2 api及資料結構 v4l2驅動框架 ov...

清晰認清L2 L3 L4 Switch

第二層交換機 是根據第二層資料鏈路層的mac位址和通過站表選擇路由來完成端到端的資料交換的。因為站表的建立與維護是由交換機自動完成,而路由器又是屬於第三層裝置,其定址過程是根據ip位址定址和通過路由表與路由協議產生的。所以,第二層交換機的最大好處是資料傳輸速度快,因為它只須識別資料幀中的mac位址,...

v4l2框架v4l2 device API分析

涉及到的結構體 struct v4l2 device在v4l2框架中充當所有v4l2 subdev的父裝置,管理著註冊在其下的子裝置 struct v4l2 device struct device 代表子裝置,包含了子裝置的相關屬性和操作 struct device struct subdev s...