《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 測(cè)試測(cè)量 > 設(shè)計(jì)應(yīng)用 > USB總線數(shù)據(jù)采集設(shè)備驅(qū)動(dòng)程序的設(shè)計(jì)
USB總線數(shù)據(jù)采集設(shè)備驅(qū)動(dòng)程序的設(shè)計(jì)
摘要: 隨著計(jì)算機(jī)應(yīng)用技術(shù)的發(fā)展,虛擬儀器、自動(dòng)測(cè)試系統(tǒng)、自動(dòng)控制等領(lǐng)域,均越來(lái)越多的應(yīng)用計(jì)算機(jī)來(lái)進(jìn)行數(shù)據(jù)處理。USB總線標(biāo)準(zhǔn)的提出,解決了計(jì)算機(jī)傳統(tǒng)I/O接口通用性差、不易擴(kuò)展、易受計(jì)算機(jī)插槽數(shù)量、地址和中斷資源的限制等缺點(diǎn),使計(jì)算機(jī)在測(cè)控領(lǐng)域的重要性與日俱增,也使USB總線在數(shù)采測(cè)控業(yè)界備受關(guān)注,并在各種測(cè)控設(shè)備中迅速發(fā)展,但專用的USB設(shè)備不能像鼠標(biāo)、鍵盤(pán)等HID類設(shè)備一樣使用Windows系統(tǒng)提供的標(biāo)準(zhǔn)驅(qū)動(dòng)程序,而是需要開(kāi)發(fā)專用的驅(qū)動(dòng)程序。
Abstract:
Key words :

 

0 引言
    隨著計(jì)算機(jī)應(yīng)用技術(shù)的發(fā)展,虛擬儀器、自動(dòng)測(cè)試系統(tǒng)、自動(dòng)控制等領(lǐng)域,均越來(lái)越多的應(yīng)用計(jì)算機(jī)來(lái)進(jìn)行數(shù)據(jù)處理。USB總線標(biāo)準(zhǔn)的提出,解決了計(jì)算機(jī)傳統(tǒng)I/O接口通用性差、不易擴(kuò)展、易受計(jì)算機(jī)插槽數(shù)量、地址和中斷資源的限制等缺點(diǎn),使計(jì)算機(jī)在測(cè)控領(lǐng)域的重要性與日俱增,也使USB總線在數(shù)采測(cè)控業(yè)界備受關(guān)注,并在各種測(cè)控設(shè)備中迅速發(fā)展,但專用的USB設(shè)備不能像鼠標(biāo)、鍵盤(pán)等HID類設(shè)備一樣使用Windows系統(tǒng)提供的標(biāo)準(zhǔn)驅(qū)動(dòng)程序,而是需要開(kāi)發(fā)專用的驅(qū)動(dòng)程序。開(kāi)發(fā)驅(qū)動(dòng)程序與開(kāi)發(fā)Windows應(yīng)用程序完全不同,驅(qū)動(dòng)程序以系統(tǒng)的內(nèi)核模式運(yùn)行,任何細(xì)小的錯(cuò)誤都可能引起操作系統(tǒng)的崩潰。因此,專用設(shè)備驅(qū)動(dòng)程序開(kāi)發(fā)的復(fù)雜性,成為了USB總線在該領(lǐng)域發(fā)展的瓶頸。隨著軍事裝備自動(dòng)化、數(shù)字化、智能化程度越來(lái)越高,一種更為簡(jiǎn)便的驅(qū)動(dòng)程序開(kāi)發(fā)方法的探討十分有益。基于軍用電站檢測(cè)儀中USB數(shù)據(jù)采集模塊的開(kāi)發(fā),介紹了USB專用設(shè)備驅(qū)動(dòng)程序開(kāi)發(fā)的一般過(guò)程。

