首頁>技術(shù)中心>技術(shù)資訊>生物機能分析儀USB接口驅(qū)動程序的設(shè)計
生物機能分析儀USB接口驅(qū)動程序的設(shè)計
發(fā)布時間:2017-11-22
引言
USB(Universal Serial Bus)總線是INTEL、NEC、MICROSOFT、IBM等公司聯(lián)合提出的一種新的串行總線接口規(guī)范。USB總線使用簡單,支持即插即用,傳輸速度高,USB1.1協(xié)議支持12Mbps的傳輸速率,USB2.0傳輸協(xié)議支持480Mbps的傳輸速率。USB接口已經(jīng)成為標準的PC接口。
生物機能實驗分析儀分析功能復(fù)雜,必須借助于計算機來實現(xiàn),采用USB接口與計算機連接的生物機能實驗分析儀具有更高的性價比,而USB驅(qū)動程序的設(shè)計是USB接口設(shè)計中的一個難點,文中主要討論在Windows操作系統(tǒng)下基于WDM模式的USB設(shè)備驅(qū)動程序的設(shè)計方法。
2USB驅(qū)動程序的架構(gòu)
USB設(shè)備的驅(qū)動程序是WDM(Windwos DriverMode)驅(qū)動程序。WDM是微軟最新推出的一種驅(qū)動程序模型,旨在降低驅(qū)動程序的復(fù)雜性,簡化驅(qū)動程序的開發(fā)。WDM驅(qū)動程序采用分層驅(qū)動的方法,在用戶應(yīng)用程序和物理設(shè)備之間存在著幾個不同的驅(qū)動程序?qū)哟?。在WDM模型驅(qū)動程序中每個設(shè)備至少有兩個驅(qū)動程序,其中一個稱為功能驅(qū)動程序,也就是我們常說的設(shè)備驅(qū)動程序。它了解硬件工作的所有細節(jié),負責(zé)初始化I/O操作,為用戶提供一種設(shè)備適合的控制方式。

另一個驅(qū)動程序稱為總線驅(qū)動程序(USBD.SYS)。它負責(zé)管理硬件與計算機的連接,USB總線驅(qū)動程序由Windows操作系統(tǒng)提供。與傳統(tǒng)的PC總線(如PCI總線)設(shè)備的驅(qū)動程序相比,USB設(shè)備驅(qū)動從不直接與硬件對話,它僅靠創(chuàng)建URB(USB請求塊),并把URB提交到總線驅(qū)動程序就可完成硬件操作。圖1描述了USB驅(qū)動程序和USB總線驅(qū)動程序的層次關(guān)系。
和其他WDM驅(qū)動程序一樣,USB驅(qū)動程序主要包含5個例程:驅(qū)動程序入口例程、即插即用例程、分發(fā)例程、電源管理例程和卸載例程。驅(qū)動程序就是這些例程的集合。
3使用總線驅(qū)動程序
前提提到,USB驅(qū)動程序不直接和USB設(shè)備通信,而是通過總線驅(qū)動程序來和硬件對話??梢园裊SB總線驅(qū)動程序看作是接受URB的實體,向USBD的調(diào)用被轉(zhuǎn)化為帶有主功能代碼為IRP MJ INTERNALDEVICE CONTROL的IRP。然后USBD再調(diào)度總線時間,發(fā)出URB中指定的操作。
3.1URB的結(jié)構(gòu)
URB是一種聯(lián)合類型的數(shù)據(jù)結(jié)構(gòu),其包含了18種不同類型的結(jié)構(gòu)。URB HEADER是每個URB結(jié)構(gòu)的的開始,包含最基本的信息,如URB的長度、URB的功能等。在使用URB前,USB設(shè)備驅(qū)動程序必須設(shè)置好該結(jié)構(gòu)的Length字段和Function字段。URBHEADER結(jié)構(gòu)的Function字段指明URB的功能代碼,其定義了請求的具體操作。
設(shè)備驅(qū)動程序根據(jù)不同的USB事務(wù)(transaction)使用不同的子結(jié)構(gòu),并把合適的值填入URB的各個域中。創(chuàng)建完URB后,需要創(chuàng)建并發(fā)送一個內(nèi)部I/O控制(IOCTL)請求到USBD驅(qū)動程序,然后等待設(shè)備回應(yīng)。
3.2USB設(shè)備的配置
USB設(shè)備在能夠使用之前必須被正確配置,USB總線驅(qū)動程序自動檢測新插入的USB設(shè)備。然后它讀取設(shè)備內(nèi)的設(shè)備描述符以查明插入的是何種設(shè)備,具體安裝哪一個驅(qū)動程序。操作系統(tǒng)的配置管理器向驅(qū)動程序發(fā)送IRP MN START DEVICE請求。設(shè)備驅(qū)動程序在處理這個請求時,首先為設(shè)備選擇一個配置,接著應(yīng)該選擇配置中的一個或多個接口。選定了一個配置和一組接口后,驅(qū)動程序應(yīng)該向總線驅(qū)動程序發(fā)送配置選擇URB。最后,總線驅(qū)動程序向設(shè)備發(fā)出命令使能選定的配置和接口。
總線驅(qū)動程序負責(zé)創(chuàng)建管道和用于訪問管道的句柄,管道提供功能驅(qū)動程序與選定接口端點之間的通信,它同時還創(chuàng)建配置句柄和接口句柄。
3.3USB設(shè)備的數(shù)據(jù)傳輸
USB定義了四種傳輸方式:控制傳輸、塊傳輸、中斷傳輸、同步傳輸。不同類型的傳輸使用不同種類的URB,每個URB都包含以下幾個字段:Transfer-Flags、TransferBuffer、TransferBufferLength和TransferBufferMDL,這幾個字段指明了數(shù)據(jù)的傳輸方向和數(shù)據(jù)的存儲方式以及傳輸?shù)拈L度。本儀器主要采用了控制傳輸與塊傳輸方式。
客戶程序通過USB管道發(fā)送或接收數(shù)據(jù)時,它首先調(diào)用Win32 API,向設(shè)備驅(qū)動程序發(fā)出一個IRP。設(shè)備驅(qū)動程序把客戶的請求引導(dǎo)到有正確端點的管道上,它把請求提交到總線驅(qū)動程序,總線驅(qū)動程序再把請求分解成多個事務(wù),然后這些事務(wù)被送往總線,總線驅(qū)動程序必須安排好多個事務(wù)以使它們能被裝入同一幀中。
一般USB設(shè)備的設(shè)計需要兼容USB2.0和USB1.1協(xié)議。兩種速率下數(shù)據(jù)傳輸?shù)膮^(qū)別主要是每個事務(wù)中數(shù)據(jù)包的大小,對于Bulk傳輸,USB1.1下每個包最多64字節(jié),USB2.0下每個包可以有512字,該方案在設(shè)備驅(qū)動程序的設(shè)備擴展中定義了一個字段來保存主機支持的速率,然后針對不同的數(shù)字進行不同數(shù)據(jù)包的處理。
4結(jié)論
這里討論了USB驅(qū)動程序的結(jié)構(gòu),給出了對總線驅(qū)動程序調(diào)用的實現(xiàn)方法,按照方案設(shè)計的驅(qū)動程序能夠滿足快速傳輸?shù)哪康?設(shè)計已經(jīng)成功地應(yīng)用于生物機能分析儀。
摘自:中國計量測控網(wǎng)






