OV2640瞭解

OV2640 是 OV(OmniVision)公司生產的一顆 1/4 寸的 CMOS UXGA(1632*1232)圖像傳感器。該傳感器體積小、工作電壓低,提供單片 UXGA 攝像頭和影像處理器的所有功能。通過 SCCB 總線控制,可以輸出整幀、子採樣、縮放和取窗口等方式的各種分辨率 8/10 位影像數據。該產品 UXGA 圖像最高達到 15 幀/秒(SVGA 可達 30 幀,CIF 可達 60 幀)。用戶可以完全控制圖像質量、數據格式和傳輸方式。所有圖像處理功能過程包括伽瑪曲線、白平衡、對比度、色度等都可以通過 SCCB 接口編程。OmmiVision 圖像傳感器應用獨有的傳感器技術,通過減少或消除光學或電子缺陷如固定圖案噪聲、拖尾、浮散等,提高圖像質量,得到清晰的穩定的彩色圖像。

OV2640 的特點有:
 高靈敏度、低電壓適合嵌入式應用
 標準的 SCCB 接口,兼容 IIC 接口
 支持 RawRGB、RGB(RGB565/RGB555)、GRB422、YUV(422/420)和 YCbCr(422)
輸出格式
 支持 UXGA、SXGA、SVGA 以及按比例縮小到從 SXGA 到 40*30 的任何尺寸
 支持自動曝光控制、自動增益控制、自動白平衡、自動消除燈光條紋、自動黑電平校
準等自動控制功能。同時支持色飽和度、色相、伽馬、銳度等設置。
 支持閃光燈
 支持圖像縮放、平移和窗口設置
 支持圖像壓縮,即可輸出 JPEG 圖像數據
 自帶嵌入式微處理器