1 WDM驅(qū)動(dòng)程序概述
    WDM(windows driver mode)是微軟推出的一種驅(qū)動(dòng)程序模型,以簡(jiǎn)化驅(qū)動(dòng)程序的開(kāi)發(fā)。它采用分層驅(qū)動(dòng)的方式,即在應(yīng)用程序和物理設(shè)備之間存在著幾個(gè)不同層次的驅(qū)動(dòng)程序,且各層驅(qū)動(dòng)程序有不同的優(yōu)先級(jí),每個(gè)驅(qū)動(dòng)程序?qū)?yīng)一層,不同層上的驅(qū)動(dòng)程序可以相互調(diào)用。USB系統(tǒng)的組成如圖1所示:應(yīng)用程序通過(guò)API函數(shù)調(diào)用Win32系統(tǒng)子函數(shù),驅(qū)動(dòng)程序分為設(shè)備驅(qū)動(dòng)程序,總線驅(qū)動(dòng)程序(USBD)和主控制器驅(qū)動(dòng)程序(HCD)三層,它們均運(yùn)行在系統(tǒng)的內(nèi)核模式。設(shè)備驅(qū)動(dòng)程序使用IRP(I/ORequest Packet)通過(guò)總線驅(qū)動(dòng)程序提供的軟件接口(USBDI,USB Driver Interface)向總線驅(qū)動(dòng)程序發(fā)出I/O請(qǐng)求,并根據(jù)數(shù)據(jù)傳輸方向提供一個(gè)或空或滿的內(nèi)存緩沖區(qū);USBD負(fù)責(zé)管理數(shù)據(jù)的總線傳輸,也有設(shè)備驅(qū)動(dòng)程序與其他軟件接口的功能單元進(jìn)行通信,沒(méi)有直接調(diào)用USBD,但總有一個(gè)更低層的驅(qū)動(dòng)軟件發(fā)生USBD調(diào)用。主控制器驅(qū)動(dòng)程序處在USB系統(tǒng)軟件的最底層,直接與主控制器的硬件通信,它提供了只有總線驅(qū)動(dòng)程序才能訪問(wèn)的主控制器驅(qū)動(dòng)程序軟件接口HCDI(Host Control Driver Interface)。其中,總線驅(qū)動(dòng)程序和主控制器驅(qū)動(dòng)程序是系統(tǒng)的底層驅(qū)動(dòng)程序。設(shè)備驅(qū)動(dòng)程序是針對(duì)某一USB設(shè)備的專用驅(qū)動(dòng)程序。

 

 

2 數(shù)據(jù)采集設(shè)備驅(qū)動(dòng)程序的開(kāi)發(fā)
    Windows為USB設(shè)備提供了底層驅(qū)動(dòng)程序,與底層驅(qū)動(dòng)程序接口的是I/O請(qǐng)求包(IRP),Windows為應(yīng)用程序提供的接口則是API函數(shù)。因此必須在它們之間建立一個(gè)驅(qū)動(dòng)程序,在底層驅(qū)動(dòng)與Win32應(yīng)用程序之間傳遞消息,即設(shè)備驅(qū)動(dòng)程序。VC++、VB等軟件開(kāi)發(fā)的應(yīng)用程序,在設(shè)備驅(qū)動(dòng)程序的支持下,都可以調(diào)用ReadFile()、WriteFile()、DeviceIoControl()等API函數(shù)向設(shè)備傳遞主機(jī)請(qǐng)求。Windows系統(tǒng)自動(dòng)將API調(diào)用轉(zhuǎn)化為IRP,設(shè)備驅(qū)動(dòng)程序把它向下層驅(qū)動(dòng)傳遞。直到完成其所指定的功能再沿驅(qū)動(dòng)程序棧返回主機(jī)。
    設(shè)備驅(qū)動(dòng)程序的開(kāi)發(fā)
    開(kāi)發(fā)設(shè)備驅(qū)動(dòng)程序一般采用以下幾種方法:1)直接使用Windows DDK,這種方法開(kāi)發(fā)難度較大,設(shè)計(jì)者必須對(duì)整個(gè)體系結(jié)構(gòu)有很好的理解和把握。2)使用Driver Studio,該工具軟件可為設(shè)計(jì)者提供驅(qū)動(dòng)程序的整體框架,設(shè)計(jì)者只需要專心于功能代碼設(shè)計(jì)。3)使用win Driver,這種方法開(kāi)發(fā)驅(qū)動(dòng)程序很容易,但工作效率不是很高。這里采用第二種方法。
    Driver Studio生成驅(qū)動(dòng)程序框架主要由兩個(gè)類組成,一個(gè)是Driver類,另一個(gè)是Device類Driver類。
    1)Driver類用于初始化驅(qū)動(dòng)程序,它包括:入口函數(shù)Driver Entry和Add Device函數(shù)。當(dāng)設(shè)備驅(qū)動(dòng)程序被加載時(shí),操作系統(tǒng)調(diào)用Driver Entry函數(shù);當(dāng)創(chuàng)建設(shè)備對(duì)象并把它連接到設(shè)備堆棧時(shí)調(diào)用Add Device函數(shù)。函數(shù)代碼如下:

 


    2)Device類是設(shè)備類KDvice的派生類,這個(gè)類包含了電源管理、設(shè)備讀寫(xiě)、設(shè)備控制等具有特定功能的例程。限于篇幅只介紹批量讀寫(xiě)端點(diǎn)函數(shù)。

    INF文件的編寫(xiě)
    INF文件是一個(gè)文本文件,它含有安裝一個(gè)設(shè)備驅(qū)動(dòng)程序需要的所有必需的安裝信息。包括要復(fù)制的文件列表,要?jiǎng)?chuàng)建的注冊(cè)表項(xiàng)等。用以告訴系統(tǒng)安裝哪一個(gè)驅(qū)動(dòng)程序,INF文件由若干區(qū)段組成,下面列出幾個(gè)區(qū)段及其功用:
    1)Version區(qū)段是INF文件的開(kāi)始,其Class和ClassGuid指出了驅(qū)動(dòng)程序所屬的設(shè)備類別及設(shè)備的GUID。GUID(Global Unique Identi-fier)用以標(biāo)識(shí)不同的驅(qū)動(dòng)程序,它是全局且唯一的,系統(tǒng)就是通過(guò)GUID把應(yīng)用程序的I/O請(qǐng)求傳達(dá)給相應(yīng)的驅(qū)動(dòng)程序的。
    2)Mantifacturer區(qū)段指明供應(yīng)商及其對(duì)應(yīng)Models字節(jié)的名稱。
    3)Install.AddReg/Install.Services指明注冊(cè)表添加內(nèi)容及安裝驅(qū)動(dòng)的詳細(xì)信息。
    該驅(qū)動(dòng)程序應(yīng)用于數(shù)據(jù)采集模塊采集電站的電壓信號(hào),部分采集數(shù)據(jù)如表1所示:


    測(cè)量誤差主要來(lái)源于模塊的A/D,與驅(qū)動(dòng)無(wú)關(guān)系,數(shù)據(jù)傳輸結(jié)果表明:數(shù)據(jù)可以在該驅(qū)動(dòng)下及時(shí)正確的傳輸,模塊工作正常。

