1. 程式人生 > >第45章 DCMI—OV2640攝像頭—零死角玩轉STM32-F429系列

第45章 DCMI—OV2640攝像頭—零死角玩轉STM32-F429系列

 

第45章     DCMI—OV2640攝像頭

全套200集視訊教程和1000PDF教程請到秉火論壇下載:www.firebbs.cn

野火視訊教程優酷觀看網址:http://i.youku.com/firege

本章參考資料:《STM32F4xx參考手冊》、《STM32F4xx規格書》、庫幫助文件《stm32f4xx_dsp_stdperiph_lib_um.chm》。

關於開發板配套的OV2640攝像頭引數可查閱《ov2640datasheet》配套資料獲知。

STM32F4晶片具有浮點運算單元,適合對影象資訊使用DSP進行基本的影象處理,其處理速度比傳統的816位機快得多,而且它還具有與攝像頭通訊的專用

DCMI介面,所以使用它驅動攝像頭採集影象資訊並進行基本的加工處理非常適合。本章講解如何使用STM32驅動OV2640型號的攝像頭。

45.1 攝像頭簡介

在各類資訊中,影象含有最豐富的資訊,作為機器視覺領域的核心部件,攝像頭被廣泛地應用在安防、探險以及車牌檢測等場合。攝像頭按輸出訊號的型別來看可以分為數字攝像頭和模擬攝像頭,按照攝像頭影象感測器材料構成來看可以分為CCDCMOS。現在智慧手機的攝像頭絕大部分都是CMOS型別的數字攝像頭。

45.1.1 數字攝像頭跟模擬攝像頭區別

    輸出訊號型別

數字攝像頭輸出訊號為數字訊號,模擬攝像頭輸出訊號為標準的模擬訊號。

    

介面型別

數字攝像頭有USB介面(比如常見的PC端免驅攝像頭)IEE1394火線介面(由蘋果公司領導的開發聯盟開發的一種高速度傳送介面,資料傳輸率高達800Mbps)、千兆網介面(網路攝像頭)。模擬攝像頭多采用AV視訊端子(訊號線+地線)或S-VIDEO(即蓮花頭--SUPER VIDEO,是一種五芯的介面,由兩路視訊亮度訊號、兩路視訊色度訊號和一路公共遮蔽地線共五條芯線組成)。

    解析度

模擬攝像頭的感光器件,其畫素指標一般維持在752(H)*582(V)左右的水平,畫素數一般情況下維持在41萬左右。現在的數字攝像頭解析度一般從數十萬到數千萬。但這並不能說明數字攝像頭的成像解析度就比模擬攝像頭的高,原因在於模擬攝像頭輸出的是模擬視訊訊號,一般直接輸入至電視或監視器,其感光器件的解析度與電視訊號的掃描數呈一定的換算關係,影象的顯示介質已經確定,因此模擬攝像頭的感光器件解析度不是不能做高,而是依據於實際情況沒必要做這麼高。

45.1.2 CCD與CMOS的區別

攝像頭的影象感測器CCDCMOS感測器主要區別如下:

    成像材料

CCDCMOS的名稱跟它們成像使用的材料有關,CCD"電荷耦合器件"(Charge Coupled Device)的簡稱,而CMOS"互補金氧半導體"(Complementary Metal Oxide Semiconductor)的簡稱。

    功耗

由於CCD的畫素由MOS電容構成,讀取電荷訊號時需使用電壓相當大(至少12V)的二相或三相或四相時序脈衝訊號,才能有效地傳輸電荷。因此CCD的取像系統除了要有多個電源外,其外設電路也會消耗相當大的功率。有的CCD取像系統需消耗2~5W的功率。而CMOS光電感測器件只需使用一個單電源5V3V,耗電量非常小,僅為CCD1/8~1/10,有的CMOS取像系統只消耗20~50mW的功率。

    成像質量

