【導(dǎo)讀】隨著市場(chǎng)對(duì)更高圖像質(zhì)量的需求不斷增加,成像技術(shù)持續(xù)發(fā)展,各種新興技術(shù)(例如3D、計(jì)算、運(yùn)動(dòng)和紅外線)的不斷涌現(xiàn)。如今的成像應(yīng)用對(duì)高質(zhì)量、易用性、能耗效率、高集成度、快速上市和成本效益提出了全面要求。為了滿足這些要求,STM32 MCU 內(nèi)置的數(shù)字照相機(jī)接口(DCMI),能夠高效連接并行照相機(jī)模塊。
1. 引言
隨著市場(chǎng)對(duì)更高圖像質(zhì)量的需求不斷增加,成像技術(shù)持續(xù)發(fā)展,各種新興技術(shù)(例如3D、計(jì)算、運(yùn)動(dòng)和紅外線)的不斷涌現(xiàn)。如今的成像應(yīng)用對(duì)高質(zhì)量、易用性、能耗效率、高集成度、快速上市和成本效益提出了全面要求。為了滿足這些要求,STM32 MCU 內(nèi)置的數(shù)字照相機(jī)接口(DCMI),能夠高效連接并行照相機(jī)模塊。
對(duì)于使用STM32 DCMI 開(kāi)發(fā)相機(jī)應(yīng)用的客戶,經(jīng)常有以下問(wèn)題:STM32 DCMI 最大支持的像素時(shí)鐘是多少?STM32F4/F7/H7/U5 能支持1280×720 的相機(jī)分辨率嗎?最大的幀率是多少?如何判斷所設(shè)計(jì)的應(yīng)用產(chǎn)生的帶寬是否能充足?相機(jī)輸出是選擇8 位、10位、12 位、還是14 位?
針對(duì)這些問(wèn)題,本文檔從DCMI 使用的幾個(gè)方面,介紹了STM32 DCMI 在連續(xù)抓取模式下帶寬的估算,以及提升性能需要注意的事項(xiàng)??蛻粼谠O(shè)計(jì)相機(jī)應(yīng)用時(shí)可以參考。
2. STM32 DCMI
STM32 數(shù)字照相機(jī)接口(DCMI)采用同步并行數(shù)據(jù)總線。它可以輕松集成并適應(yīng)相機(jī)的特殊應(yīng)用要求。DCMI 可連接8、10、12 和14 位CMOS 照相機(jī)模塊,并支持多種數(shù)據(jù)格式:8/10/12/14 位逐行視頻、YCbCr4:2:2 逐行視頻、RGB565 逐行視頻、JPEG 等。像素最大支持16 位色深。
2.1. STM32 智能架構(gòu)中的DCMI
DCMI 應(yīng)用需要用幀緩沖區(qū)來(lái)存儲(chǔ)采集的圖像。必須根據(jù)圖像大小和傳輸速度使用合適的目標(biāo)存儲(chǔ)區(qū)。在某些應(yīng)用中,必須連接外部存儲(chǔ)器(SDRAM),以便提供較大的數(shù)據(jù)存儲(chǔ)空間。對(duì)于支持DMA2D(Chrom-ART Accelerator?控制器)的STM32 系列,也可以用它做色彩空間轉(zhuǎn)換(例如RGB565 至ARGB8888),或使用DMA 從一個(gè)存儲(chǔ)區(qū)到另一個(gè)存儲(chǔ)區(qū)的數(shù)據(jù)轉(zhuǎn)移。
下面圖1 是STM32F2x7 系列智能架構(gòu)中DCMI 的例子。這里DCMI 通過(guò)AHB2 外設(shè)總線連接到AHB 總線矩陣。DMA2 主控訪問(wèn)DCMI,將DCMI 接收到的圖像數(shù)據(jù)傳輸?shù)絻?nèi)部RAM 或外部SDRAM 中,具體目標(biāo)位置取決于應(yīng)用。
圖1. STM32F2x7系列智能架構(gòu)中的DCMI從設(shè)備AHB2外設(shè)
2.2. DCMI 最大像素時(shí)鐘頻率
STM32 DCMI支持的像素時(shí)鐘頻率,與AHB時(shí)鐘頻率比值必須小于0.4。具體的像素時(shí)鐘頻率最大值要查詢所用STM32的數(shù)據(jù)手冊(cè)。下面表1中列出了部分STM32系列DCMI最大像素時(shí)鐘頻率及相關(guān)可用資源的信息。如需更詳細(xì)信息,請(qǐng)參考相應(yīng)的參考手冊(cè)/數(shù)據(jù)手冊(cè)。
表1. DCMI及相關(guān)可用資源
2.3. DCMI 支持的圖像分辨率
STM32 DCMI僅對(duì)輸入像素時(shí)鐘頻率有硬件限制(DCMI_PCLK / fHCLK 最大0.4),對(duì)圖像的分辨率沒(méi)有限制。DCMI連續(xù)抓取模式下,圖像分辨率會(huì)影響幀率(幀率的大小會(huì)影響視頻的流暢度)。在固定的像素時(shí)鐘頻率下,高分辨率圖像的帶寬需求較高,對(duì)應(yīng)的幀率則會(huì)下降。或者說(shuō),在相同的圖像分辨率下,提高幀率需要相應(yīng)地提高像素時(shí)鐘頻率。例如下表2(摘自三星S5K5CAGA CMOS Image Sensor的數(shù)據(jù)手冊(cè))所示,大家可以從中了解S5K5CAGA的像素頻率、圖像分辨率、幀率的關(guān)系(非RGB888,16位色深)。另外,圖像分辨率主要通過(guò)設(shè)置相機(jī)的輸出格式進(jìn)行修改。
表2. S5K5CAGA YUV/RGB565像素時(shí)鐘頻率與幀率
對(duì)于中高分辨率的圖像,一般采用雙緩沖區(qū)或多緩沖區(qū)模式。這個(gè)主要原因是因?yàn)镈CMI使用的DMA計(jì)數(shù)寄存器SxNDTR使用了16位用于計(jì)數(shù)。最大0xFFFF,即 65535 ,單位為32位Word,當(dāng)圖像分辨率超過(guò)65535 Words(262140字節(jié))時(shí),則要使用雙緩沖區(qū)或多緩沖區(qū)模式。雙緩沖區(qū)地址由DMA_SxM0AR/DMA_SxM1AR設(shè)定。多緩沖區(qū)時(shí),則需要?jiǎng)討B(tài)交替DMA_SxM0AR/DMA_SxM1AR,使之指向圖像緩沖區(qū)的不同存儲(chǔ)位置,相當(dāng)于分塊存儲(chǔ)。
2.4. DCMI 帶寬與性能
使用DCMI的相機(jī)應(yīng)用,使用連續(xù)抓取模式,功能往往是由相機(jī)連續(xù)輸出所攝圖像數(shù)據(jù)流到STM32,STM32 DCMI捕獲視頻流后,再輸出到屏幕顯示(如監(jiān)控)或做圖像數(shù)據(jù)處理、傳輸?shù)?。如果相機(jī)輸出的是高像素高色深高幀率的視頻流,DCMI在接收過(guò)程中,如不能及時(shí)處理,DCMI FIFO即會(huì)產(chǎn)生溢出錯(cuò)誤(Overrun),進(jìn)而導(dǎo)致圖像數(shù)據(jù)丟失,幀率下降等問(wèn)題。
2.4.1. DCMI 帶寬與性能
DCMI帶寬計(jì)算公式為:帶寬 = 分辨率 * 色深 * 幀率。
以三星S5K5CAGA為例,如表2中第1行數(shù)據(jù)(這里相機(jī)采用RGB565,16位/像素,8位輸出格式),則QXGA輸出的帶寬需求 =(2048 * 1536)* 2 * 6 ≈ 38MBps。像素時(shí)鐘為40MHz,8位輸出,每2個(gè)CLK傳輸1個(gè)像素?cái)?shù)據(jù),對(duì)應(yīng)的最大輸出能力為40 MBps。則QXGA在40MHz的像素時(shí)鐘頻率下是可以以6幀/秒的幀率輸入到DCMI的。DCMI捕獲圖像數(shù)據(jù)流,再由DMA傳輸?shù)綀D像緩沖區(qū),該例中,圖像緩沖區(qū)(幀緩沖區(qū))的大小為:2048 * 1546 * 2 ≈ 6.3 MByte。
高像素高色深的圖像,對(duì)應(yīng)的圖像緩沖區(qū)較大。當(dāng)MCU內(nèi)置的SRAM不能滿足DCMI圖像緩沖區(qū)需求時(shí),則需要用外部SDRAM來(lái)存儲(chǔ)。例如STM32F469 MCU(見(jiàn)表1,第6行數(shù)據(jù)),其FSMC支持的最大頻率為90MHz,寬度32位,則SDRAM的帶寬 = 90 * 4 = 360 MBps,能夠滿足DCMI帶寬的需求。一般,DCMI圖像緩沖區(qū)中的數(shù)據(jù)是需要再次傳輸或由CPU進(jìn)行計(jì)算處理的,理論上DCMI輸入的帶寬需求最大不應(yīng)超過(guò)SDRAM的帶寬的50%。這里需要注意SDRAM可能存在多個(gè)主控(如CPU、DMA、LTDC等)的訪問(wèn),如遇到SDRAM性能瓶頸問(wèn)題,可考慮下列方面進(jìn)行優(yōu)化:
(1)將各主控設(shè)備訪問(wèn)的存儲(chǔ)器盡量分開(kāi),以減少競(jìng)爭(zhēng)訪問(wèn);
(2)將CPU訪問(wèn)的SDRAM Bank 與DCMI圖像緩沖區(qū)的Bank分開(kāi);
(3)將DCMI圖像緩沖區(qū)區(qū)域設(shè)為不可緩沖,CPU 訪問(wèn)的區(qū)域則可以設(shè)為可緩沖。
對(duì)于性能,另外一個(gè)重要因素是總線競(jìng)爭(zhēng)問(wèn)題。DCMI DMA申請(qǐng)的AHB總線訪問(wèn)(即使在使用FIFO的情況下)并非長(zhǎng)Burst的訪問(wèn)。如果AHB總線上存在其它長(zhǎng)Burst訪問(wèn)(最大1KByte),會(huì)造成DMA延遲訪問(wèn)DCMI,令其不能及時(shí)將DCMI FIFO中的數(shù)據(jù)傳輸出去??梢哉J(rèn)定:DCMI需要傳輸數(shù)據(jù)時(shí)的總線繁忙是造成 其FIFO 溢出錯(cuò)誤的根源。解決辦法除了直接為設(shè)備分配不同SDRAM之外(將長(zhǎng)Burst訪問(wèn)放在其他SDRAM),還可以考慮在內(nèi)部SRAM增設(shè)DCMI LineBuffer,化零為整,巧妙避開(kāi)AHB 長(zhǎng)Burst 訪問(wèn)造成的DCMI延遲問(wèn)題。數(shù)據(jù)流如下:
(1)DCMI(經(jīng)DMA)=> 內(nèi)部SRAM(LineBuffer) ;
(2)內(nèi)部SRAM(LineBuffer)=> 外部SDRAM(圖像Buffer)。
由LineBuffer 到SDRAM的數(shù)據(jù)中轉(zhuǎn)傳輸請(qǐng)求,可使用DCMI IT_LINE 中斷(行結(jié)束)觸發(fā)。這里MCU如果是STM32F7/H7系列,還可使用MDMA 充分發(fā)揮AXI總線的優(yōu)勢(shì),但要注意LineBuffer 最好是8字節(jié)的倍數(shù)(64位總線)。
2.4.2. DCMI 圖像大小調(diào)整功能
當(dāng)考慮了上面的措施,仍無(wú)法滿足應(yīng)用對(duì)高分辨率需求時(shí),用戶可以通過(guò)設(shè)置相機(jī),修改相機(jī)輸出分辨率,配合DCMI調(diào)整圖像大小功能,找到合適的折中方案。DCMI提供的相關(guān)功能如下:
(1)窗口裁剪:
使用寄存器DCMI_CWSTRT指定起始坐標(biāo);
使用寄存器DCMI_CWSIZE指定窗口大小。
(2)圖像數(shù)據(jù)調(diào)整(詳見(jiàn)寄存器DCMI_CS中LSM/BSM等位域):
- 行選擇:可選擇2選1,行數(shù)減半;
- 數(shù)據(jù)選擇:字節(jié)流上可進(jìn)行2選1、4選1已經(jīng)4選2 (注意:對(duì)于RGB565格式, 只能4選2可選,2選1及4選1會(huì)造成色彩數(shù)據(jù)錯(cuò)亂)。
2.5. DCMI 10/12/14數(shù)據(jù)線輸入
DCMI 支持最多14條數(shù)據(jù)線(D13 - D0),如果將DCMI配置為接收10、12或14位數(shù)據(jù),DCMI將用2個(gè)像素時(shí)鐘周期捕獲一個(gè)32位數(shù)據(jù)。以12位數(shù)據(jù)寬度為例,DCMI在第1個(gè)像素時(shí)鐘捕獲12位LSB(忽略D[13 :12]),存于DCMI_DR寄存器低16位字中低12位,高4位(D[15 :12)清零;第2像素時(shí)鐘捕獲的12位LSB則存于DCMI_DR高16位字的低12位,高4位(DCMI_DR的[31 : 28])清零。另外相機(jī)也必須配置為10/12/14位輸出。具體情況則由應(yīng)用決定。
3.小結(jié)
本文通過(guò)介紹STM32 DCMI支持的最大像素時(shí)鐘頻率,支持的圖像分辨率及與幀率的關(guān)系,進(jìn)而引出DCMI帶寬與性能提升的注意事項(xiàng)。另外附帶了DCMI圖像大小的調(diào)整及10~14數(shù)據(jù)線的簡(jiǎn)介,為用戶遇到相關(guān)問(wèn)題時(shí)提供思路參考。
來(lái)源:STM32單片機(jī)
免責(zé)聲明:本文為轉(zhuǎn)載文章,轉(zhuǎn)載此文目的在于傳遞更多信息,版權(quán)歸原作者所有。本文所用視頻、圖片、文字如涉及作品版權(quán)問(wèn)題,請(qǐng)聯(lián)系小編進(jìn)行處理。
推薦閱讀: