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