CCD感測器件製作技術起步早,技術成熟,採用PN結或二氧化矽(sio2)隔離層隔離噪聲,所以噪聲低,成像質量好。與CCD相比,CMOS的主要缺點是噪聲高及靈敏度低,不過現在隨著CMOS電路消噪技術的不斷髮展,為生產高密度優質的CMOS感測器件提供了良好的條件,現在的CMOS感測器已經佔領了大部分的市場,主流的單反相機、智慧手機都已普遍採用CMOS感測器。

45.2 OV2640攝像頭

本章主要講解實驗板配套的攝像頭,它的實物見圖 451,該攝像頭主要由鏡頭、影象感測器、板載電路及下方的訊號引腳組成。

451 實驗板配套的OV2640攝像頭

鏡頭部件包含一個鏡頭座和一個可旋轉調節距離的凸透鏡,通過旋轉可以調節焦距,正常使用時,鏡頭座覆蓋在電路板上遮光,光線只能經過鏡頭傳輸到正中央的影象感測器,它採集光線訊號,然後把採集得的資料通過下方的訊號引腳輸出資料到外部器件。

45.2.1 OV2640感測器簡介

影象感測器是攝像頭的核心部件,上述攝像頭中的影象感測器是一款型號為OV2640CMOS型別數字影象感測器。該感測器支援輸出最大為200萬畫素的影象 (1600x1200解析度),支援使用VGA時序輸出影象資料,輸出影象的資料格式支援YUV(422/420)YCbCr422RGB565以及JPEG格式,若直接輸出JPEG格式的影象時可大大減少資料量,方便網路傳輸。它還可以對採集得的影象進行補償,支援伽瑪曲線、白平衡、飽和度、色度等基礎處理。根據不同的解析度配置,感測器輸出影象資料的幀率從15-60幀可調,工作時功率在125mW-140mW之間。

45.2.2 OV2640引腳及功能框圖

OV2640感測器採用BGA封裝,它的前端是採光視窗,引腳都在背面引出,引腳的分佈見圖 452

452 OV2640感測器引腳分佈圖

圖中的非彩色部分是電源相關的引腳,彩色部分是主要的訊號引腳,介紹如下表 451

451 OV7670管腳

管腳名稱

管腳型別

管腳描述

SIO_C

輸入

SCCB匯流排的時鐘線,可類比I2CSCL

SIO_D

I/O

SCCB匯流排的資料線,可類比I2CSDA

RESETB

輸入

系統復位管腳,低電平有效

PWDN

輸入

掉電/省電模式,高電平有效

HREF

輸出

行同步訊號

VSYNC

輸出

幀同步訊號

PCLK

輸出

畫素同步時鐘輸出訊號

XCLK

輸入

外部時鐘輸入埠,可接外部晶振

Y0Y9

輸出

畫素資料輸出埠

下面我們配合圖 453中的OV2640功能框圖講解這些訊號引腳。

453 OV2640功能框圖

(1)    控制暫存器

標號處的是OV2640的控制暫存器,它根據這些暫存器配置的引數來執行,而這些引數是由外部控制器通過SIO_CSIO_D引腳寫入的,SIO_CSIO_D使用的通訊協議跟I2C十分類似,在STM32中我們完全可以直接用I2C硬體外設來控制。

(2)    通訊、控制訊號及時鐘

標號‚處包含了OV2640的通訊、控制訊號及外部時鐘,其中PCLKHREFVSYNC分別是畫素同步時鐘、行同步訊號以及幀同步訊號,這與液晶屏控制中的訊號是很類似的。RESETB引腳為低電平時,用於復位整個感測器晶片,PWDN用於控制晶片進入低功耗模式。注意最後的一個XCLK引腳,它跟PCLK是完全不同的,XCLK是用於驅動整個感測器晶片的時鐘訊號,是外部輸入到OV2640的訊號;而PCLKOV2640輸出資料時的同步訊號,它是由OV2640輸出的訊號。XCLK可以外接晶振或由外部控制器提供,若要類比XCLK之於OV2640就相當於HSE時鐘輸入引腳與STM32晶片的關係,PCLK引腳可類比STM32I2C外設的SCL引腳。

