<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>
關(guān) 閉

新聞中心

EEPW首頁(yè) > 工控自動(dòng)化 > 設計應用 > 基于DM6467T的高清攝像頭驅動(dòng)設計

基于DM6467T的高清攝像頭驅動(dòng)設計

作者: 時(shí)間:2016-10-15 來(lái)源:網(wǎng)絡(luò ) 收藏

摘要 為滿(mǎn)足高清視頻監控的需求,針對目前raw格式傳感器的驅動(dòng)支持尚不完善的問(wèn)題。文中基于TI公司的芯片硬件平臺,利用芯片提供的接口,對高清攝像頭進(jìn)行驅動(dòng)程序的設計。分析了驅動(dòng)結構,并分別對核心驅動(dòng)、接口驅動(dòng)以及傳感器驅動(dòng)進(jìn)行修改及設計。編寫(xiě)了驅動(dòng)測試程序,實(shí)驗結果表明,該設計能成功采集到raw格式的圖像數據,對同類(lèi)傳感器驅動(dòng)設計具有一定參考價(jià)值。

本文引用地址:http://dyxdggzs.com/article/201610/307177.htm

隨著(zhù)數字視頻技術(shù)成為安防監控與視頻會(huì )議不可缺少的一部分,人們對視頻穩定性、圖像清晰度以及數據實(shí)時(shí)性的要求也逐步提高。為得到更清晰的圖像,TI(德州儀器)推出了達芬奇系列芯片。該系列芯片善于處理多媒體數據,支持多種視頻格式的輸入和高清視頻的輸入。對于YUV格式的視頻圖像輸入,目前已有較為成熟的驅動(dòng)可直接使用,然而常見(jiàn)的傳感器通常輸出raw格式的視頻數據,raw格式的是最原始的視頻數據,其信息量最大,現階段對傳感器的驅動(dòng)支持尚不完善。本文基于Linux環(huán)境,介紹了、和傳感器驅動(dòng)之間的關(guān)系,完成視頻采集設備驅動(dòng)的設計及簡(jiǎn)單測試程序的編寫(xiě)。

1 硬件平臺架構介紹

在進(jìn)行驅動(dòng)程序設計之前,首先要了解相關(guān)硬件設備的信息。

1.1 介紹

是TI公司推出的一款達芬奇系列的雙核芯片。達芬奇技術(shù)的基礎是集成了DSP與ARM雙內核的片上系統,ARM內核可加載操作系統,主要起控制和管理作用,DSP內核相當于一個(gè)只負責處理編解碼算法的協(xié)處理器。DM6467T擁有1 GHz主頻的DSP內核,500 MHz主頻的ARM926E—JS內核以及2個(gè)HDVICP硬件協(xié)處理器?;诙嗝襟w背景提出的DM646 7T,不僅運算能力高,且具有較強的控制能力。

DM6467T擁有VPIF(Video Port Interface)視頻接口功能模塊,VPIF模塊管理著(zhù)視頻數據的輸入輸出功能,可滿(mǎn)足各種視頻輸入輸出設備的格式。該模塊有4路可配置的數據通道,每路為8 bit的數據寬度,其中兩路用于視頻輸出,另兩路用于視頻輸入。VPIF支持ITU—BT.656、ITU—BT.1120格式的視頻,也可支持數據寬度為8/10/12 bit的raw格式圖像數據。

1.2 MT9P031傳感器

MT9P031傳感器是Aptina公司推出的一款高清傳感器,最高可支持2 592×1 944像素的視頻采集。在720p的視頻格式下,每秒可采集60幀視頻圖像。MT9P031利用I2C(Inter-Integrated Circuit)總線(xiàn)進(jìn)行通信,通過(guò)I2C設置傳感器內部寄存器,即可控制傳感器的工作模式及工作參數。I2C總線(xiàn)是由Philips公司開(kāi)發(fā)的兩線(xiàn)式串行總線(xiàn),用于連接微控制器及其外圍設備。

