新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于USB總線和Aduc831單片機(jī)的數(shù)據(jù)采集系統(tǒng)的設(shè)計(jì)

基于USB總線和Aduc831單片機(jī)的數(shù)據(jù)采集系統(tǒng)的設(shè)計(jì)

作者: 時(shí)間:2012-03-27 來源:網(wǎng)絡(luò) 收藏

3.2 設(shè)備驅(qū)動(dòng)程序

設(shè)備驅(qū)動(dòng)程序WDM。WDM型驅(qū)動(dòng)程序是內(nèi)核程序,與標(biāo)準(zhǔn)的Win32用戶態(tài)程序不同。采用了分層處理的方法, 較高級的設(shè)備驅(qū)動(dòng)程序和較低級的USB函數(shù)層。其中USB函數(shù)層由兩部分組成:較高級的通用串行模塊(USBD)和較低級的主控制器驅(qū)動(dòng)程序模塊(HCD)。USB設(shè)備驅(qū)動(dòng)程序不必具體對硬件編程,所有的USB命令、讀寫操作通過驅(qū)動(dòng)程序轉(zhuǎn)給USB設(shè)備。但是,USB設(shè)備驅(qū)動(dòng)程序必須定義與外部設(shè)備的通訊接口和通訊的數(shù)據(jù)格式,也必須定義與應(yīng)用程序的接口。Windows 98/2000提供了一系列的驅(qū)動(dòng)程序,他們具有為許多標(biāo)準(zhǔn)類型設(shè)備服務(wù)所需的所有基本功能,用戶按照提示可以定義設(shè)備的配置和功能,然后做功能的修改即可??梢园裊SB設(shè)備驅(qū)動(dòng)程序的功能劃分成4個(gè)不同的模塊來實(shí)現(xiàn):初始化模塊、即插即用管理模塊、電源管理模塊以及I/O功能實(shí)現(xiàn)模塊。初始化模塊提供1個(gè)入口函數(shù)DriverEntry(),在DriverEntry中,需要提供一個(gè)AddDevice例程,把驅(qū)動(dòng)程序添加到驅(qū)動(dòng)程序堆棧中去。另外,所有對各種IRP(I/O請求包)的處理例程都在此入口函數(shù)中作為定義。
DriverEntry(IN PDRIVER_OBJECT DriverObject,…) //驅(qū)動(dòng)程序入口
{
DriverObject->DriverExtension->AddDevice=USBAddDevice;
DriverObject->DriverUnload=USBUnload;
DriverObject->MajorFunction[IRP_MJ_READ]=USBRead;
DriverObject->MajorFunction[IRP_MJ_WRITE]=USBWrite;
DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = USBDeviceControl;
RegisterForPnpNotification(DriverObject);
return status;
}

即插即用管理模塊用來實(shí)現(xiàn)USB設(shè)備的熱插拔及動(dòng)態(tài)配置。當(dāng)硬件檢測到有USB設(shè)備接入時(shí),Windows98查找響應(yīng)的驅(qū)動(dòng)程序,并調(diào)用它的 DriverEntry例程。PnP(即插即用)管理器調(diào)用驅(qū)動(dòng)程序的AddDevice例程,告訴它添加了一個(gè)設(shè)備。在此處理過程中,驅(qū)動(dòng)程序收到一個(gè)設(shè)備啟動(dòng)請求(IRP_MN_START_DEVICE)的IRP。同理,當(dāng)要拔除時(shí),PnP管理器會(huì)發(fā)出一個(gè)設(shè)備刪除請求(IRP_MN_REMOVE_DEVICE)的IRP,由驅(qū)動(dòng)程序進(jìn)行處理。通過對這些PnP請求的處理,可支持設(shè)備的熱插拔和即插即用功能。

電源管理模塊負(fù)責(zé)設(shè)備的掛起與喚醒。

I/O功能實(shí)現(xiàn)模塊完成I/O請求的大部分工作。若應(yīng)用程序想對設(shè)備進(jìn)行I/O操作,它便使用Windows API函數(shù),對WIN32子進(jìn)行WIN32調(diào)用。此調(diào)用由I/O服務(wù)接收并通知I/O管理器,I/O管理將此請求構(gòu)造成一個(gè)合適的I/O請求包(IRP)并把它傳遞給USB設(shè)備驅(qū)動(dòng)程序。USB設(shè)備驅(qū)動(dòng)程序接收到這個(gè)IRP以后,根據(jù)IRP中包含的具體操作代碼,構(gòu)造相應(yīng)的USB請求塊并把此 URB(USB請求塊)放到一個(gè)新的IRP中。然后,把此IRP傳遞到USB驅(qū)動(dòng)程序,USB總線驅(qū)動(dòng)程序根據(jù)IRP中所含的URB執(zhí)行相應(yīng)的操作(如從USB設(shè)備讀取數(shù)據(jù)等),并把操作結(jié)構(gòu)通過IRP返還給USB設(shè)備驅(qū)動(dòng)程序。USB設(shè)備驅(qū)動(dòng)程序接收到此IRP后,將操作結(jié)果通過IRP返還給 I/O管理器。最后,I/O管理器將此IRP中操作結(jié)果返還給應(yīng)用程序,至此應(yīng)用程序?qū)SB設(shè)備的一次I/O操作完成。

結(jié)束語:

USB為計(jì)算機(jī)外設(shè)輸入輸出提供了新的接口標(biāo)準(zhǔn)。它使設(shè)備具有熱插拔,即插即用,自動(dòng)配置的能力,并標(biāo)準(zhǔn)化設(shè)備連接, 還可與MAX485結(jié)合起來實(shí)現(xiàn)數(shù)據(jù)的遠(yuǎn)程采集。該系統(tǒng)具有可靠性高、性價(jià)比高和多點(diǎn)采集等優(yōu)點(diǎn)。而USB2.0標(biāo)準(zhǔn)具有更高的傳輸速率,更具有美好的應(yīng)用前景。

參考文獻(xiàn):
1. datasheet. Analog device.
2. USB1.1. Universal serial bus specification S.
3. 張念淮、江浩.《USB總線接口開發(fā)指南》 國防工業(yè)出版社.


上一頁 1 2 3 4 下一頁

評論


相關(guān)推薦

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

關(guān)閉