在這裏插入圖片描述
OV2640 傳感器包括如下一些功能模塊。

  1. 感光整列(Image Array )
    OV2640 總共有 16321232 個像素,最大輸出尺寸爲 UXGA(16001200),即 200W 像素。
  2. 模擬信號處理( (Analog Processing )
    模擬信號處理所有模擬功能,幷包括:模擬放大(AMP)、增益控制、通道平衡和平衡控
    制等。
  3. 10 位 位 A/D 轉換( (A/D )原始的信號經過模擬放大後,分 G 和 BR 兩路進入一個 10 位的 A/D 轉換器,A/D 轉換器工作頻率高達 20M,與像素頻率完全同步(轉換的頻率和幀率有關)。除 A/D 轉換器外,該模塊還有黑電平校正(BLC)功能。
  4. 數字信號處理器(DSP )
    這個部分控制由原始信號插值到 RGB 信號的過程,並控制一些圖像質量:
     邊緣銳化(二維高通濾波器)
     顏色空間轉換(原始信號到 RGB 或者 YUV/YCbYCr)
     RGB 色彩矩陣以消除串擾
     色相和飽和度的控制
     黑/白點補償
     降噪
     鏡頭補償
     可編程的伽瑪
     十位到八位數據轉換
  5. 輸出格式模塊( (Output Formatter )
    該模塊按設定優先級控制圖像的所有輸出數據及其格式。
  6. 壓縮引擎( (Compression Engine)
    在這裏插入圖片描述
    從圖可以看出,壓縮引擎主要包括三部分:DCT、QZ 和 entropy encoder(熵編碼器),將原始的數據流,壓縮成 jpeg 數據輸出。
  7. 微處理器( Microcontroller )OV2640 自帶了一個 8 位微處理器,該處理器有 512 字節 SRAM,4KB 的 ROM,它提供一個靈活的主機到控制系統的指令接口,同時也具有細調圖像質量的功能。
  8. SCCB 接口(SCCB Interface )
    SCCB 接口控制圖像傳感器芯片的運行,詳細使用方法參照光盤的《OmniVision Technologies Seril Camera Control Bus(SCCB) Specification》這個文檔
  9. 數字視頻接口( Digital Video Port )OV2640 擁有一個 10 位數字視頻接口(支持 8 位接法),其 MSB 和 LSB 可以程序設置先後順序,ALIENTEK OV2640 模塊採用默認的 8 位連接方式,如圖 40.1.1.3 所示:
    在這裏插入圖片描述
    OV2640 的寄存器通過 SCCB 時序訪問並設置,SCCB 時序和 IIC 時序十分類似,在本章我們不做介紹,請大家參考光《OmniVision Technologies Seril Camera Control Bus(SCCB) Specification》這個文檔。

接下來,我們介紹一下 OV2640 的傳感器窗口設置、圖像尺寸設置、圖像窗口設置和圖像輸出大小設置,這幾個設置與我們的正常使用密切相關,有必要了解一下。其中,除了傳感器窗口設置是直接針對傳感器陣列的設置,其他都是 DSP 部分的設置了,接下來我們一個個介紹。

傳感器窗口設置,該功能允許用戶設置整個傳感器區域(16321220)的感興趣部分,也就是在傳感器裏面開窗,開窗範圍從 22~1632*1220 都可以設置,不過要求這個窗口必須大於等於隨後設置的圖像尺寸。傳感器窗口設置,通過:0X03/0X19/0X1A/0X07/0X17/0X18 等寄存器設置,寄存器定義請看 OV2640_DS(1.6).pdf 這個文檔(下同)。

圖像尺寸設置,也就是 DSP 輸出(最終輸出到 LCD 的)圖像的最大尺寸,該尺寸要小於等於前面我們傳感器窗口設置所設定的窗口尺寸。圖像尺寸通過0XC0/0XC1/0X8C 等寄存器設置。

圖像窗口設置,這裏起始和前面的傳感器窗口設置類似,只是這個窗口是在我們前面設置的圖像尺寸裏面,再一次設置窗口大小,該窗口必須小於等於前面設置的圖像尺寸。該窗口設置後的圖像範圍,將用於輸出到外部。圖像窗口設置通過:0X51/0X52/0X53/0X54/0X55/0X57等寄存器設置。

圖像輸出大小設置,這是最終輸出到外部的圖像尺寸。該設置將圖像窗口設置所決定的窗口大小,通過內部 DSP 處理,縮放成我們輸出到外部的圖像大小。該設置將會對圖像進行縮放處理,如果設置的圖像輸出大小不等於圖像窗口設置圖像大小,那麼圖像就會被縮放處理,只有這兩者設置一樣大的時候,輸出比例纔是 1:1 的。

因爲 OmniVision 公司公開的文檔,對這些設置實在是沒有詳細介紹。只能從他們提供的初始化代碼(還得去 linux 源碼裏面移植過來)裏面去分析規律,所以,這幾個設置,都是作
者根據 OV2640 的調試經驗,以及相關文檔總結出來的,不保證百分比正確,如有錯誤,還請大家指正。以上幾個設置,光看文字可能不太清楚,這裏我們畫一個簡圖有助於大家理解,如圖 40.1.1.4所示:
在這裏插入圖片描述
上圖,最終紅色框所示的圖像輸出大小,纔是 OV2640 輸出給外部的圖像尺寸,也就是顯示在 LCD 上面的圖像大小。當圖像輸出大小與圖像窗口不等時,會進行縮放處理,在 LCD 上面看到的圖像將會變形。

最後,我們介紹一下 OV2640 的圖像數據輸出格式。首先我們簡單介紹一些定義:

UXGA,即分辨率位 16001200 的輸出格式,類似的還有:SXGA(12801024)、WXGA+(1440900) XVGA(1280960)、WXGA(1280800)、XGA(1024768)、SVGA(800600)、VGA(640480)、CIF(352288)、WQVGA(400240)、QCIF(176144)和 QQVGA(160120)等。
PCLK,即像素時鐘,一個 PCLK 時鐘,輸出一個像素(或半個像素)。
VSYNC,即幀同步信號。
HREF /HSYNC,即行同步信號。
OV2640 的圖像數據輸出(通過 Y[9:0])就是在PCLK,VSYNC 和 HREF/ HSYNC 的控制下進行的。首先看看行輸出時序,如圖 40.1.1.5 所示:
在這裏插入圖片描述
從上圖可以看出,圖像數據在 HREF 爲高的時候輸出,當 HREF 變高後,每一個 PCLK 時鐘,輸出一個 8 位/10 位數據。我們採用 8 位接口,所以每個 PCLK輸出 1 個字節,且在 RGB/YUV輸出格式下,每個 tp=2 個 Tpclk,如果是 Raw 格式,則一個 tp=1 個 Tpclk。比如我們採用 UXGA時序,RGB565 格式輸出,每 2 個字節組成一個像素的顏色(高低字節順序可通過 0XDA 寄存器設置),這樣每行輸出總共有 16002 個 PCLK 週期,輸出 16002 個字節。

在這裏插入圖片描述
上圖清楚的表示了OV2640在UXGA模式下的數據輸出。我們按照這個時序去讀取OV2640的數據,就可以得到圖像數據。

最後說一下 OV2640 的圖像數據格式,我們一般用 2 種輸出方式:RGB565 和 JPEG。當輸出 RGB565 格式數據的時候,時序完全就是上面兩幅圖介紹的關係。以滿足不同需要。而當輸
出數據是 JPEG 數據的時候,同樣也是這種方式輸出(所以數據讀取方法一模一樣),不過 PCLK數目大大減少了,且不連續,輸出的數據是壓縮後的 JPEG 數據,輸出的 JPEG 數據以:0XFF,0XD8 開頭,以 0XFF,0XD9 結尾,且在0XFF,0XD8 之前,或者 0XFF,0XD9 之後,會有不定數量的其他數據存在(一般是 0),這些數據我們直接忽略即可,將得到的0XFF,0XD8~0XFF,0XD9 之間的數據,保存爲.jpg/.jpeg 文件,就可以直接在電腦上打開看到圖像了。

OV2640 自帶的 JPEG 輸出功能,大大減少了圖像的數據量,使得其在網絡攝像頭、無線視頻傳輸等方面具有很大的優勢。OV2640 我們就介紹到這。

STM32F4 自帶了一個數字攝像頭(DCMI)接口,該接口是一個同步並行接口,能夠接收外部 8 位、10 位、12 位或 14 位 CMOS 攝像頭模塊發出的高速數據流。可支持不同的數據格式:YCbCr4:2:2/RGB565 逐行視頻和壓縮數據 (JPEG)。

STM32F4 DCM 接口特點:
● 8 位、10 位、12 位或 14 位並行接口
● 內嵌碼/外部行同步和幀同步
● 連續模式或快照模式
● 裁剪功能
● 支持以下數據格式:
1,8/10/12/14 位逐行視頻:單色或原始拜爾(Bayer)格式
2,YCbCr 4:2:2 逐行視頻
3,RGB 565 逐行視頻
4,壓縮數據:JPEG

DCMI 接口包括如下一些信號:
1, 數據輸入(D[0:13]),用於接攝像頭的數據輸出,接 OV2640 我們只用了 8 位數據。
2, 水平同步(行同步)輸入(HSYNC),用於接攝像頭的 HSYNC/HREF 信號。
3, 垂直同步(場同步)輸入(VSYNC),用於接攝像頭的 VSYNC 信號。
4, 像素時鐘輸入(PIXCLK),用於接攝像頭的 PCLK 信號。
DCMI 接口是一個同步並行接口,可接收高速(可達 54 MB/s)數據流。該接口包含多達14 條數據線(D13-D0)和一條像素時鐘線(PIXCLK)。像素時鐘的極性可以編程,因此可以在像素時鐘的上升沿或下降沿捕獲數據。

DCMI 接收到的攝像頭數據被放到一個 32 位數據寄存器(DCMI_DR)中,然後通過通用DMA 進行傳輸。圖像緩衝區由 DMA 管理,而不是由攝像頭接口管理。

從攝像頭接收的數據可以按行/幀來組織(原始 YUV/RGB/拜爾模式),也可以是一系列JPEG 圖像。要使能 JPEG 圖像接收,必須將 JPEG 位(DCMI_CR 寄存器的位 3)置 1。數據流可由可選的 HSYNC(水平同步)信號和 VSYNC(垂直同步)信號硬件同步,或者通 過數據流中嵌入的同步碼同步。
在這裏插入圖片描述
DCMI 接口的數據與 PIXCLK(即 PCLK)保持同步,並根據像素時鐘的極性在像素時鐘上升沿/下降沿發生變化。HSYNC(HREF)信號指示行的開始/結束,VSYNC 信號指示幀的開始/結束。DCMI 信號波形如圖 40.1.2.2 所示:
在這裏插入圖片描述
上圖中,對應設置爲:DCMI_PIXCLK 的捕獲沿爲下降沿,DCMI_HSYNC 和 DCMI_VSYNC的有效狀態爲 1,注意,這裏的有效狀態實際上對應的是指示數據在並行接口上無效時,HSYNC/VSYNC 引腳上面的引腳電平。

本章我們用到 DCMI 的 8 位數據寬度,通過設置 DCMI_CR 中的 EDM[1:0]=00 設置。此時DCMI_D0~D7 有效,DCMI_D8~D13 上的數據則忽略,這個時候,每次需要 4 個像素時鐘來捕獲一個 32 位數據。捕獲的第一個數據存放在 32 位字的 LSB 位置,第四個數據存放在 32 位字的 MSB 位置 ,捕獲數據字節在 32 位字中的排布如表 40.1.2.1 所示:
在這裏插入圖片描述
從表 40.1.2.1 可以看出,STM32F4 的 DCMI 接口,接收的數據是低字節在前,高字節在後的,所以,要求攝像頭輸出數據也是低字節在前,高字節在後纔可以,否則就還得程序上處理字節順序,會比較麻煩。

DCMI 接口支持 DMA 傳輸,當 DCMI_CR 寄存器中的 CAPTURE 位置 1 時,激活 DMA接口。攝像頭接口每次在其寄存器中收到一個完整的32位數據塊時,都將觸發一個DMA請求。
DCMI 接口支持兩種同步方式:內嵌碼同步和硬件(HSYNC 和 VSYNC)同步。我們簡單介紹下硬件同步,詳細介紹請參考《STM32F4xx 中文數據手冊》第 13.5.3 節。
硬件同步模式下將使用兩個同步信號 (HSYNC/VSYNC)。根據攝像頭模塊/模式的不同,可能在水平/垂直同步期間內發送數據。由於系統會忽略 HSYNC/VSYNC 信號有效電平期間內接收的所有數據,HSYNC/VSYNC 信號相當於消隱信號。

爲了正確地將圖像傳輸到 DMA/RAM 緩衝區,數據傳輸將與 VSYNC 信號同步。選擇硬件同步模式並啓用捕獲(DCMI_CR 中的 CAPTURE 位置 1)時,數據傳輸將與 VSYNC 信號的無效電平同步(開始下一幀時)。之後傳輸便可以連續執行,由 DMA 將連續幀傳輸到多個連續的緩衝區或一個具有循環特性的緩衝區。爲了允許 DMA 管理連續幀,每一幀結束時都將激活VSIF(垂直同步中斷標誌,即幀中斷),我們可以利用這個幀中斷來判斷是否有一幀數據採集完成,方便處理數據。

DCMI 接口的捕獲模式支持:快照模式和連續採集模式。一般我們使用連續採集模式,通過 DCMI_CR 中的 CM 位設置。另外,DCMI 接口還支持實現了 4 個字深度的 FIFO,配有一個簡單的 FIFO 控制器,每次攝像頭接口從 AHB 讀取數據時讀指針遞增,每次攝像頭接口向FIFO 寫入數據時寫指針遞增。因爲沒有溢出保護,如果數據傳輸率超過 AHB 接口能夠承受的速率,FIFO 中的數據就會被覆蓋。如果同步信號出錯,或者 FIFO 發生溢出,FIFO 將復位,DCMI 接口將等待新的數據幀開始。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章