(3)    感光矩陣

標號ƒ處的是感光矩陣,光訊號在這裡轉化成電訊號,經過各種處理,這些訊號儲存成由一個個畫素點表示的數字影象。

(4)    資料輸出訊號

標號„處包含了DSP處理單元,它會根據控制暫存器的配置做一些基本的影象處理運算。這部分還包含了影象格式轉換單元及壓縮單元,轉換出的資料最終通過Y0-Y9引腳輸出,一般來說我們使用8根據資料線來傳輸,這時僅使用Y2-Y9引腳,OV2640與外部器件的連線方式見圖 454

454 8位資料線接法

45.2.3 SCCB時序

外部控制器對OV2640暫存器的配置引數是通過SCCB匯流排傳輸過去的,而SCCB匯流排跟I2C十分類似,所以在STM32驅動中我們直接使用片上I2C外設與它通訊。SCCB與標準的I2C協議的區別是它每次傳輸只能寫入或讀取一個位元組的資料,而I2C協議是支援突發讀寫的,即在一次傳輸中可以寫入多個位元組的資料(EEPROM中的頁寫入時序即突發寫)。關於SCCB協議的完整內容可檢視配套資料裡的《SCCB協議》文件,下面我們簡單介紹下。

SCCB的起始、停止訊號及資料有效性

SCCB的起始訊號、停止訊號及資料有效性與I2C完全一樣,見圖 455及圖 456

    起始訊號:在SIO_C為高電平時,SIO_D出現一個下降沿,則SCCB開始傳輸。

    停止訊號:在SIO_C為高電平時,SIO_D出現一個上升沿,則SCCB停止傳輸。

    資料有效性:除了開始和停止狀態,在資料傳輸過程中,當SIO_C為高電平時,必須保證SIO_D上的資料穩定,也就是說,SIO_D上的電平變換隻能發生在SIO_C為低電平的時候,SIO_D的訊號在SIO_C為高電平時被採集。

455 SCCB停止訊號

456 SCCB的資料有效性

SCCB資料讀寫過程

SCCB協議中定義的讀寫操作與I2C也是一樣的,只是換了一種說法。它定義了兩種寫操作,即三步寫操作和兩步寫操作。三步寫操作可向從裝置的一個目的暫存器中寫入資料,見圖 457。在三步寫操作中,第一階段傳送從裝置的ID地址+W標誌(等於I2C的裝置地址:7位裝置地址+讀寫方向標誌),第二階段傳送從裝置目標暫存器的8位地址,第三階段傳送要寫入暫存器的8位資料。圖中的"X"資料位可寫入10,對通訊無影響。

457 SCCB的三步寫操作

而兩步寫操作沒有第三階段,即只向從器件傳輸了裝置ID+W標誌和目的暫存器的地址,見圖 458。兩步寫操作是用來配合後面的讀暫存器資料操作的,它與讀操作一起使用,實現I2C的複合過程。

458 SCCB的兩步寫操作

兩步讀操作,它用於讀取從裝置目的暫存器中的資料,見圖 459。在第一階段中傳送從裝置的裝置ID+R標誌(裝置地址+讀方向標誌)和自由位,在第二階段中讀取暫存器中的8位資料和寫NA (非應答訊號)。由於兩步讀操作沒有確定目的暫存器的地址,所以在讀操作前,必需有一個兩步寫操作,以提供讀操作中的暫存器地址。

459 SCCB的兩步讀操作

可以看到,以上介紹的SCCB特性都與I2C無區別,而I2CSCCB還多出了突發讀寫的功能,所以SCCB可以看作是I2C的子集,我們完全可以使用STM32I2C外設來與OV2640進行SCCB通訊。

