www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁(yè) > 嵌入式 > 嵌入式軟件
[導(dǎo)讀]WinCE5.0的USB Camera流接口驅(qū)動(dòng)開(kāi)發(fā)

引 言
    WinCE5.0是一個(gè)32位、多任務(wù)、多線程的實(shí)時(shí)嵌入式操作系統(tǒng)。USB Camera 以其良好的性能和低廉的價(jià)格得到廣泛的應(yīng)用,同時(shí)因其靈活、方便的特性,易于集成到嵌入式系統(tǒng)中。通過(guò)采用USB Camera可以在WinCE5.0下方便地得到實(shí)時(shí)圖像。但是由于嵌入式硬件環(huán)境的多樣性以及WinCE5.0對(duì)USB設(shè)備驅(qū)動(dòng)開(kāi)發(fā)只提供了一些底層支持,攝像頭廠商尚未提供WinCE5.0下USB攝像頭的驅(qū)動(dòng),因此開(kāi)發(fā)出WinCE5.0下USB攝像頭驅(qū)動(dòng)具有實(shí)際的意義和價(jià)值。本文正是針對(duì)這一情況,對(duì)WinCE5.0下USB設(shè)備驅(qū)動(dòng)開(kāi)發(fā)進(jìn)行研究,并設(shè)計(jì)出基于流接口驅(qū)動(dòng)模型的USB攝像頭驅(qū)動(dòng)程序?,F(xiàn)在已經(jīng)開(kāi)發(fā)出來(lái)的驅(qū)動(dòng)適用于Zc030x PLUS這一系列的攝像頭。Samstmg 2410為實(shí)驗(yàn)的硬件平臺(tái)。


1 WinCE5.0下USB總線驅(qū)動(dòng)框架
    USB系統(tǒng)由USB主機(jī)、一個(gè)或多個(gè)USB設(shè)備和物理總線組成。主機(jī)上又分兩層:較高的包含USB設(shè)備驅(qū)動(dòng)程序的軟件層和主機(jī)控制器硬件層,也稱作“適配層”。主機(jī)的主要任務(wù)是控制對(duì)USB設(shè)備的雙向數(shù)據(jù)傳輸。物理總線是一組USB電纜,用來(lái)將控制器和外圍設(shè)備連接起來(lái)。WinCE5.0的USB系統(tǒng)軟件由兩層組成:USB設(shè)備驅(qū)動(dòng)程序?qū)雍偷讓拥挠蒞inCE5.0實(shí)現(xiàn)的USB函數(shù)層。
USB設(shè)備驅(qū)動(dòng)程序使用USB函數(shù)來(lái)建立與它們所控制設(shè)備的連接,并對(duì)這些設(shè)備進(jìn)行配置和通信。較低的USB函數(shù)層本身又由兩部分組成——較高的通用串行總線驅(qū)動(dòng)程序(USBD)模塊和較低的主控制器驅(qū)動(dòng)程序(HCD)模塊。HCD提供了抽象的主機(jī)控制器,且對(duì)主機(jī)控制器所見(jiàn)到的USB系統(tǒng)的數(shù)據(jù)傳輸進(jìn)行抽象。USBD提供一個(gè)抽象的設(shè)備,且對(duì)USBD客戶和USB設(shè)備功能部件之間的數(shù)據(jù)傳輸進(jìn)行抽象。USB設(shè)備驅(qū)動(dòng)程序使用USBD接口函數(shù)與外圍設(shè)備進(jìn)行通信。
    IHV和USB設(shè)備制造商利用USBD提供的函數(shù)來(lái)實(shí)現(xiàn)USB設(shè)備的驅(qū)動(dòng)程序。OEM負(fù)責(zé)給基于WinCE的平臺(tái)提供HCD模塊,這樣相應(yīng)的硬件才能與USBD模塊進(jìn)行交互。圖1說(shuō)明了與主機(jī)的USB硬件和外圍設(shè)備相對(duì)應(yīng)的軟件的各個(gè)層。

