STM32F429之DCMI 数字相机接口
嵌入式系列文章
參考:《STM32F429_DM00031020_ENV19.pdf》
本文目的:翻譯STM32F429的PRM,深入理解DCMI接口的工作原理,最后將DCMI工作原理轉(zhuǎn)換成驅(qū)動(dòng)代碼。
DCMI:Digital camera interface,數(shù)字?jǐn)z像頭接口
15.1 介紹
數(shù)字?jǐn)z像頭接口是一種同步并行的接口,可以從外部8位、10位、12位或14位寬的CMOS攝像頭模組獲取高速數(shù)據(jù)流。支持不同的數(shù)據(jù)格式:YCbCr4:2:2/RGB565漸進(jìn)式視頻和壓縮的數(shù)據(jù)(JPEG)。
這個(gè)接口用于黑白相機(jī)、X24和X5相機(jī)(24倍變焦和5倍變焦?),并且假設(shè)所有預(yù)處理(如調(diào)整大小)都在相機(jī)模塊中執(zhí)行。
15.2 DCMI主要功能
· 8-,10-,12-,或 14-位并行接口;
· 內(nèi)嵌式或硬線式的行和幀同步;
· 連續(xù)或快照模式;
· 裁剪功能;
· 支持下面的數(shù)據(jù)格式:
– 8/10/12/14位漸進(jìn)式視頻:黑白單色或原始格式.raw原始格式.raw原始格式.raw
– YCbCr 4:2:2YCbCr 4:2:2YCbCr 4:2:2漸進(jìn)式視頻(漸進(jìn)式progressive,翻譯成“逐行掃描”更合適,與interlace隔行掃描相對(duì)應(yīng))
– RGB 565漸進(jìn)式視頻
– 壓縮數(shù)據(jù):JPEG
15.3 DCMI針腳
全部是輸入引腳。
15.4 DCMI時(shí)鐘
DCMI時(shí)鐘2個(gè)時(shí)鐘域:像素時(shí)鐘PIXCLK和模塊時(shí)鐘HCLK。在信號(hào)穩(wěn)定后,跟隨PIXCLK產(chǎn)生的信號(hào)在HCLK的上升沿被采樣。HCLK域會(huì)產(chǎn)生一個(gè)使能信號(hào),用于指示來自相機(jī)的數(shù)據(jù)已經(jīng)穩(wěn)定且能被采樣。PIXCLK的最小周期必須大于2.5倍的HCLK的周期。
備注:
根據(jù)STM32的時(shí)鐘樹,假設(shè)HCLK配置成180MHz,那么PIXCLK最大的頻率不能超過180/2.5=72MHz,對(duì)某些相機(jī)接口來說,這個(gè)頻率最大只能采集720p的圖像。
15.5 DCMI功能概覽
DCMI是一個(gè)同步并行接口,可以接收高速(最大可達(dá)54MByte/s)數(shù)據(jù)流。包括高達(dá)14根數(shù)據(jù)線(D13-D0)和一根像素時(shí)鐘線。像素時(shí)鐘線極性可編程,這樣數(shù)據(jù)可以在像素時(shí)鐘的上升沿或下降沿進(jìn)行捕獲。
數(shù)據(jù)被傳送到一個(gè)32位的數(shù)據(jù)寄存器中(DCMI_DR),然后通過通用的DMA通道進(jìn)行傳輸。圖像緩存由DMA來管理,而不是DCMI接口來管理。
接收到的數(shù)據(jù)可以組織成行/幀(YUV/RGB/raw模式)或可以是JPEG圖像序列。要使能JPEG圖片接收,必須設(shè)置JPEG位(DCMI_CR寄存器的bit3)。
數(shù)據(jù)流可以使用HSYNC(水平同步)和VSYNC(垂直同步)這種硬線方式,也可以使用內(nèi)嵌到數(shù)據(jù)流中的同步碼的方式進(jìn)行同步。
下圖是DCMI模塊框圖:
下圖是DCMI模塊頂層視圖:
15.5.1 DMA接口
當(dāng)DCMI_CR寄存器中的CAPTURE位被設(shè)置時(shí),DMA接口就會(huì)被激活。每次DCMI接收到32位的數(shù)據(jù)時(shí)就會(huì)產(chǎn)生一次DMA請(qǐng)求。
15.5.2 DCMI物理接口
接口包含11/13/15/17根輸入線(分別對(duì)應(yīng)8/10/12/14位寬),只支持從設(shè)備模式。
接口的位寬取決于DCMI_CR寄存器的EDM[1:0]位。如果位寬小于14,則沒使用的數(shù)據(jù)引腳則不能被復(fù)用為DCMI接口。
數(shù)據(jù)由PIXCLK進(jìn)行同步,并且根據(jù)極性配置,在像素時(shí)鐘的上升或下降沿進(jìn)行改變。(備注:數(shù)據(jù)的改變由PIXCLK來驅(qū)動(dòng),DCMI內(nèi)的數(shù)據(jù)采樣是HCLK的上升沿)
HSYNC表示行數(shù)據(jù)的開始和結(jié)束;
VSYNC表示幀數(shù)據(jù)的開始和結(jié)束;
下圖是DCMI 信號(hào)的時(shí)序圖:
1、圖中捕獲沿是PIXCLK的下降沿,HSYNC和VSYNC的激活狀態(tài)是1。
1、HSYNC和VSYNC可以同時(shí)改變。
● 8位數(shù)據(jù)
當(dāng)DCMI_CR中的EDM[1:0]配置為00,則接口從輸入接口D[0:7]中捕獲8位LSB數(shù)據(jù),并把它們存儲(chǔ)為8位數(shù)據(jù),而D[13:8]就被忽略。這樣獲取32位的數(shù)據(jù)需要4個(gè)像素時(shí)鐘周期。
最先捕獲的數(shù)據(jù)放在32位數(shù)據(jù)的低地址處,而第4次捕獲到的數(shù)據(jù)放在高地址處,如下圖所示:
● 10位數(shù)據(jù)
當(dāng)DCMI_CR中的EDM[1:0]配置為01,則DCMI從輸入引腳D[0…9]獲取10位數(shù)據(jù)存入16位數(shù)據(jù)的低10位。剩下的高位(DCMI_CR的bit11~15)配置為0。這樣32位數(shù)據(jù)需要2個(gè)像素時(shí)鐘周期可填滿。
存放方法同樣是先來的數(shù)據(jù)存放在低地址處,如下圖所示:
12bit和14位同理。
15.5.3 同步
DCMI接口支持內(nèi)嵌碼或硬線(HSYNC和VSYNC)同步。在使用內(nèi)嵌碼同步時(shí),數(shù)字?jǐn)z像頭模塊必須保證0x00和0xFF只用于同步,而不是數(shù)據(jù)。內(nèi)嵌碼同步模式僅支持8位并行數(shù)據(jù)寬度(這樣,DCMI_CR寄存器的EDM[1:0]位必須要清零)。
對(duì)于壓縮的數(shù)據(jù),DCMI只支持硬線同步模式。這樣VSYNC作為圖像的開始/結(jié)束,而HSYNC作為數(shù)據(jù)有效的信號(hào)。下圖是JPEG的時(shí)序圖:
● 硬線同步模式
在硬線同步模式下,使用了兩個(gè)同步信號(hào)(HSYNC和VSYNC)。
根據(jù)相機(jī)模組,數(shù)據(jù)會(huì)在水平/垂直同步期間傳輸。HSYNC/VSYNC 信號(hào)的作用類似于消隱信號(hào),因?yàn)樵?HSYNC/VSYNC 有效期間接收到的所有數(shù)據(jù)都將被忽略。(備注:HSYNC/VSYNC有效期間應(yīng)該是指作為消隱信號(hào)時(shí)的有效期間)
為了正確地將圖片傳入DMA/RAM的緩存,數(shù)據(jù)需要在VSYNC信號(hào)的同步下進(jìn)行傳輸。當(dāng)使用硬線同步模式,且使能捕獲(設(shè)置DCMI_CR的CAPTURE位),則數(shù)據(jù)傳輸由VSYNC的非激活狀態(tài)(下一幀的開始)進(jìn)行同步。
傳輸可以連續(xù)地,通過使用DMA將連續(xù)的幀傳輸?shù)竭B續(xù)的緩存區(qū)或相同/循環(huán)的緩存區(qū)中。為了允許DMA管理連續(xù)的幀,VSIF(垂直同步中斷標(biāo)志)會(huì)在每幀結(jié)尾進(jìn)行激活。
● 內(nèi)嵌碼同步模式
在這種同步模式下,數(shù)據(jù)流使用嵌入在數(shù)據(jù)流中的 32 位代碼進(jìn)行同步。 這些代碼使用數(shù)據(jù)中不再使用的 0x00/0xFF 值。 有 4 種類型的代碼,均采用 0xFF0000XY 格式。 嵌入式同步代碼僅在 8 位并行數(shù)據(jù)寬度捕獲中受支持(在 DCMI_CR 寄存器中,EDM[1:0] 位應(yīng)編程為“00”)。 對(duì)于其他數(shù)據(jù)寬度,此模式會(huì)產(chǎn)生不可預(yù)知的結(jié)果,不得使用。
注意:相機(jī)模塊可以有 8 個(gè)這樣的代碼(在交錯(cuò)模式下)。 出于這個(gè)原因,相機(jī)接口不支持交錯(cuò)模式(否則每隔半幀就會(huì)被丟棄)。
· 模式2
四個(gè)嵌入代碼表示以下事件
– 幀開始:Frame start (FS)
– 幀結(jié)束:Frame end (FE)
– 行開始:Line start (LS)
– 行結(jié)束:Line end (LE)
四個(gè)代碼的 0xFF0000XY 格式的 XY 值是可編程的(參見第 15.8.7 節(jié):DCMI 嵌入式同步代碼寄存器(DCMI_ESCR))。
[備注]:DCMI_ESCR寄存器:
`DCMI_ESCR寄存器
FEC:Frame end delimiter code,幀結(jié)束分隔代碼
該字節(jié)指定幀結(jié)束分隔符的代碼。 代碼由 0xFF、0x00、0x00、FEC 形式的 4 個(gè)字節(jié)組成。如果 FEC 編程為 0xFF,則所有未使用的代碼 (0xFF0000XY)解釋為幀結(jié)束分隔符。
LEC: Line end delimiter code,行結(jié)束分隔代碼
該字節(jié)指定行尾分隔符的代碼。 該代碼由 0xFF、0x00、0x00、LEC 形式的 4 個(gè)字節(jié)組成。
LSC: Line start delimiter code,行開始分隔代碼
該字節(jié)指定行起始分隔符的代碼。 該代碼由 4 個(gè)字節(jié)組成,形式為 0xFF、0x00、0x00、LSC。
FSC: Frame start delimiter code,幀起始分隔代碼
如果 FSC 編程為 0xFF,則不會(huì)檢測(cè)到幀起始分隔符。 但是,FEC 代碼之后第一次出現(xiàn)的 LSC 將被解釋為幀分隔符的開始。
0xFF被編程為“幀結(jié)束” ,意味著所有未使用的代碼都被解釋為有效的幀結(jié)束代碼。
在此模式下,一旦啟用了相機(jī)接口,幀捕獲在第一次出現(xiàn)幀結(jié)束 (FE) 代碼后開始,然后是幀開始 (FS) 代碼。
· 模式1
另一種編碼是相機(jī)模式 1。此模式與 ITU656 兼容。 這些代碼標(biāo)志著另一組事件:
– SAV(活動(dòng)行)- 行開始
– EAV(活動(dòng)行)- 行結(jié)束
– SAV(消隱)- 幀間消隱期間的行尾
– EAV(消隱) - 幀間消隱期間的行尾
通過編寫以下代碼可以支持此模式:
? FS ≤ 0xFF
? FE ≤ 0xFF
? LS ≤ SAV (active)
? LE ≤ EAV (active)
還為幀/行開始和幀/行結(jié)束代碼實(shí)現(xiàn)了嵌入的非屏蔽碼。 使用它,可以僅將選定的未屏蔽位與編程代碼進(jìn)行比較。 因此,您可以在嵌入代碼中選擇一個(gè)位進(jìn)行比較并檢測(cè)幀/行開始或幀/行結(jié)束。 這意味著幀/行開始和幀/行結(jié)束可以有不同的代碼,但未屏蔽的位保持相同。
例如:
FS = 0xA5
FS的非屏蔽碼是0x10
在這種情況下,幀起始碼嵌入在幀起始碼的第 4 位。
備注:非屏蔽碼位取0表示屏蔽,1表示未屏蔽,通過屏蔽碼,可以選擇某個(gè)位作為同步信號(hào),而被屏蔽的位可以取其他的值。對(duì)STM32來說,只關(guān)注未屏蔽未,只要未屏蔽位出現(xiàn)同步信號(hào)就會(huì)進(jìn)行同步。
15.5.4 捕獲模式
DCMI接口支持2種捕獲模式:快照模式(單幀)和連續(xù)抓取。
● 快照模式(單幀)
在這種模式下,可以捕獲到一個(gè)單幀(DMCI_CR寄存器中的CM=1)。在DCMI_CR的CAPTURE位被置位,在采樣數(shù)據(jù)之前,DCMI接口要等待檢測(cè)到一個(gè)幀啟動(dòng)信號(hào)。在完成第一幀的數(shù)據(jù)接收后,DCMI會(huì)自動(dòng)除能(CAPTURE位被清零)。如果使能了中斷則此時(shí)會(huì)產(chǎn)生一個(gè)中斷。
當(dāng)發(fā)生超限事件(overrun),則幀被丟棄,并且CAPTURE位被清零??煺漳J较碌臅r(shí)序圖如下圖所示:
這里HSYNC和VSYNC的激活狀態(tài)都是1,這兩個(gè)信號(hào)可以同時(shí)變更狀態(tài)。
● 連續(xù)抓取模式
在這種模式下(DCMI_CR的CM位為0),一旦DCMI_CR中的CAPTURE位被設(shè)置,則抓取程序會(huì)在下一個(gè)VSYNC信號(hào)或內(nèi)嵌碼模式下的幀開始FS信號(hào)到來后啟動(dòng)。該進(jìn)程會(huì)一直持續(xù)直到CAPTURE位被清零。 一旦CAPTURE位被清零,抓取進(jìn)程會(huì)持續(xù)到當(dāng)前幀結(jié)束。
在連續(xù)抓取模式下,你可以配置DCMI_CR寄存器中的FCRC位來抓取所有圖像、每?jī)蓭ヒ粠?#xff0c;或每四幀抓一幀,來減少幀的捕獲率。
注意:在硬線同步模式下(DCMI_CR的ESS=0),IT_VSYNC中斷依然會(huì)在CAPTURE=0時(shí)產(chǎn)生,所以,為了減少幀率,IT_VSYNC中斷可以用來累計(jì)兩次捕獲的幀數(shù),并且和快照模式結(jié)合起來用。這在內(nèi)嵌碼模式下是不允許的。
15.5.5 裁剪功能
使用裁剪功能,DCMI接口可以在接收到的圖片中選取一個(gè)矩形窗。起點(diǎn)(左上角)坐標(biāo)和大小(水平維度是像素時(shí)鐘個(gè)數(shù),而垂直維度是行數(shù))由兩個(gè)32位的寄存器(DCMI_CWSTRT和DCMI_CWSIZE)來指定。窗口的大小水平維度是像素時(shí)鐘的個(gè)數(shù),垂直維度是行數(shù)。
這些寄存器指定了捕獲窗口的起始坐標(biāo),一個(gè)是行數(shù)(在一幀中是從0開始),一個(gè)是像素時(shí)鐘數(shù)(在一行中是從0開始),還指定了窗口的大小,即行數(shù)和像素時(shí)鐘數(shù)。DCMI_CSIZE中的CAPCNT值只能是4的倍數(shù),這樣才能正確地使用DMA進(jìn)行傳傳輸。
如果VSYNC在DCMI_CSIZE寄存器中的行數(shù)到達(dá)之前被激活,則捕獲停止且IT_FRAME中斷產(chǎn)生。
15.5.6 JPEG格式
為了允許JPEG格式圖像的接收,需要設(shè)置DCMI_CR寄存器中的JPEG位。JPEG圖片不是以行和幀的格式存儲(chǔ),所以VSYNC作為捕獲的起始信號(hào),而HSYNC作為數(shù)據(jù)使能信號(hào)。一行的數(shù)據(jù)字節(jié)數(shù)不一定是4的倍數(shù),所以你需要小心處理這種情況,因?yàn)橐粋€(gè)DMA請(qǐng)求是每次完成32位數(shù)據(jù)傳輸才會(huì)產(chǎn)生的。如果檢測(cè)到了幀結(jié)束,但是32位數(shù)據(jù)沒完全傳輸完,則剩下的數(shù)據(jù)會(huì)是0,而且產(chǎn)生DMA請(qǐng)求。
裁剪功能和內(nèi)嵌碼同步碼不支持在JPEG格式下使用。
15.5.7 FIFO
一個(gè)四字的FIFO用來管理傳輸?shù)紸HB總線上的數(shù)據(jù)率。DCMI接口具備一個(gè)簡(jiǎn)單的FIFO控制器,每次從AHB接口讀的時(shí)候增加讀指針,每次往FIFO中寫數(shù)據(jù)的時(shí)候增加寫指針。這里沒有過載保護(hù)以防止數(shù)據(jù)被寫覆蓋,如果AHB接口不支持該數(shù)據(jù)傳輸率的話。
一旦產(chǎn)生過載或同步信號(hào)的錯(cuò)誤,則FIFO會(huì)被復(fù)位,并且DCMI等待新的幀啟動(dòng)信號(hào)。
15.6 數(shù)據(jù)格式描述
15.6.1 數(shù)據(jù)格式
支持三種類型的數(shù)據(jù):
● 8位的漸進(jìn)視頻;
● YCbCr 422
● RGB565
壓縮數(shù)據(jù):JPEG
對(duì)黑白數(shù)據(jù)、YUV、RGB數(shù)據(jù)來說,最大輸入尺寸是2048*2048。JPEG格式下沒限制。
對(duì)于單色、RGB 和 YCbCr,幀緩沖區(qū)以光柵模式存儲(chǔ)。使用32bit的數(shù)據(jù)寬度。只支持小端模式。下圖是像素光柵掃描順序。
15.6.2 單色格式
特點(diǎn):
● 光柵格式
● 每個(gè)像素8位
下圖展示了這種數(shù)據(jù)的存儲(chǔ)方式:
15.6.3 RGB格式
特點(diǎn):
● 光柵格式
● RGB
● 交錯(cuò)的:一個(gè)緩存中RGB交錯(cuò),BRGBRGBRG等
● 針對(duì)顯示輸出進(jìn)行了優(yōu)化
RGB 平面格式與標(biāo)準(zhǔn) OS 幀緩沖區(qū)顯示格式兼容。只支持16BPP(bits per pixel),每32位數(shù)據(jù)2個(gè)像素。24BPP和灰度格式不支持。像素以光柵掃描順序存儲(chǔ),即像素行從上到下,像素行內(nèi)從左到右。 像素分量是 R(紅色)、G(綠色)和 B(藍(lán)色)。 所有組件都具有相同的空間分辨率(4:4:4 格式)。 一幀存儲(chǔ)在一個(gè)單獨(dú)的部分中,組件以像素為基礎(chǔ)交錯(cuò)。下圖是RGB565的存儲(chǔ)格式:
15.6.4 YCbCr格式
特點(diǎn):
● 光柵格式
● YCbCr 422
● 交錯(cuò):一個(gè)緩存中,Y,Cb和Cr交錯(cuò)。
像素分量是 Y(亮度或“亮度”)、Cb 和 Cr(色度或“色度”藍(lán)色和紅色)。 每個(gè)分量都以 8 位編碼。 亮度和色度存儲(chǔ)在一起(交錯(cuò)),如下圖 所示。
15.7 DCMI中斷
產(chǎn)生五個(gè)中斷。所有中斷都可以被軟件屏蔽。全局中斷(IT_DCMI)是所有單個(gè)中斷的邏輯或。下圖是所有中斷的列表。
15.8 寄存器描述
【未完待續(xù)】
總結(jié)
以上是生活随笔為你收集整理的STM32F429之DCMI 数字相机接口的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CompoundButton(check
- 下一篇: JAVA连接SQL server2000