45.2.4 OV2640的暫存器

控制OV2640涉及到它很多的暫存器,可直接查詢《ov2640datasheet》瞭解,通過這些暫存器的配置,可以控制它輸出影象的解析度大小、影象格式及影象方向等。要注意的是OV2640有兩組暫存器,這兩組暫存器有部分地址重合,通過設定地址為0xFFRA_DLMT暫存器可以切換暫存器組,當RA_DLMT暫存器為0時,通過SCCB傳送的暫存器地址在DSP相關的暫存器組定址,見圖 4510RA_DLMT暫存器為1時,在Sensor相關的暫存器組定址,圖 4510

4510 0xFF=0時的DSP相關暫存器說明(部分)

4511 0xFF=1時的Sensor相關暫存器說明(部分)

官方還提供了一個《OV2640_Camera_app》的文件,它針對不同的配置需求,提供了配置範例,見圖 4512。其中write_SCCB是一個利用SCCB向暫存器寫入資料的函式,第一個引數為要寫入的暫存器的地址,第二個引數為要寫入的內容。

4512 調節幀率的暫存器配置範例

45.2.5 畫素資料輸出時序

主控器控制OV2640時採用SCCB協議讀寫其暫存器,而它輸出影象時則使用VGA時序(還可用SVGAUXGA,這些時序都差不多),這跟控制液晶屏輸入影象時很類似。OV2640輸出影象時,一幀幀地輸出,在幀內的資料一般從左到右,從上到下,一個畫素一個畫素地輸出(也可通過暫存器修改方向),見圖 4513

4513 攝像頭資料輸出

例如,見圖 4514和圖 4515,若我們使用Y2-Y9資料線,影象格式設定為RGB565,進行資料輸出時,Y2-Y9資料線會在1個畫素同步時鐘PCLK的驅動下發送1位元組的資料訊號,所以2PCLK時鐘可傳送1RGB565格式的畫素資料。畫素資料依次傳輸,每傳輸完一行資料時,行同步訊號HREF會輸出一個電平跳變訊號,每傳輸完一幀影象時,VSYNC會輸出一個電平跳變訊號。

4514畫素同步時序

4515 幀影象同步時序

45.3 STM32的DCMI介面簡介

STM32F4系列的控制器包含了DCMI數字攝像頭介面(Digital camera Interface),它支援使用上述類似VGA的時序獲取影象資料流,支援原始的按行、幀格式來組織的影象資料,如YUVRGB,也支援接收JPEG格式壓縮的資料流。接收資料時,主要使用HSYNCVSYNC訊號來同步。

45.3.1 DCMI整體框圖

STM32DCMI介面整體框圖見圖 4516

4516 DCMI介面整體框圖

外部介面及時序

上圖示號處的是DCMI向外部引出的訊號線。DCMI提供的外部介面的方向都是輸入的,介面的各個訊號線說明見表 452

452 DCMI的訊號線說明

引腳名稱

說明

DCMI_D[0:13]

資料線

DCMI_PIXCLK

畫素同步時鐘

DCMI_HSYNC

行同步訊號(水平同步訊號)

DCMI_VSYNC

幀同步訊號(垂直同步訊號)

其中DCMI_D資料線的數量可選8101214位,各個同步訊號的有效極性都可程式設計控制。它使用的通訊時序與OV2640的影象資料輸出介面時序一致,見圖 4517

4517 DCMI時序圖

內部訊號及PIXCLK的時鐘頻率

4516的標號‚處表示DCMI與內部的訊號線。在STM32的內部,使用HCLK作為時鐘源提供給DCMI外設。從DCMI引出有DCMI_IT訊號至中斷控制器,並可通過DMA_REQ訊號傳送DMA請求。

DCMI從外部接收資料時,在HCLK的上升沿時對PIXCLK同步的訊號進行取樣,它限制了PIXCLK的最小時鐘週期要大於2.5HCLK時鐘週期,即最高頻率為HCLK1/4