2 WinCE5.0下流驅(qū)動(dòng)模型
    基于WinCE5.0平臺(tái)的兩種專用的驅(qū)動(dòng)模型為:本機(jī)設(shè)備驅(qū)動(dòng)程序和流接口驅(qū)動(dòng)程序。本機(jī)設(shè)備驅(qū)動(dòng)程序適合于集成到WinCE 5.0 平臺(tái)的設(shè)備;而后者則是一般類型的設(shè)備驅(qū)動(dòng)程序,適用于大部分外圍設(shè)備,如調(diào)制解調(diào)器、打印機(jī)等。對(duì)大多數(shù)USB外圍設(shè)備來(lái)說(shuō),適用于采用流接口驅(qū)動(dòng)程序模型來(lái)開(kāi)發(fā)驅(qū)動(dòng)程序。
    流接口驅(qū)動(dòng)程序是一種可以定制接口的驅(qū)動(dòng)模型,一般由設(shè)備管理器負(fù)責(zé)管理。它把設(shè)備管理器和應(yīng)用程序的命令轉(zhuǎn)換成所控設(shè)備的適當(dāng)動(dòng)作所需信息。流接口驅(qū)動(dòng)程序需要實(shí)現(xiàn)一組固定的流接口函數(shù),供給WinCE5.0系統(tǒng)內(nèi)核使用。

    USB設(shè)備的流接口驅(qū)動(dòng)程序和WinCE5.0系統(tǒng)其他部件間的關(guān)系如圖2所示。流接口驅(qū)動(dòng)程序通過(guò)系統(tǒng)提供的文件系統(tǒng)API與應(yīng)用程序交互;而系統(tǒng)通過(guò)設(shè)備管理器完成對(duì)流接口驅(qū)動(dòng)程序的加載、卸載等管理工作;流接口驅(qū)動(dòng)程序通過(guò)調(diào)用USBD模塊提供的接口函數(shù)實(shí)現(xiàn)與底層USB設(shè)備通信。


    本文使用的流接口函數(shù)方法如表1所列。

    USB設(shè)備驅(qū)動(dòng)程序必須輸出的函數(shù)有:
    ①USBDeviecAttach()。當(dāng)USB設(shè)備連接到計(jì)算機(jī)上時(shí),USBD模塊就會(huì)調(diào)用此函數(shù)。這個(gè)函數(shù)主要用于初始化USB設(shè)備,取得USB設(shè)備信息,配置USB設(shè)備,并且申請(qǐng)必需的資源。
    ②USBInstallDriver ()。主要用于創(chuàng)建一個(gè)驅(qū)動(dòng)程序加載所需的注冊(cè)表信息,例如讀/寫(xiě)超時(shí)、設(shè)備名稱等。
    ③USBUninstallDriver ()。主要用于釋放驅(qū)動(dòng)程序所占用的資源,以及刪除UsbInstallDriver ()函數(shù)創(chuàng)建的注冊(cè)表等。
    上述3個(gè)函數(shù)接口是所有的USB驅(qū)動(dòng)程序必須提供的,缺一不可。
    另外較為重要的是USB設(shè)備驅(qū)動(dòng)程序的注冊(cè)表配置。一般的USB設(shè)備驅(qū)動(dòng)程序的注冊(cè)表配置在[HKEY_LOCAL_M(jìn)ACHINE\Drivers\USB\LoadClients\口]下,每個(gè)驅(qū)動(dòng)程序的子鍵都有Group 1_ID\Group2_ID\Group3_ID\DriverName 格式,設(shè)備的子鍵由供應(yīng)商、設(shè)備類和協(xié)議信息通過(guò)下劃線組成。表2列出了允許的組合。

    以本實(shí)驗(yàn)所采用的USB Camera為例,該USB Cam-era的供應(yīng)廠商ID為0X046d,設(shè)備ID為0x08a2,那么它的加載注冊(cè)表應(yīng)該寫(xiě)為:


    需要注意的是,注冊(cè)表的構(gòu)成都是以十進(jìn)制數(shù)值來(lái)標(biāo)識(shí)的,也要注意十進(jìn)制和十六進(jìn)制之間數(shù)的轉(zhuǎn)換。