傳感器端連接示意圖如圖1所示。傳感器的數據接口與DM6467T的VPIF接口相連接。MT9P031傳感器采集輸出的是12位寬度的原始數據,需要占用VPIF接口中兩路8 bit的數據通道,傳感器利用行同步信號與幀同步信號進(jìn)行同步,其同步信號與VPIF接口相連接。

a.jpg

2 視頻驅動(dòng)設計

2.1 V4L2驅動(dòng)

V4L2(Video for Linux two)是Linux下開(kāi)發(fā)視頻采集設備驅動(dòng)程序的一套規范,這套規范使用分層的方法為驅動(dòng)程序的開(kāi)發(fā)提供了清晰的模型和一致的接口。V4L2本身是一個(gè)字符設備,具有字符設備的所有特性,直接將接口暴露給用戶(hù)。當視頻設備連接到主機后,驅動(dòng)程序會(huì )首先注冊一個(gè)主設備號為81的字符設備,其是硬件唯一的身份標識。

圖2展示了V4L2的驅動(dòng)結構。驅動(dòng)正常加載完畢后,會(huì )在/dev目錄下產(chǎn)生/dev/videoX設備節點(diǎn)。圖中的V4L2驅動(dòng)核心構建一個(gè)內核中標準視頻設備驅動(dòng)的框架,為視頻操作提供統一的接口函數。平臺V4L2驅動(dòng)部分,根據平臺自身的特性實(shí)現與平臺相關(guān)的驅動(dòng),平臺驅動(dòng)用于控制視頻接收端的相關(guān)操作。本文采用DM6467T處理器,使用DM6467T的VPIF接口,該平臺驅動(dòng)即VPIF驅動(dòng)。用戶(hù)在利用接口進(jìn)行操作時(shí),V4L2調用平臺驅動(dòng)所提供的功能對DM6467T進(jìn)行操作。用戶(hù)需要采集傳感器數據時(shí),利用V4L2驅動(dòng)核心提供的接口進(jìn)行操作,驅動(dòng)核心將負責下層驅動(dòng)的調用,完成數據采集工作。

b.jpg

2.2 VPIF接口驅動(dòng)

VPIF(Video Port Interface)是DM6467視頻接口功能模塊,VPIF接口共4路數據通道,兩路8位視頻輸入通道,兩路輸出通道,其4路通道擁有相同的硬件結構。DM6467T通過(guò)VPIF接口接收傳感器采集的視頻數據,并將所有輸入數據都緩存在片內Flash中。

首先需設計驅動(dòng)初始化程序,在加載驅動(dòng)過(guò)程中,VPIF需要進(jìn)行初始化工作,主要包括分配緩沖,檢測設備類(lèi)型,分配內存給通道對象,將設備注冊為V4l2_dev,申請視頻數據接收時(shí)的中斷,該中斷表示一幀視頻數據接收完成。注冊相關(guān)的控制類(lèi)函數,該類(lèi)函數將實(shí)現用戶(hù)層接口的控制操作。

余下的VPIF驅動(dòng)函數設計可分為3部分:(1)用戶(hù)控制相關(guān)的操作函數,該類(lèi)函數實(shí)現V4L2中ioctl函數的具體操作。用戶(hù)可通過(guò)V4L2對VPIF進(jìn)行查詢(xún)設備能力、設置像素、設置標準格式、申請緩沖區、對緩沖區進(jìn)行操作和開(kāi)啟或停止視頻采集等操作。(2)字符設備操作相關(guān)的函數,包括設備打開(kāi)的實(shí)現,設備被關(guān)閉時(shí)資源釋放以及內存映射的實(shí)現。(3)實(shí)現中斷服務(wù)程序。采集視頻數據階段,每接收到一幀完整數據后,系統會(huì )產(chǎn)生一個(gè)中斷,跳轉到中斷服務(wù)程序。產(chǎn)生中斷表示緩存區域已被接收到的圖像數據填滿(mǎn),中斷服務(wù)程序中需要實(shí)現緩存輪換的操作,即將緩存指針指向下一個(gè)空白區域。

2.3 MT9P031驅動(dòng)