45.3.2 DCMI介面內部結構

DCMI介面的內部結構見圖 4518

4518 DCMI介面內部結構

(1)    同步器

同步器主要用於管理DCMI接收資料的時序,它根據外部的訊號提取輸入的資料。

(2)    FIFO/資料格式化器

為了對資料傳輸加以管理,STM32DCMI介面上實現了 4 個字(32bit x4)深度的 FIFO,用以緩衝接收到的資料。

(3)    AHB介面

DCMI介面掛載在AHB總線上,在AHB匯流排中有一個DCMI介面的資料暫存器,當我們讀取該暫存器時,它會從FIFO中獲取資料,並且FIFO

相關推薦

45 DCMIOV2640攝像頭死角STM32-F429系列

  第45章     DCMI—OV2640攝像頭 全套200集視訊教程和1000頁PDF教程請到秉火論壇下載:www.firebbs.cn 野火視訊教程優酷觀看網址:http://i.youku.com/firege 本章參考資料:《STM32F4x

30 ADC—電壓採集—死角STM32-F429系列

第30章     ADC—電壓採集 全套200集視訊教程和1000頁PDF教程請到秉火論壇下載:www.firebbs.cn 野火視訊教程優酷觀看網址:http://i.youku.com/firege 本章參考資料:《STM32F4xx中文參考手冊》ADC

39 ETH—Lwip乙太網通訊—死角STM32-F429系列

第39章     ETH—Lwip乙太網通訊 全套200集視訊教程和1000頁PDF教程請到秉火論壇下載:www.firebbs.cn 野火視訊教程優酷觀看網址:http://i.youku.com/firege 網際網路技術對人類社會的

38 I2S—音訊播放與錄音輸入—死角STM32-F429系列

  第38章     I2S—音訊播放與錄音輸入 全套200集視訊教程和1000頁PDF教程請到秉火論壇下載:www.firebbs.cn 野火視訊教程優酷觀看網址:http://i.youku.com/firege 本章參考資料:《STM32F4xx

基於Android7.1 8953 高通平臺下死角裝置樹DTS

【基於Android7.1 8953 高通平臺下零死角玩轉裝置樹DTS】 更新內容:  【創科之龍_安卓開發】第01課_為什麼引用linux裝置樹和對比優勢  【創科之龍_安卓開發】第02課_如何在Linux-3.x核心

Linux命令應用大詞典-45 服務器配置

add nfs服務器 key rsa ssh nfs vnc 配置 5.5 45.1 ssh-agent:存儲用於公鑰驗證的私鑰 45.2 ssh-add:添加RSA或DSA身份的認證代理 45.3 ssh-keyscan:收集主機公鑰 45.4 sshd:運行sshd守護

45 工具 - Identity Server 4 中文文檔(v1.0.0)