3 WinCE5.0下USB攝像頭驅(qū)動(dòng)程序
    實(shí)驗(yàn)使用的USB Camera是中星微公司的301芯片組的Zc030x,它的Vid/Pid為0x046d、0x08a2。由于實(shí)時(shí)圖像數(shù)據(jù)傳送量比較大,很多USB Camera產(chǎn)品在圖像傳輸之前已進(jìn)行了數(shù)據(jù)壓縮處理,如果不知道解碼算法,是沒(méi)有辦法在WinCE上獲得圖像的。在開(kāi)發(fā)的時(shí)候主要使用SnoopyPro,它是一款可以分析USB通信數(shù)據(jù)的軟件,輔助進(jìn)行Zc030x的驅(qū)動(dòng)開(kāi)發(fā)工作,最后成功開(kāi)發(fā)出Zc030x在WinCE5.0下的驅(qū)動(dòng)程序。下面結(jié)合USBCamera驅(qū)動(dòng)開(kāi)發(fā)說(shuō)明驅(qū)動(dòng)中的數(shù)據(jù)流向和必要的函數(shù)使用。首先是具體的注冊(cè)表信息:


    其中,hDevice是由系統(tǒng)提供的當(dāng)前外設(shè)的句柄,通過(guò)它可以獲取外設(shè)的信息,如VID、PID等;UsbFuncs是系統(tǒng)提供的指向USBD函數(shù)的函數(shù)指針,通過(guò)它可以調(diào)用USBD函數(shù),如GetlsochResult、IssuelsochTransfer等;AcceptControl指針指向的bool值需要我們確定,如果可控,令其為TRUE,否則為FALSE。
    在這個(gè)函數(shù)里面,要做的工作包括確定外設(shè)是否可控,分配和填寫(xiě)設(shè)備的上下文內(nèi)容,調(diào)用ActivateDevjce()函數(shù)在“Drivers\USB\ClientDrivers\Camera_Class”鍵值中注冊(cè)分配到的設(shè)備上下文的指針(其中Camera_Class是對(duì)USB Camera的命名),同時(shí)ActivateDevice在注冊(cè)表[HKEY_LOCAL_MACHINE\Drivers\Active\N]中登記設(shè)備上下文的指針,其中N為整數(shù),它是系統(tǒng)自動(dòng)分配給此驅(qū)動(dòng)的數(shù)字。系統(tǒng)在調(diào)用ActivateDevice()過(guò)程中,又會(huì)自動(dòng)調(diào)用CAM_Init函數(shù)。
    DWORD CAM_Init(LPCTSTR pContext,LPCVOIDIp VBusContext)
    其中,pContext是系統(tǒng)自動(dòng)傳入的字符串內(nèi)容,也是上面的鍵名,即[HKEY_LOCAL_MACHINE\Drivers\Active\N];CAM_Init要完成的就是在此鍵下讀出設(shè)備上下文的指針,將其作為DWORD返回;IpvBusContext不用考慮。
    在USBDeviceAttach()中,最后要完成的工作是在此函數(shù)內(nèi)調(diào)用USBD模塊的RegisterNotificationRoutine函數(shù)登記注冊(cè)DeviceNotify函數(shù)。這個(gè)DeviceNotify函數(shù)是必需的,在設(shè)備被移走后,系統(tǒng)調(diào)用這個(gè)函數(shù)完成相應(yīng)的善后工作。
    BOOL WINAPI DeviceNotify(LPVOID lpvNotifyPa-rameter DWORD dwCode.LPDWORD dwInf01.LPDW0RDdwlnfo2.LPDWORD dwlnfo3.LPDWORD dwlnfo4)
    其中,IpvNotifyParameter是設(shè)備的上下文句柄,在RegisterNoticationRoutine中作為參數(shù)傳入;dwCode是系統(tǒng)調(diào)用此函數(shù)的原因,如設(shè)備被移走,dwcode的值就為USB_CLOSE_DEVICE,相應(yīng)的,用戶進(jìn)行卸載DLL工作;dwInfol,…,dwInfo4沒(méi)有使用。
    自此,系統(tǒng)在USBDeviceAttach中完成對(duì)所加USB外設(shè)的驅(qū)動(dòng)加載。當(dāng)有用戶調(diào)用CreateFile函數(shù),系統(tǒng)會(huì)將用戶填入CreateFile()的參數(shù)值,直接傳到CAM_Open()。
    DWORD CAM_Open(DWORD hDeviceContext,DWORDAccessCode,DWORD ShareMode)
    其中,hDeviceContext是驅(qū)動(dòng)上下文句柄,由系統(tǒng)自動(dòng)填充;AccessCode是訪問(wèn)模式,ShareMode是共享模式,均由CreateFile()傳遞過(guò)來(lái);CAM_Open的工作是將hDe-viceContext以DWORD的形式返回,再作為CreateFile()的句柄值返回給用戶。當(dāng)用戶調(diào)用CloseHandle()時(shí),系統(tǒng)將直接調(diào)用CAM_Close(),用于關(guān)閉一個(gè)驅(qū)動(dòng)程序。
    B00L CAM_Close(DWORD hOpenContext)
    其中,hOpenContext是設(shè)備驅(qū)動(dòng)的引用事例句柄,由CAM_Open創(chuàng)建。本驅(qū)動(dòng)中,所有對(duì)USB Camera的操作均通過(guò)IOControl()映射到CAM_IOControl來(lái)完成。下面是CAM_IOControl的部分源碼分析:


    由于本驅(qū)動(dòng)是針對(duì)USBCamera的,因此CAM_Write、CAM_Read、CAM_PowerUp、CAM_PowerDown并沒(méi)有內(nèi)容;但是只要用戶調(diào)用WriteFile,系統(tǒng)就將映射到CAM_Write。其他函數(shù)類似。通常,Camera對(duì)圖像的壓縮采用標(biāo)準(zhǔn)是MJPEG算法。在Zc030x上正是采用這一算法完成對(duì)數(shù)據(jù)壓縮的。只要在驅(qū)動(dòng)上增加MJPEG的解碼算法,還原壓縮數(shù)據(jù),就可以正確顯示圖像了。至此,整個(gè)USB Camera的驅(qū)動(dòng)編寫(xiě)工作完成。經(jīng)過(guò)實(shí)驗(yàn)驗(yàn)證,已經(jīng)實(shí)現(xiàn)了最高為25幀/s,大小為320×240的圖片的傳輸。


