|
1.硬件平臺(tái):正點(diǎn)原子探索者STM32F407開發(fā)板2.軟件平臺(tái):MDK5.13.固件庫版本:V1.4.0
ALIENTEK探索者STM32F4開發(fā)板具有DCMI接口,并板載了一個(gè)攝像頭接口(P8),該接口可以用來連接ALIENTEK OV2640等攝像頭模塊。本章,我們將使用STM32驅(qū)動(dòng)ALIENTEK OV2640攝像頭模塊,實(shí)現(xiàn)攝像頭功能。本章分為如下幾個(gè)部分:
40.1 OV2640&DCMI簡(jiǎn)介
40.2 硬件設(shè)計(jì)
40.3 軟件設(shè)計(jì)
40.4 下載驗(yàn)證
40.1 OV2640&DCMI簡(jiǎn)介
本節(jié)將分為兩個(gè)部分,分別介紹OV2640和STM32F4的DCMI接口。
40.1.1 OV2640簡(jiǎn)介
OV2640是OV(OmniVision)公司生產(chǎn)的一顆1/4寸的CMOS UXGA(1632*1232)圖像傳感器。該傳感器體積小、工作電壓低,提供單片UXGA攝像頭和影像處理器的所有功能。通過SCCB 總線控制,可以輸出整幀、子采樣、縮放和取窗口等方式的各種分辨率8/10位影像數(shù)據(jù)。該產(chǎn)品UXGA圖像最高達(dá)到15幀/秒(SVGA可達(dá)30幀,CIF可達(dá)60幀)。用戶可以完全控制圖像質(zhì)量、數(shù)據(jù)格式和傳輸方式。所有圖像處理功能過程包括伽瑪曲線、白平衡、對(duì)比度、色度等都可以通過SCCB接口編程。OmmiVision 圖像傳感器應(yīng)用獨(dú)有的傳感器技術(shù),通過減少或消除光學(xué)或電子缺陷如固定圖案噪聲、拖尾、浮散等,提高圖像質(zhì)量,得到清晰的穩(wěn)定的彩色圖像。
OV2640的特點(diǎn)有:
l 高靈敏度、低電壓適合嵌入式應(yīng)用
l 標(biāo)準(zhǔn)的SCCB接口,兼容IIC接口
l 支持RawRGB、RGB(RGB565/RGB555)、GRB422、YUV(422/420)和YCbCr(422)輸出格式
l 支持UXGA、SXGA、SVGA以及按比例縮小到從SXGA到40*30的任何尺寸
l 支持自動(dòng)曝光控制、自動(dòng)增益控制、自動(dòng)白平衡、自動(dòng)消除燈光條紋、自動(dòng)黑電平校準(zhǔn)等自動(dòng)控制功能。同時(shí)支持色飽和度、色相、伽馬、銳度等設(shè)置。
l 支持閃光燈
l 支持圖像縮放、平移和窗口設(shè)置
l 支持圖像壓縮,即可輸出JPEG圖像數(shù)據(jù)
l 自帶嵌入式微處理器
OV2640的功能框圖圖如圖40.1.1.1所示:
圖40.1.1.1 OV2640功能框圖
OV2640傳感器包括如下一些功能模塊。
1.感光整列(Image Array)
OV2640總共有1632*1232個(gè)像素,最大輸出尺寸為UXGA(1600*1200),即200W像素。
2.模擬信號(hào)處理(Analog Processing)
模擬信號(hào)處理所有模擬功能,并包括:模擬放大(AMP)、增益控制、通道平衡和平衡控制等。
3.10位A/D 轉(zhuǎn)換(A/D)
原始的信號(hào)經(jīng)過模擬放大后,分G和BR兩路進(jìn)入一個(gè)10 位的A/D 轉(zhuǎn)換器,A/D 轉(zhuǎn)換器工作頻率高達(dá)20M,與像素頻率完全同步(轉(zhuǎn)換的頻率和幀率有關(guān))。除A/D轉(zhuǎn)換器外,該模塊還有黑電平校正(BLC)功能。
4.數(shù)字信號(hào)處理器(DSP)
這個(gè)部分控制由原始信號(hào)插值到RGB 信號(hào)的過程,并控制一些圖像質(zhì)量:
l 邊緣銳化(二維高通濾波器)
l 顏色空間轉(zhuǎn)換(原始信號(hào)到RGB或者YUV/YCbYCr)
l RGB色彩矩陣以消除串?dāng)_
l 色相和飽和度的控制
l 黑/白點(diǎn)補(bǔ)償
l 降噪
l 鏡頭補(bǔ)償
l 可編程的伽瑪
l 十位到八位數(shù)據(jù)轉(zhuǎn)換
5.輸出格式模塊(Output Formatter)
該模塊按設(shè)定優(yōu)先級(jí)控制圖像的所有輸出數(shù)據(jù)及其格式。
6.壓縮引擎(Compression Engine)
壓縮引擎框圖如圖40.1.1.2所示:
圖40.1.1.2 壓縮引擎框圖
從圖可以看出,壓縮引擎主要包括三部分:DCT、QZ和entropy encoder(熵編碼器),將原始的數(shù)據(jù)流,壓縮成jpeg數(shù)據(jù)輸出。
7.微處理器(Microcontroller)
OV2640自帶了一個(gè)8位微處理器,該處理器有512字節(jié)SRAM,4KB的ROM,它提供一個(gè)靈活的主機(jī)到控制系統(tǒng)的指令接口,同時(shí)也具有細(xì)調(diào)圖像質(zhì)量的功能。
8.SCCB接口(SCCB Interface)
SCCB接口控制圖像傳感器芯片的運(yùn)行,詳細(xì)使用方法參照光盤的《OmniVision Technologies Seril Camera Control Bus(SCCB) Specification》這個(gè)文檔
9.數(shù)字視頻接口(Digital Video Port)
OV2640擁有一個(gè)10位數(shù)字視頻接口(支持8位接法),其MSB和LSB可以程序設(shè)置先后順序,ALIENTEK OV2640模塊采用默認(rèn)的8位連接方式,如圖40.1.1.3所示:
圖40.1.1.3 OV2640默認(rèn)8位連接方式
OV2640的寄存器通過SCCB時(shí)序訪問并設(shè)置,SCCB時(shí)序和IIC時(shí)序十分類似,在本章我們不做介紹,請(qǐng)大家參考光盤《OmniVision Technologies Seril Camera Control Bus(SCCB) Specification》這個(gè)文檔。
接下來,我們介紹一下OV2640的傳感器窗口設(shè)置、圖像尺寸設(shè)置、圖像窗口設(shè)置和圖像輸出大小設(shè)置,這幾個(gè)設(shè)置與我們的正常使用密切相關(guān),有必要了解一下。其中,除了傳感器窗口設(shè)置是直接針對(duì)傳感器陣列的設(shè)置,其他都是DSP部分的設(shè)置了,接下來我們一個(gè)個(gè)介紹。
傳感器窗口設(shè)置,該功能允許用戶設(shè)置整個(gè)傳感器區(qū)域(1632*1220)的感興趣部分,也就是在傳感器里面開窗,開窗范圍從2*2~1632*1220都可以設(shè)置,不過要求這個(gè)窗口必須大于等于隨后設(shè)置的圖像尺寸。傳感器窗口設(shè)置,通過:0X03/0X19/0X1A/0X07/0X17/0X18等寄存器設(shè)置,寄存器定義請(qǐng)看OV2640_DS(1.6).pdf這個(gè)文檔(下同)。
圖像尺寸設(shè)置,也就是DSP輸出(最終輸出到LCD的)圖像的最大尺寸,該尺寸要小于等于前面我們傳感器窗口設(shè)置所設(shè)定的窗口尺寸。圖像尺寸通過:0XC0/0XC1/0X8C等寄存器設(shè)置。
圖像窗口設(shè)置,這里起始和前面的傳感器窗口設(shè)置類似,只是這個(gè)窗口是在我們前面設(shè)置的圖像尺寸里面,再一次設(shè)置窗口大小,該窗口必須小于等于前面設(shè)置的圖像尺寸。該窗口設(shè)置后的圖像范圍,將用于輸出到外部。圖像窗口設(shè)置通過:0X51/0X52/0X53/0X54/0X55/0X57等寄存器設(shè)置。
圖像輸出大小設(shè)置,這是最終輸出到外部的圖像尺寸。該設(shè)置將圖像窗口設(shè)置所決定的窗口大小,通過內(nèi)部DSP處理,縮放成我們輸出到外部的圖像大小。該設(shè)置將會(huì)對(duì)圖像進(jìn)行縮放處理,如果設(shè)置的圖像輸出大小不等于圖像窗口設(shè)置圖像大小,那么圖像就會(huì)被縮放處理,只有這兩者設(shè)置一樣大的時(shí)候,輸出比例才是1:1的。
因?yàn)镺mniVision 公司公開的文檔,對(duì)這些設(shè)置實(shí)在是沒有詳細(xì)介紹。只能從他們提供的初始化代碼(還得去linux源碼里面移植過來)里面去分析規(guī)律,所以,這幾個(gè)設(shè)置,都是作者根據(jù)OV2640的調(diào)試經(jīng)驗(yàn),以及相關(guān)文檔總結(jié)出來的,不保證百分比正確,如有錯(cuò)誤,還請(qǐng)大家指正。
以上幾個(gè)設(shè)置,光看文字可能不太清楚,這里我們畫一個(gè)簡(jiǎn)圖有助于大家理解,如圖40.1.1.4所示:
圖40.1.1.4 OV2640圖像窗口設(shè)置簡(jiǎn)圖
上圖,最終紅色框所示的圖像輸出大小,才是OV2640輸出給外部的圖像尺寸,也就是顯示在LCD上面的圖像大小。當(dāng)圖像輸出大小與圖像窗口不等時(shí),會(huì)進(jìn)行縮放處理,在LCD上面看到的圖像將會(huì)變形。
最后,我們介紹一下OV2640的圖像數(shù)據(jù)輸出格式。首先我們簡(jiǎn)單介紹一些定義:
UXGA,即分辨率位1600*1200的輸出格式,類似的還有:SXGA(1280*1024)、WXGA+(1440*900)、XVGA(1280*960)、WXGA(1280*800)、XGA(1024*768)、SVGA(800*600)、VGA(640*480)、CIF(352*288)、WQVGA(400*240)、QCIF(176*144)和QQVGA(160*120)等。
PCLK,即像素時(shí)鐘,一個(gè)PCLK時(shí)鐘,輸出一個(gè)像素(或半個(gè)像素)。
VSYNC,即幀同步信號(hào)。
HREF /HSYNC,即行同步信號(hào)。
OV2640的圖像數(shù)據(jù)輸出(通過Y[9:0])就是在PCLK,VSYNC和HREF/ HSYNC的控制下進(jìn)行的。首先看看行輸出時(shí)序,如圖40.1.1.5所示:
圖40.1.1.5 OV2640行輸出時(shí)序
從上圖可以看出,圖像數(shù)據(jù)在HREF為高的時(shí)候輸出,當(dāng)HREF變高后,每一個(gè)PCLK時(shí)鐘,輸出一個(gè)8位/10位數(shù)據(jù)。我們采用8位接口,所以每個(gè)PCLK輸出1個(gè)字節(jié),且在RGB/YUV輸出格式下,每個(gè)tp=2個(gè)Tpclk,如果是Raw格式,則一個(gè)tp=1個(gè)Tpclk。比如我們采用UXGA時(shí)序,RGB565格式輸出,每2個(gè)字節(jié)組成一個(gè)像素的顏色(高低字節(jié)順序可通過0XDA寄存器設(shè)置),這樣每行輸出總共有1600*2個(gè)PCLK周期,輸出1600*2個(gè)字節(jié)。
再來看看幀時(shí)序(UXGA模式),如圖40.1.1.6所示:
圖40.1.1.6 OV2640幀時(shí)序
上圖清楚的表示了OV2640在UXGA模式下的數(shù)據(jù)輸出。我們按照這個(gè)時(shí)序去讀取OV2640的數(shù)據(jù),就可以得到圖像數(shù)據(jù)。
最后說一下OV2640的圖像數(shù)據(jù)格式,我們一般用2種輸出方式:RGB565和JPEG。當(dāng)輸出RGB565格式數(shù)據(jù)的時(shí)候,時(shí)序完全就是上面兩幅圖介紹的關(guān)系。以滿足不同需要。而當(dāng)輸出數(shù)據(jù)是JPEG數(shù)據(jù)的時(shí)候,同樣也是這種方式輸出(所以數(shù)據(jù)讀取方法一模一樣),不過PCLK數(shù)目大大減少了,且不連續(xù),輸出的數(shù)據(jù)是壓縮后的JPEG數(shù)據(jù),輸出的JPEG數(shù)據(jù)以:0XFF,0XD8開頭,以0XFF,0XD9結(jié)尾,且在0XFF,0XD8之前,或者0XFF,0XD9之后,會(huì)有不定數(shù)量的其他數(shù)據(jù)存在(一般是0),這些數(shù)據(jù)我們直接忽略即可,將得到的0XFF,0XD8~0XFF,0XD9之間的數(shù)據(jù),保存為.jpg/.jpeg文件,就可以直接在電腦上打開看到圖像了。
OV2640自帶的JPEG輸出功能,大大減少了圖像的數(shù)據(jù)量,使得其在網(wǎng)絡(luò)攝像頭、無線視頻傳輸?shù)确矫婢哂泻艽蟮膬?yōu)勢(shì)。OV2640我們就介紹到這。
圖40.1.2.3 ALIENTEK OV2640攝像頭模塊外觀圖
模塊原理圖如圖40.1.2.4所示:
這些線的連接,探索者STM32F4開發(fā)板的內(nèi)部已經(jīng)連接好了,我們只需要將OV2640攝像頭模塊插上去就好了。特別注意:DCMI攝像頭接口和I2S接口、DAC、SDIO以及1WIRE_DQ等有沖突,使用的時(shí)候,必須分時(shí)復(fù)用才可以,不可同時(shí)使用。實(shí)物連接如圖40.2.2所示:
圖40.2.2 OV2640攝像頭模塊與開發(fā)板連接實(shí)物圖
40.3 軟件設(shè)計(jì)
軟件設(shè)計(jì)請(qǐng)直接下載附件的pdf講解和實(shí)驗(yàn)工程。
40.4 下載驗(yàn)證
在代碼編譯成功之后,我們通過下載代碼到ALIENTEK探索者STM32F4開發(fā)板上,在OV2640初始化成功后,屏幕提示選擇模式,此時(shí)我們可以按KEY0,進(jìn)入RGB565模式測(cè)試,也可以按KEY1,進(jìn)入JPEG模式測(cè)試。
當(dāng)按KEY0后,選擇RGB565模式,LCD滿屏顯示壓縮放后的圖像(有變形),如圖40.4.1所示:
圖40.4.1 RGB565模式測(cè)試圖片
此時(shí),可以按KEY_UP切換為1:1顯示(不變形)。同時(shí)還可以通過KEY0按鍵,設(shè)置對(duì)比度;KEY1按鍵,設(shè)置飽和度;KEY2,可以設(shè)置特效。
當(dāng)按KEY1后,選擇JPEG模式,此時(shí)屏幕顯示JPEG數(shù)據(jù)傳輸進(jìn)程,如圖40.4.2所示:
圖40.4.2 JPEG模式測(cè)試圖
默認(rèn)條件下,圖像分辨率是QVGA(320*240)的,硬件上:我們需要一根RS232串口線連接開發(fā)板的COM2(注意要用跳線帽將P9的:COM2_RX連接在PA2(TX))。如果沒有RS232線,也可以借助我們開發(fā)板板載的USB轉(zhuǎn)串口實(shí)現(xiàn)(有2個(gè)辦法:1,改代碼;2,杜邦線連接P9的PA2(TX)和P6的RX)。
我們打開上位機(jī)軟件:串口攝像頭.exe(路徑:光盤à\6,軟件資料à軟件à串口攝像頭軟件à串口攝像頭.exe),選擇正確的串口,然后波特率設(shè)置為115200,打開即可收到下位機(jī)傳過來的圖片了,如圖40.4.3所示:
圖40.4.3 串口攝像頭軟件接收并顯示JPEG圖片
我們可以通過KEY_UP設(shè)置輸出圖像的尺寸(QQVGA~UXGA)。通過KEY0按鍵,設(shè)置對(duì)比度;KEY1按鍵,設(shè)置飽和度;KEY2按鍵,設(shè)置特效。
同時(shí),你還可以在串口,通過USMART調(diào)用SCCB_WR_Reg等函數(shù),來設(shè)置OV2640的各寄存器,達(dá)到調(diào)試測(cè)試OV2640的目的,如圖40.4.4所示:
圖40.4.4 USMART調(diào)試OV2640
從上圖還可以看出,幀率為15幀,這和我們前面介紹的OV2640在UXGA模式,輸出幀率是15幀是一致的。
|
|