3 結(jié)束語(yǔ)
    該設(shè)備驅(qū)動(dòng)程序用于電站檢測(cè)儀中USB數(shù)據(jù)采集模塊的效果良好,用這種方法提高了開(kāi)發(fā)效率,縮短了開(kāi)發(fā)周期,使開(kāi)發(fā)者可將主要精力集中于實(shí)現(xiàn)設(shè)備功能上,為非軟件專業(yè)開(kāi)發(fā)者開(kāi)發(fā)基于USB總線的檢測(cè)儀驅(qū)動(dòng)提供了很好的借鑒。也為USB總線在測(cè)控領(lǐng)域的應(yīng)用開(kāi)創(chuàng)了光明的前景。相信以計(jì)算機(jī)為數(shù)據(jù)處理核心,以USB總線為數(shù)據(jù)通信方法的測(cè)控儀器將成為測(cè)控業(yè)發(fā)展主流。

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。
主站蜘蛛池模板: 777奇米影视视频在线播放 | 日本不卡免费新一区二区三区 | 五月婷婷亚洲 | 美日韩在线视频 | 欧美第5页 | 国内精品久久久久久不卡影院 | 丁香六月婷婷激情 | 欧美日韩高清在线观看 | 四月婷婷七月婷婷综合 | 欧美洲精品亚洲精品中文字幕 | 中国毛片免费看 | 五月激情丁香 | 国产在线精品成人一区二区三区 | 国产日韩视频在线观看 | 日本一道高清不卡免费 | 国产在线播放你懂的 | 精品自拍视频在线观看 | 全网免费在线播放视频入口 | 五月婷六月丁香 | 欧美精品超清在线播放 | 九九99国产精品视频 | 五月天婷婷精品视频 | 欧美亚洲精品在线 | 国产精品久久久久久久久鸭 | 99精彩免费观看 | 久久精品日韩免费观看频道 | 国产图色 | 嫁给哑巴渔夫 在吃鸡排 | 欧美综合区自拍亚洲综合天堂 | 99香蕉国产精品偷在线观看 | 国产伦精品一区二区三区高清 | 2017av| 久久99热66这里只有精品一 | 韩日免费视频 | 四虎成人欧美精品在永久在线 | 深爱婷婷网 | 精品一区二区三区日产乱码 | 色戒无删减版在线 | 国产高清av在线播放 | 人妖一区 | 99热在线精品观看 |