結(jié) 語(yǔ)
    本文介紹了WinCE5.0下USB設(shè)備驅(qū)動(dòng)框架,結(jié)合USB Camera的驅(qū)動(dòng)開(kāi)發(fā)實(shí)例說(shuō)明了在USB驅(qū)動(dòng)框架中驅(qū)動(dòng)數(shù)據(jù)的流動(dòng)方向,并已在中星微公司的301PLUS和303這兩個(gè)系列的攝像頭上得到成功運(yùn)用和實(shí)踐。所采用的程序設(shè)計(jì)方法及思想,對(duì)其他類似嵌入式系統(tǒng)軟件的設(shè)計(jì)也有較高的參考價(jià)值。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

隨著13代酷睿處理器的上市,銘瑄本次同步發(fā)布了四款Z790主板,包括兩款A(yù)TX、一款mATX,以及一款I(lǐng)TX迷你小板。其中,包括新款MS-終結(jié)者Z790M D5主板,售價(jià)僅1499元。將在10月20日21點(diǎn)隨13代酷睿處...

關(guān)鍵字: 酷睿 ATX 接口 DDR

USB-C接口全稱為USB Type-C,屬于USB 3.0下一代接口,其亮點(diǎn)在于更加纖薄的設(shè)計(jì)、更快的傳輸速度(最高可達(dá)10Gbps)、更強(qiáng)的電力傳輸(最高100W),此外USB-C接口還支持雙面插入,正反面隨便插,相...

