資源描述:
《基于usb接口的數(shù)據(jù)采集系統(tǒng)的wdm驅(qū)動(dòng)程序設(shè)計(jì)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在學(xué)術(shù)論文-天天文庫(kù)。
1、基于USB接口的數(shù)據(jù)采集系統(tǒng)的WDM驅(qū)動(dòng)程序設(shè)計(jì) USB發(fā)展現(xiàn)狀與特點(diǎn) USB(UniversalSerialBus)通用串行總線。1995年11月由Compaq、Digital、IBM、Intel、微軟、NEC以及北方電訊(加拿大)等7家主要電腦、電子科技廠商共同開發(fā)了USB0.9標(biāo)準(zhǔn)。這是一種PC的外掛總線,諸家公司聯(lián)合提出這一新型總線,是為了解決PC機(jī)外圍設(shè)備的擁擠和提高設(shè)備的傳輸速度。但是,由于USB的復(fù)雜性,各公司不能及時(shí)提供必要的硬件和軟件支持,這種新型的PC總線直到Windows98推出以后,才得到迅猛發(fā)展。它的市場(chǎng)價(jià)
2、值才真正顯現(xiàn)出來(lái),人們才真正領(lǐng)略到它的方便與快捷。USB具有許多其他總線無(wú)法比擬的優(yōu)點(diǎn)。這里主要就USB1.1技術(shù)做一些研究和應(yīng)用?! DM驅(qū)動(dòng)模型 WDM即Win32驅(qū)動(dòng)程序模型,是微軟公司在VxDs之后推出的新驅(qū)動(dòng)模型,運(yùn)行平臺(tái)是Windows98/2000/XP操作系統(tǒng)。WDM中驅(qū)動(dòng)程序的識(shí)別是通過(guò)一個(gè)128位的GUID實(shí)現(xiàn)的。USB總線驅(qū)動(dòng)程序由操作系統(tǒng)WindowsXP提供,負(fù)責(zé)與實(shí)際USB總線通信。因此,USB驅(qū)動(dòng)程序的開發(fā)實(shí)際上是USB設(shè)備驅(qū)動(dòng)程序的設(shè)計(jì)?! DM驅(qū)動(dòng)程序有一個(gè)主要的初始化入口點(diǎn),即一個(gè)必須稱為Dri
3、verEntry的例程。它有一個(gè)標(biāo)準(zhǔn)的函數(shù)原型。當(dāng)WDM驅(qū)動(dòng)程序被裝入時(shí),內(nèi)核調(diào)用DriverEntry例程。系統(tǒng)提供的默認(rèn)驅(qū)動(dòng)程序的入口處為DriverEntry,負(fù)責(zé)驅(qū)動(dòng)程序的初始化,用以初始化驅(qū)動(dòng)程序范圍的數(shù)據(jù)結(jié)構(gòu)和資源?! ≡贏ddDevice例程中,驅(qū)動(dòng)程序創(chuàng)建一個(gè)設(shè)備對(duì)象作為目標(biāo)I/O設(shè)備,并將設(shè)備對(duì)象附著到設(shè)備堆棧中,設(shè)備堆棧為每一個(gè)相關(guān)設(shè)備驅(qū)動(dòng)程序包含一個(gè)設(shè)備對(duì)象。在設(shè)備被第一次枚舉時(shí),系統(tǒng)初始化時(shí)調(diào)用AddDevice例程。DriverObject參數(shù)指向一個(gè)驅(qū)動(dòng)程序?qū)ο?,就是在DriverEntry例程中初始化的驅(qū)動(dòng)
4、程序?qū)ο?。PDO參數(shù)對(duì)應(yīng)于設(shè)備堆棧底部的物理設(shè)備對(duì)象(PDO)。對(duì)于設(shè)備驅(qū)動(dòng)程序,其AddDevice函數(shù)的基本職責(zé)是創(chuàng)建一個(gè)設(shè)備對(duì)象并把它連接到以PDO為底的設(shè)備堆棧中,相關(guān)步驟如下:通過(guò)調(diào)用IoCreateDevice例程創(chuàng)建設(shè)備對(duì)象之后建立一個(gè)私有的設(shè)備擴(kuò)展對(duì)象;為了使應(yīng)用程序能識(shí)別設(shè)備,需要對(duì)USB一個(gè)或多個(gè)設(shè)備接口寄存,以便應(yīng)用程序能知道設(shè)備的存在。另外,給出設(shè)備名以便創(chuàng)建符號(hào)連接。初始化設(shè)備擴(kuò)展對(duì)象和設(shè)備對(duì)象中的Flag成員;通過(guò)IoAttachDeviceToDeviceStack函數(shù)把新設(shè)備對(duì)象放到堆棧上?! 〖床寮从茫?/p>
5、PnP)是計(jì)算機(jī)硬件和軟件支持的組合,包括硬件設(shè)備、系統(tǒng)軟件和驅(qū)動(dòng)程序的支持。其功能為:對(duì)已安裝的硬件進(jìn)行自動(dòng)動(dòng)態(tài)識(shí)別;硬件資源分配;加載驅(qū)動(dòng)程序;PnP使驅(qū)動(dòng)程序和用戶模式的代碼登記,并通知一定的硬件事件。 電源管理是在系統(tǒng)范圍內(nèi)用集成的方法來(lái)使用和保存電源,包括電源管理的軟硬件支持,提供以下功能:實(shí)現(xiàn)最小的啟動(dòng)和關(guān)機(jī)延遲。系統(tǒng)能在低電力狀態(tài)時(shí)休眠,在這種狀態(tài)下要恢復(fù)操作完全無(wú)須重新引導(dǎo)系統(tǒng)。從用戶的角度來(lái)看,可以簡(jiǎn)單的喚醒休眠中的計(jì)算機(jī);提高了電源效率和電池生命期。僅僅當(dāng)設(shè)備傳輸功能給用戶時(shí)電源才啟用于設(shè)備,如果一個(gè)設(shè)備未使用,按
6、照命令,電源可被斷開,而后再加電;使操作更加安靜?! ◎?qū)動(dòng)程序開發(fā) 采用DriverStudio開發(fā)USB驅(qū)動(dòng)程序,必須嚴(yán)格遵循安裝順序:首先安裝VisualC++6.0,然后安裝WinXPDDK,最后安裝DriverStudio。安裝之后,VisualC++編程工具欄中自動(dòng)添加了一個(gè)菜單DriverStudio。由于DriverWorks所用的類庫(kù)是在DDK庫(kù)函數(shù)基礎(chǔ)上生成的,所以必須在VisualC++中打開DriverWorks\source目錄下的VdwLibs.dsw,選擇BatchBuild菜單,通過(guò)RebuildAll來(lái)
7、創(chuàng)建自己的庫(kù)文件?! ≡谑褂肈riverWorks開發(fā)工具之前,首先要設(shè)置一下DDK的路徑,SetDDkGo用以創(chuàng)建編譯驅(qū)動(dòng)程序的環(huán)境,它執(zhí)行一系列的操作:運(yùn)行SETENVBAT;設(shè)置DriverWorks環(huán)境變量;設(shè)置開始程序的環(huán)境屬性。缺設(shè)置情況下,自動(dòng)調(diào)用C++編譯器編譯所生成的工程文件?! ?duì)于創(chuàng)建驅(qū)動(dòng)框架,則按照如下步驟:?jiǎn)?dòng)DriverWizard,填寫工程名和選擇路徑;由于WindowsXP系統(tǒng)下使用的是WDM驅(qū)動(dòng)模型,故選擇驅(qū)動(dòng)類型WDMDriver;本設(shè)計(jì)開發(fā)的是設(shè)備驅(qū)動(dòng),選擇WDMFunctionDriver;選擇W
8、DM的總線類型USB,USB設(shè)備使用的是Philips公司的PDIUSBD12芯片,產(chǎn)品的ID號(hào)ProductID為0666;選擇端點(diǎn)及參數(shù)設(shè)置。這里增加端點(diǎn)1的中斷輸入,最大傳輸字節(jié)為16;選擇所生成的驅(qū)