MT9P031傳感器驅動(dòng)首先需要實(shí)現初始化功能。傳感器驅動(dòng)需要作為v4l2_subdev進(jìn)行注冊,注冊完成后可在VPIF驅動(dòng)中利用v4l2_subdev_call函數對其進(jìn)行操作。MT9P031的內部控制寄存器由I2C總線(xiàn)進(jìn)行控制,傳感器驅動(dòng)在初始化時(shí)還需注冊為I2C設備,并利用I2C總線(xiàn)進(jìn)行探測,讀取傳感器的設備號,檢測傳感器芯片是否正常。

由于MT9P031是V4L2子設備,驅動(dòng)需要實(shí)現供上層平臺驅動(dòng)調用的控制函數,包括設置及獲取當前視頻格式,設置及獲取視頻參數以及實(shí)現傳感器數據采集與停止功能的函數。

最后需要在芯片相關(guān)的設置文件中,加入VPIF與傳感器的文件的配置,配置基本參數,如I2C地址、VPIF通道的連接情況等信息。

3 驅動(dòng)測試程序

3.1 驅動(dòng)程序編寫(xiě)

本文編寫(xiě)的驅動(dòng)程序直接編譯在內核中,在Linux內核啟動(dòng)的過(guò)程中,視頻驅動(dòng)進(jìn)行初始化。內核加載完畢后,在/dev目錄下產(chǎn)生/dev/vide0設備節點(diǎn),用戶(hù)空間通過(guò)調用Open函數即可打開(kāi)設備,進(jìn)行視頻采集操作。具體流程如圖3所示。

c.jpg

用戶(hù)打開(kāi)設備后,利用Ioctrl函數進(jìn)行操作,通過(guò)VIDIOC_QUERTCAP控制命令可查詢(xún)驅動(dòng)支持格式,并利用其他控制命令進(jìn)行相應設置。Linux操作系統和驅動(dòng)程序運行在內核空間,應用程序運行在用戶(hù)空間,兩者不能直接使用指針傳遞數據,需通過(guò)VIDIOC_REQBUFS命令和Malloc函數分別在內核空間和用戶(hù)空間分配內存緩沖區,最后通過(guò)Mmap函數進(jìn)行內存映射。利用VIDIOC_QBUF命令將分配到的緩沖加入緩沖隊列,該隊列將用于存放接收到的視頻數據。利用VIDIOC_STREAMON命令開(kāi)始視頻采集,從緩沖隊列中取到視頻數據,并保存在SDRAM中,保存完畢后將緩沖區放回隊列。采集完畢后需先停止視頻采集,調用Close函數關(guān)閉視頻設備,并且釋放申請的內存空間。

3.2 測試結果

最終采集到的視頻數據存放在SDRAM中,傳感器采集到的視頻圖像是raw格式的數據,其數據格式為紅綠/綠藍交錯的值,需要利用差值算法將其轉換成RGB圖像再進(jìn)行顯示,最終呈現了較為清晰的圖像,驗證了驅動(dòng)程序的正確性。

由于raw格式的數據量較大,在實(shí)際應用中并不適合將該數據直接存儲至存儲器中,需要對數據進(jìn)行轉碼壓縮,隨后再存儲或通過(guò)網(wǎng)絡(luò )進(jìn)行傳輸。利用該驅動(dòng)程序進(jìn)行網(wǎng)絡(luò )攝像頭的設計,由于轉碼運算量大,在720P的格式下,目前實(shí)時(shí)的采集播放速率可達到10 fip·s-1。雖未達到傳感器的標準,但驗證了驅動(dòng)的正確性,且基本滿(mǎn)足使用需求。對DSP算法進(jìn)行優(yōu)化后,視頻每秒的幀數將可進(jìn)一步提升。

4 結束語(yǔ)

本文介紹了V4L2驅動(dòng)的設計架構,利用DM6467T的VPIF接口,設計了基于DM6467T的高清?,F有基于VPIF接口設計的驅動(dòng)僅支持YUV分量格式的視頻數據,本文實(shí)現了在VPIF下針對raw格式視頻數據采集的驅動(dòng),采集數據也達到了預期的效果。raw格式圖像數據量大,根據需求進(jìn)行處理后,用途廣泛。



評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>