關(guān)鍵字: iPhone 15 Lightning USB

GRL東莞實(shí)驗(yàn)室將與上海和臺(tái)北實(shí)驗(yàn)室一同,提供Windows Host認(rèn)證服務(wù) 加利福尼亞州圣克拉拉市2022年9月22日 /美通社/ -- 高速信號(hào)和充電技術(shù)測(cè)...

關(guān)鍵字: Windows THUNDERBOLT USB OS

腦機(jī)接口(Brain Computer Interface,BCI [4] ),指在人或動(dòng)物大腦與外部設(shè)備之間創(chuàng)建的直接連接,實(shí)現(xiàn)腦與設(shè)備的信息交換。這一概念其實(shí)早已有之,但直到上世紀(jì)九十年代以后,才開(kāi)始有階段性成果出現(xiàn)...

關(guān)鍵字: 腦機(jī) 接口 設(shè)備

接下來(lái)測(cè)試燒寫(xiě)功能,本次采用串口和USB燒寫(xiě)方式。使用ISP串口燒寫(xiě)這是51單片機(jī)常用的方案,本次測(cè)試比較順利,沒(méi)有遇到什么問(wèn)題。但是USB燒寫(xiě)沒(méi)有測(cè)試成功,USB燒寫(xiě)方式不需要任何的驅(qū)動(dòng)和硬件支持,直接將USB線和ST...

關(guān)鍵字: PCB控制板 USB 串口

倉(cāng)儲(chǔ)機(jī)器人領(lǐng)域的領(lǐng)先企業(yè)率先實(shí)現(xiàn)這一行業(yè)里程碑 馬薩諸塞州威爾明頓2022年9月16日 /美通社/ -- 倉(cāng)儲(chǔ)處理自主移動(dòng)機(jī)器人(AMR)市場(chǎng)領(lǐng)先企業(yè)Locus Robot...

關(guān)鍵字: ROBOTICS AMR USB 移動(dòng)機(jī)器人

(全球TMT2022年9月6日訊)9月5日,思靈機(jī)器人發(fā)布“Agile Core & Diana”系列產(chǎn)品。本系列產(chǎn)品包括軟件Agile Core,和兩個(gè)智能力控機(jī)器人diana7系列。其中,思靈自主研發(fā)的操作...

關(guān)鍵字: 機(jī)器人 CORE AN 接口

(全球TMT2022年8月26日訊)運(yùn)輸和物流提供商GEODIS和用于營(yíng)運(yùn)倉(cāng)庫(kù)的自主移動(dòng)機(jī)器人(AMR)企業(yè)Locus Robotics宣布了一項(xiàng)新的擴(kuò)展協(xié)議,將在未來(lái)24個(gè)月內(nèi)在GEODIS的全球倉(cāng)庫(kù)網(wǎng)點(diǎn)總共部署10...

關(guān)鍵字: USB GE AMR ROBOTICS

GEODIS與Locus Robotics簽署擴(kuò)展協(xié)議,在全球倉(cāng)庫(kù)網(wǎng)點(diǎn)部署1000個(gè)LocusBot 田納星州納什維爾和馬薩諸塞州威明頓2022年8月25日 /美通社/ -- 全球領(lǐng)先的運(yùn)輸和物流提供商GEODIS和用...

關(guān)鍵字: USB ROBOTICS GE AMR

在DDR4出現(xiàn)十年之后,DDR5翩翩來(lái)遲。作為十年之久的換代,DDR5的設(shè)計(jì)上實(shí)現(xiàn)了諸多突破:新的通道設(shè)計(jì)、片內(nèi)ECC、片上PMIC、更多溫度傳感器乃至插槽缺口的位移等。新的設(shè)計(jì)規(guī)范和標(biāo)準(zhǔn),讓內(nèi)存容量、帶寬和傳輸速率得以...

關(guān)鍵字: SPD DDR5 DIMM Rambus 接口

嵌入式軟件

15715 篇文章

關(guān)注

發(fā)布文章

編輯精選

技術(shù)子站

關(guān)閉