簡單 可能 控制 syn back 集合 有效 文檔 new 該IdentityServerTools是為IdentityServer編寫擴展代碼時,你可能需要有效的內部工具的集合。要使用它,請將其註入代碼,例如控制器: public MyController(Identi

翻譯:libevent參考手冊:輔助型別和函式 (七) ()

這些巨集訪問和操作套接字錯誤程式碼。EVUTIL_SOCKET_ERROR()返回本執行緒最後一次套接字操作的全域性錯誤號,evutil_socket_geterror()則返回某特定套接字的錯誤號。(在類Unix系統中都是errno)EVUTIL_SET_SOCKET_ERROR()修改當前套接字錯誤號(與

開始JMX(一)——簡介和Standard MBean

pos cor csdn comm art order clas post tex 從零開始玩轉JMX(一)——簡介和Standard MBeanJMX超詳細解讀 參考資料JMX整理JMX簡介http://blog.csdn.net/DryKillLogic/articl

開始logback

概述 LogBack是一個日誌框架,它與Log4j可以說是同出一源,都出自Ceki Gülcü之手。(log4j的原型是早前由Ceki Gülcü貢獻給Apache基金會的)下載地址:http://logback.qos.ch/download.html LogBack、

基礎基礎圖片爬蟲【文件教程】

0. 寫在前面 1. 準備工作 安裝Python3 安裝requests庫,命令列 pip3 install requests 安裝lxml【需要解析xpath】,命令列 pip3 install lxml 測試下python3以及庫是否可用: 2. 分

開始git和github

1. git:工具 GitHub:網站,社交平臺,開源專案,遠端倉庫 2.建立一個庫drag git clone [url]路徑 設定貢獻者name、email 提交程式碼的時候把這兩個資訊記錄在版本庫裡 git config --global user.name "名字" git

開始JMX(二)——Condition

Notification 一個MBean提供的管理介面允許代理對其管理資源進行控制和配置。然而,對管理複雜的分散式系統來說,這些介面知識提供了一部分功能。通常,管理應用程式需要對狀態變化或者當特別情況發生變化時作出反映。Notification起到了MBean

基礎樹莓派(五)—控制直流電機

前面教程學會如何使用樹莓派來控制LED燈,接下來主要講如何控制直流電機,這樣就可以做小車等可以運動的專案,可玩性更高。 一、硬體介紹 直流電機控制主要用到的硬體為: 1、燒寫好系統的樹莓派控制板·········1塊 2、L298N電機驅動板模組········

開始的linux

cd命令詳解 linux文件類型 pwd命令從零開始的linux 第四章哈嘍~~小編又回來啦~~(被同學們接住後扔進了水裏....)QAQ...你們怎麽能這麽對待小編...(啪..崩..咚..劈..咚..啪..)(鼻青臉腫的小編)額...同學們看起來精神不錯,早起活動活動筋骨對身體有好處....好啦,

開始的linux

編輯器 文本 nano 從零開始的linux 第五章(咚咚咚...)路人甲:“小編!!快起床!!今天該講課啦!” (迷迷糊糊且衣冠不整的小編去開門)路人甲:“小...小編大人...你都讓我這個女生...看到了什麽...” (小編突然被驚醒~哇~的一聲就把門關上了)(↑小編此時的內心)

開始的linux

file查看文件類型 獲取命令的使用幫助whatis help 查看命令類型 type從零開始的linux 第六章宇宙浩瀚,無邊無界,地球也不過是太陽系八大行星之一,作為無數行星中的一枚,地球實在算不上特別....但...小編的博客,絕~對~特~別~~(↑看過小編博客的同學回答)好啦~~這周小編就不廢話了

開始的linux

man 命令的使用幫助 詳解 從零開始的linux 第七章同學們早~~小編又來更新博客啦~(還在愉快玩耍中的同學)“小編大人...還沒到更新時間呢!”(竊竊私語)“不正常,這麽懶的小編居然會提前更新,八成周六周日要提前過情人節”(竊竊私語)“不不不不,小編是不可能會有女朋友的,你看,天天欺負路人甲”(

開始的linux

hash命令緩存 whoami who w從零開始的linux 第八章呼~~又是一個美好的一天~~從上一次小編更新到現在,已經經過辣麽長時間啦~是不是有點想念小編呢~~可不要想念小編到瘋掉哦~~好啦同學們,為了走上人生的巔峰,打起精神,努力學習~~...嗯...雖然不努力會很輕松,但是!看看你的口袋

開始的linux

history 命令 歷史 從零開始的linux 第九章大家早上好~~呼~今天天氣好冷~小編都快感冒惹~同學們要記得多穿衣服呀~~但是~~可不要穿太多哦~~不然可表現不出可愛的一面~~(小編此時看了看路人甲,仔細打量一下路人甲的著裝)(↑小編意味深長的眼神)嗯,看來同學們還是很有品位的嘛~~~,既