基于ISP1581的USB數據采集系統(tǒng)的實現
2.2 驅動程序開發(fā)
Windows環(huán)境下驅動程序有3種模型:VxD模型、KMD模型、WDM模型。WDM模型是微軟力推的全新驅動程序模型,現在主流的操作系統(tǒng)都是采用基于WDM模型的驅動程序,因此本采集系統(tǒng)也采用WDM驅動程序模型來開發(fā)USB設備的驅動程序。
對于USB設備,其WDM驅動程序分為USB底層(總線)驅動程序和USB功能(設備)驅動程序。USB底層驅動程序由操作系統(tǒng)提供,負責與實際的硬件打交道,實現底層通信。USB功能驅動程序由設備開發(fā)者編寫,不對實際的硬件進行操作,而是通過向USB底層驅動程序發(fā)送包含請求塊URB(USB Request Block)的IRP,以實現對USB設備信息的發(fā)送和接收。
目前,WDM驅動程序開發(fā)工具有3種:Microsoft公司的DDK、Numega公司的DriverStudio和Jungo公司的WinDriver。其中,DDK的開發(fā)難度較大,開發(fā)者需要對整個體系結構和WDM規(guī)范有很好的理解和把握,還要熟悉上千個DDK函數的功能和使用場合,且測試流程繁瑣;DriverStudio的開發(fā)難度低一些,它將DDK函數按照邏輯功能進行組織,把很多常用功能封裝成類,建立了一個基于C++語言的面向對象的編程環(huán)境,開發(fā)者面對的不再是上千個復雜凌亂的DDK函數,而是邏輯清晰的類庫;WinDriver的開發(fā)幾乎沒有難度,開發(fā)者所編寫的只是定制和調用它提供的通用驅動,開發(fā)周期較短,特別適合于驅動程序初學者使用。
利用WinDriver開發(fā)設備驅動程序,有2種方法:(1)用Wizard自動生成驅動程序的框架代碼,根據實際要求修改代碼,加入定制的功能,再在用戶態(tài)執(zhí)行和調試代碼,并將性能要求苛刻的部分插入到核心態(tài),從而完成整個驅動程序的編寫。在使用這種方法時,WinDriver已經完成了驅動程序編寫的大部分工作,減少了工作量,使編寫驅動成為相對較簡單。但此方法生成的設備驅動程序,其通用性和可移植性較差;(2)完全用WinDriver提供的API函數來寫驅動程序。這樣要比修改由Wizard生成的框架代碼靈活得多,并且編寫的程序更簡短。但這要求開發(fā)者熟悉驅動程序的框架,能熟練運用WinDriver API函數。
為了縮短開發(fā)周期,在實際應用中選用了第1種方法生成驅動程序。具體步驟如下:
(1) 啟動Driver Wizard,檢測連接的USB設備,生成inf文件,這個inf文件和WinDriver包含的windrvr6.sys一起,就是新開發(fā)USB設備的驅動程序。
(2) 點擊Next按鈕,進入資源列表窗口,窗口中顯示了管道(Pipe)的一些基本信息。此窗口還可以用于對外設進行讀寫,測試硬件資源的正確性,窗口中的Log部分即為測試結果。
(3) 點擊Next按鈕,進入代碼生成窗口,在窗口中選擇生成C語言代碼。之后Driver Wizard將自動生成針對ISP1581的樣本程序和工程文件(包括代碼文件、說明文件以及適用于VC++編譯器的項目文件)。
(4)重新安裝這個USB設備的驅動程序,利用DriverWizard生成的文件,就可開發(fā)應用程序了。
經過反復測試發(fā)現,在現有硬件上批量傳輸的速度在60 Mb/s左右,可以滿足當前系統(tǒng)采樣頻率為500 kHz時的數據采集要求,即500K×4路×16=32 Mb/s。但與USB2.0規(guī)范的極限速度相比,現有的批量傳輸速度還不及其13%,分析其原因:
(1) USB2.0規(guī)范定義的最大速度為480 Mb/s,但它是包含令牌包在內的傳輸,因此,若扣除通信協(xié)議中的令牌,實際傳輸速度要遠低于480 Mb/s。
(2) 從訪問寄存器的時序參數可以看出,讀/寫周期最小為80 ns,即DSP對ISP1581讀寫的最高頻率是12.5 MHz,由于每次讀寫操作的數據為2 B,所以DSP與接口芯片之間數據傳輸的最高速率是25 MB/s,最后的實際值應該小于此值。
(3) 利用WinDriver開發(fā)驅動,事實上它只是定制和調用WinDriver提供的通用驅動而已,所以并非有針對性地對特定硬件編程,程序執(zhí)行效率上也不免大打折扣。
(4) 計算機與USB設備的通信中還包含對計算機硬盤的寫操作,使用測試軟件對所用機器硬盤進行寫測試,測得平均速度在22~25 MB/s之間,因此硬盤的寫速度也是影響USB數據傳輸速度的原因之一。
因此若想在現有硬件平臺上獲得更高的速度可以在以下幾個方面進行:采用端點的雙緩沖模式、采用ISP1581的DMA模式、采用效率更高的驅動開發(fā)方式及優(yōu)化固件程序以提高硬件的工作效率等。
參考文獻:
[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.
評論