<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于ISP1581的USB數(shù)據(jù)采集系統(tǒng)的實(shí)現(xiàn)

          基于ISP1581的USB數(shù)據(jù)采集系統(tǒng)的實(shí)現(xiàn)

          作者: 時(shí)間:2013-09-11 來源:網(wǎng)絡(luò) 收藏

            2.2 驅(qū)動(dòng)程序開發(fā)

            Windows環(huán)境下驅(qū)動(dòng)程序有3種模型:VxD模型、KMD模型、WDM模型。WDM模型是微軟力推的全新驅(qū)動(dòng)程序模型,現(xiàn)在主流的操作系統(tǒng)都是采用基于WDM模型的驅(qū)動(dòng)程序,因此本采集系統(tǒng)也采用WDM驅(qū)動(dòng)程序模型來開發(fā)設(shè)備的驅(qū)動(dòng)程序。

            對(duì)于設(shè)備,其WDM驅(qū)動(dòng)程序分為底層(總線)驅(qū)動(dòng)程序和USB功能(設(shè)備)驅(qū)動(dòng)程序。USB底層驅(qū)動(dòng)程序由操作系統(tǒng)提供,負(fù)責(zé)與實(shí)際的硬件打交道,實(shí)現(xiàn)底層通信。USB功能驅(qū)動(dòng)程序由設(shè)備開發(fā)者編寫,不對(duì)實(shí)際的硬件進(jìn)行操作,而是通過向USB底層驅(qū)動(dòng)程序發(fā)送包含請(qǐng)求塊URB(USB Request Block)的IRP,以實(shí)現(xiàn)對(duì)USB設(shè)備信息的發(fā)送和接收。

            目前,WDM驅(qū)動(dòng)程序開發(fā)工具有3種:Microsoft公司的DDK、Numega公司的DriverStudio和Jungo公司的WinDriver。其中,DDK的開發(fā)難度較大,開發(fā)者需要對(duì)整個(gè)體系結(jié)構(gòu)和WDM規(guī)范有很好的理解和把握,還要熟悉上千個(gè)DDK函數(shù)的功能和使用場(chǎng)合,且測(cè)試流程繁瑣;DriverStudio的開發(fā)難度低一些,它將DDK函數(shù)按照邏輯功能進(jìn)行組織,把很多常用功能封裝成類,建立了一個(gè)基于C++語言的面向?qū)ο蟮木幊汰h(huán)境,開發(fā)者面對(duì)的不再是上千個(gè)復(fù)雜凌亂的DDK函數(shù),而是邏輯清晰的類庫;WinDriver的開發(fā)幾乎沒有難度,開發(fā)者所編寫的只是定制和調(diào)用它提供的通用驅(qū)動(dòng),開發(fā)周期較短,特別適合于驅(qū)動(dòng)程序初學(xué)者使用。

            利用WinDriver開發(fā)設(shè)備驅(qū)動(dòng)程序,有2種方法:(1)用Wizard自動(dòng)生成驅(qū)動(dòng)程序的框架代碼,根據(jù)實(shí)際要求修改代碼,加入定制的功能,再在用戶態(tài)執(zhí)行和調(diào)試代碼,并將性能要求苛刻的部分插入到核心態(tài),從而完成整個(gè)驅(qū)動(dòng)程序的編寫。在使用這種方法時(shí),WinDriver已經(jīng)完成了驅(qū)動(dòng)程序編寫的大部分工作,減少了工作量,使編寫驅(qū)動(dòng)成為相對(duì)較簡單。但此方法生成的設(shè)備驅(qū)動(dòng)程序,其通用性和可移植性較差;(2)完全用WinDriver提供的API函數(shù)來寫驅(qū)動(dòng)程序。這樣要比修改由Wizard生成的框架代碼靈活得多,并且編寫的程序更簡短。但這要求開發(fā)者熟悉驅(qū)動(dòng)程序的框架,能熟練運(yùn)用WinDriver API函數(shù)。

            為了縮短開發(fā)周期,在實(shí)際應(yīng)用中選用了第1種方法生成驅(qū)動(dòng)程序。具體步驟如下:

            (1) 啟動(dòng)Driver Wizard,檢測(cè)連接的USB設(shè)備,生成inf文件,這個(gè)inf文件和WinDriver包含的windrvr6.sys一起,就是新開發(fā)USB設(shè)備的驅(qū)動(dòng)程序。

            (2) 點(diǎn)擊Next按鈕,進(jìn)入資源列表窗口,窗口中顯示了管道(Pipe)的一些基本信息。此窗口還可以用于對(duì)外設(shè)進(jìn)行讀寫,測(cè)試硬件資源的正確性,窗口中的Log部分即為測(cè)試結(jié)果。

            (3) 點(diǎn)擊Next按鈕,進(jìn)入代碼生成窗口,在窗口中選擇生成C語言代碼。之后Driver Wizard將自動(dòng)生成針對(duì)的樣本程序和工程文件(包括代碼文件、說明文件以及適用于VC++編譯器的項(xiàng)目文件)。

            (4)重新安裝這個(gè)USB設(shè)備的驅(qū)動(dòng)程序,利用DriverWizard生成的文件,就可開發(fā)應(yīng)用程序了。

            經(jīng)過反復(fù)測(cè)試發(fā)現(xiàn),在現(xiàn)有硬件上批量傳輸?shù)乃俣仍?0 Mb/s左右,可以滿足當(dāng)前系統(tǒng)采樣頻率為500 kHz時(shí)的數(shù)據(jù)采集要求,即500K×4路×16=32 Mb/s。但與USB2.0規(guī)范的極限速度相比,現(xiàn)有的批量傳輸速度還不及其13%,分析其原因:

            (1) USB2.0規(guī)范定義的最大速度為480 Mb/s,但它是包含令牌包在內(nèi)的傳輸,因此,若扣除通信協(xié)議中的令牌,實(shí)際傳輸速度要遠(yuǎn)低于480 Mb/s。

            (2) 從訪問寄存器的時(shí)序參數(shù)可以看出,讀/寫周期最小為80 ns,即DSP對(duì)讀寫的最高頻率是12.5 MHz,由于每次讀寫操作的數(shù)據(jù)為2 B,所以DSP與接口芯片之間數(shù)據(jù)傳輸?shù)淖罡咚俾适?5 MB/s,最后的實(shí)際值應(yīng)該小于此值。

            (3) 利用WinDriver開發(fā)驅(qū)動(dòng),事實(shí)上它只是定制和調(diào)用WinDriver提供的通用驅(qū)動(dòng)而已,所以并非有針對(duì)性地對(duì)特定硬件編程,程序執(zhí)行效率上也不免大打折扣。

            (4) 計(jì)算機(jī)與USB設(shè)備的通信中還包含對(duì)計(jì)算機(jī)硬盤的寫操作,使用測(cè)試軟件對(duì)所用機(jī)器硬盤進(jìn)行寫測(cè)試,測(cè)得平均速度在22~25 MB/s之間,因此硬盤的寫速度也是影響USB數(shù)據(jù)傳輸速度的原因之一。

            因此若想在現(xiàn)有硬件平臺(tái)上獲得更高的速度可以在以下幾個(gè)方面進(jìn)行:采用端點(diǎn)的雙緩沖模式、采用的DMA模式、采用效率更高的驅(qū)動(dòng)開發(fā)方式及優(yōu)化固件程序以提高硬件的工作效率等。

          參考文獻(xiàn):

          [1].PCIdatasheethttp://www.dzsc.com/datasheet/PCI_1201469.html.
          [2].ISP1581datasheethttp://www.dzsc.com/datasheet/ISP1581_410269.html.
          [3].AD7655datasheethttp://www.dzsc.com/datasheet/AD7655_1131512.html.


          上一頁 1 2 3 下一頁

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();