usb設(shè)備的從動(dòng)端分析與應(yīng)用設(shè)計(jì)—固件程序設(shè)計(jì)_第1頁
usb設(shè)備的從動(dòng)端分析與應(yīng)用設(shè)計(jì)—固件程序設(shè)計(jì)_第2頁
usb設(shè)備的從動(dòng)端分析與應(yīng)用設(shè)計(jì)—固件程序設(shè)計(jì)_第3頁
usb設(shè)備的從動(dòng)端分析與應(yīng)用設(shè)計(jì)—固件程序設(shè)計(jì)_第4頁
usb設(shè)備的從動(dòng)端分析與應(yīng)用設(shè)計(jì)—固件程序設(shè)計(jì)_第5頁
已閱讀5頁,還剩54頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、usb設(shè)備的從動(dòng)端分析與應(yīng)用設(shè)計(jì)固件程序設(shè)計(jì)usb設(shè)備的從動(dòng)端分析與應(yīng)用設(shè)計(jì)固件程序設(shè)計(jì)usb設(shè)備的從動(dòng)端分析與應(yīng)用設(shè)計(jì)固件程序設(shè)計(jì)畢業(yè)論文論文題目: USB設(shè)備的從動(dòng)端分析與應(yīng)用設(shè)計(jì) 固件程序設(shè)計(jì) 學(xué) 院: 計(jì)算機(jī)科學(xué)技術(shù)學(xué)院 摘 要 USB(Universal Serial Bus通用串行總線)是計(jì)算機(jī)領(lǐng)域中一種全新的工業(yè)標(biāo)準(zhǔn),其技術(shù)和產(chǎn)品正在迅猛的發(fā)展中。因此,研究USB總線的體系架構(gòu)和開發(fā)技術(shù)很有必要。本文在實(shí)驗(yàn)室現(xiàn)有硬件和軟件基礎(chǔ)上,研究了USB的接口規(guī)范和軟硬件開發(fā)方法,并應(yīng)用于實(shí)際,設(shè)計(jì)出了用USB實(shí)現(xiàn)的溫度采集系統(tǒng)。 本文圍繞設(shè)計(jì)目標(biāo),在簡要敘述USB1.1總線協(xié)議的基礎(chǔ)上,主

2、要論述了兩個(gè)方面的內(nèi)容:固件程序的開發(fā)和DS1620的使用方法。設(shè)備以AT89S52單片機(jī)作為控制器,Philips公司的PDIUSBD12作USB收發(fā)器,用DALLAS公司的DS1620進(jìn)行溫度采集,采用中斷數(shù)據(jù)傳輸方式實(shí)現(xiàn)數(shù)據(jù)傳輸。關(guān) 鍵 詞USB;WDM; PDIUSBD12;溫度采集; DS1620 ABSTRACTUSB(Universal Serial Bus) is a completely new industry standard in the field of computer. Its technology and product are tremendously dev

3、eloping. Therefore, It is necessary to research the frame and developing technology of USB. Based on the hardware and software that our laboratory is having, this paper researches the interface standard and software-hardware developing methods of USB, apply it into the actual environment, and design

4、ed the temperature collection system.Centering on the designing object, outlining the USB 1.1 protocol, this paper mainly expound two aspects of content: the developing of firmware program and employment of DS1620. Using AT89S52 as control appliance, PDIUSBD12 of Philips Corp. as USB receiving-trans

5、mitting appliance, the device collect temperature with DS1620 of DALLAS Corp., and adopt interrupt data transmitting to realize data transition. Key wordsUSB;WDM; PDIUSBD12;temperature collection; DS1620目 錄摘 要iABSTRACTii前 言1一、 本文研究的主要內(nèi)容1二、 USB發(fā)展情況1三、 USB的設(shè)計(jì)目標(biāo)2四、 USB的性能特點(diǎn)2四、 USB系統(tǒng)組成3(一) USB的互連3(二) US

6、B設(shè)備4(三) USB主機(jī)5第一章 USB數(shù)據(jù)傳輸協(xié)議6一、 USB電氣特征及電平信號(hào)6二、 USB數(shù)據(jù)流模型7(一) USB主機(jī)/設(shè)備分層模型7(二) 端點(diǎn)8(三) 管道9(三) 傳輸類型9三、 USB協(xié)議層11(一) 字段格式11(二) 包格式14(三) 事務(wù)格式15第二章 USB驅(qū)動(dòng)程序概述17一、 WDM驅(qū)動(dòng)程序模型簡介17二、 USB主機(jī)驅(qū)動(dòng)程序體系結(jié)構(gòu)19(一) 主機(jī)控制器驅(qū)動(dòng)程序(HCD)19(二) USB總線驅(qū)動(dòng)程序(USBD)20第三章 USB設(shè)備簡介22一、 硬件結(jié)構(gòu)22(一) 帶USB接口的單片機(jī)23二、 PDIUSBD12通用USB收發(fā)器24(一) PDIUSBD12的

7、性能特點(diǎn)24(二) PDIUSBD12的功能框圖24(三) D12引腳配置及說明26三、 D12 USB固件編程概要26(一) 各端點(diǎn)在固件中的使用26(二) USB設(shè)備枚舉的數(shù)據(jù)傳輸過程28第四章 DS1620數(shù)字式溫度傳感器30一、 特性30二、 DS1620的3線通信模式30第五章 固件程序設(shè)計(jì)32一、 設(shè)計(jì)思路32二、 固件編程的實(shí)現(xiàn)概括和流程圖34(一) 硬件提取層EPPHAL.C35(二)PDIUSBD12命令接口D12CI.C35(三) 中斷服務(wù)程序ISR.C35(四) 協(xié)議層CHAP_9.C,PROTODMA.C39(五) 標(biāo)準(zhǔn)設(shè)備請(qǐng)求處理CHAP_9.C39(六) 廠商請(qǐng)求處

8、理PROTODMA.C41(七) 主循環(huán)MAINLOOP.C42結(jié) 論43致 謝44參考文獻(xiàn)45前 言一、 本文研究的主要內(nèi)容 USB總線在各個(gè)領(lǐng)域中迅速得到應(yīng)用,以取代老式的RS-232以及EPP并口等總線,研究USB總線有重要的實(shí)用價(jià)值。 然而,接口的簡單意味著協(xié)議的復(fù)雜,怎樣在現(xiàn)有的實(shí)驗(yàn)條件下快速的使用USB總線開發(fā)應(yīng)用設(shè)備便成了我們的研究目標(biāo)。 在仔細(xì)分析了現(xiàn)有設(shè)備和源代碼的基礎(chǔ)上,我們設(shè)計(jì)實(shí)現(xiàn)了一個(gè)采用USB總線實(shí)現(xiàn)的溫度采集設(shè)備, 在下位機(jī)我們使用了DS1620數(shù)字式溫度傳感器,并在上位機(jī)設(shè)計(jì)了客戶服務(wù)程序,DS1620定時(shí)對(duì)室溫進(jìn)行采集,可以實(shí)時(shí)監(jiān)視室內(nèi)溫度。關(guān)鍵的一點(diǎn)是,其接口

9、使用了USB進(jìn)行實(shí)現(xiàn),可以適應(yīng)未來機(jī)器多使用USB總線的需求。 由于本系統(tǒng)對(duì)數(shù)據(jù)傳輸?shù)乃俣葲]有太過苛刻的要求,因此我們使用了USB總線的控制傳輸方式。二、 USB發(fā)展情況 USB全稱為Universal Serial Bus(通用串行總線),是1994年底由IBM、Intel、Compaq、DEC、Microsoft、NEC和Northern Telecom共同開發(fā)的PC外設(shè)接口標(biāo)準(zhǔn),由于其具有使用方便及成本低廉等優(yōu)點(diǎn),迅速得到業(yè)界的強(qiáng)力支持,目前己經(jīng)成為主流的總線標(biāo)準(zhǔn),2001年USB設(shè)備出貨量已超過3億臺(tái)。 USB廣泛應(yīng)用于傳統(tǒng)PC外設(shè),如鼠標(biāo)、鍵盤、顯示器等,移動(dòng)存儲(chǔ)設(shè)備如移動(dòng)硬盤、閃存

10、盤等,以及新興的消費(fèi)類電子,如MP3播放器、數(shù)碼相機(jī)、移動(dòng)電話等。同時(shí)其應(yīng)用范圍也在不斷擴(kuò)大,工業(yè)自動(dòng)化儀器儀表正在成為USB應(yīng)用的熱點(diǎn)之一。 USB最初推出的是1.X版本,其總線傳輸速度較低,為12Mbps,1998年推出了USB2.0,將數(shù)據(jù)傳輸速度提高到了480Mbps,在保持了USBI .1的優(yōu)點(diǎn)的基礎(chǔ)上,保證了向下兼容性,可以完全支持各種USB 1.x的產(chǎn)品。USB2.O滿足了高端應(yīng)用對(duì)總線帶寬的需求,從2002年下半年起,采用USB2.O的設(shè)備開始大規(guī)模出現(xiàn),預(yù)計(jì)2004年USB2.O整體出貨量將超過3億臺(tái),超過USB1.1的出貨量。 隨著USB設(shè)備的迅速增加,設(shè)備與設(shè)備之間的直接

11、數(shù)據(jù)傳輸變得越來越迫切,USB OTG(ON THE GO)技術(shù)應(yīng)運(yùn)而生了,它于2001年12月底制定,賦予了設(shè)備雙重身份,即既可以作為主機(jī),又可以作為設(shè)備,其實(shí)質(zhì)是在設(shè)備中增加了一個(gè)嵌入式計(jì)算機(jī)來執(zhí)行主機(jī)任務(wù)。這一技術(shù)使USB設(shè)備擺脫了對(duì)PC的依賴,大大擴(kuò)展了USB的應(yīng)用范圍,并結(jié)合USB2.0高速傳輸技術(shù),嚴(yán)重威脅到IEEE1394的市場。三、 USB的設(shè)計(jì)目標(biāo) USB的設(shè)計(jì)有三大目標(biāo): (1)計(jì)算機(jī)與電話之間的連接:對(duì)聲音音頻和壓縮視頻等實(shí)時(shí)數(shù)據(jù)給予充分支持,可以廣泛地連接計(jì)算機(jī)和電話,這一應(yīng)用目標(biāo)到目前為完全實(shí)現(xiàn)。 (2)易用性:強(qiáng)調(diào)即插即用、總線供電等特性,以方便用戶使用。 (3)端

12、口擴(kuò)充:提供快速、雙向、統(tǒng)一且價(jià)格低廉的串行接口,可以滿足PC機(jī)發(fā)展的現(xiàn)在和未來的需要。 從中我們可以看出,USB標(biāo)準(zhǔn)的制定從市場出發(fā),立足于滿足用戶的實(shí)際應(yīng)用需求,盡管它的性能指標(biāo)并不突出,但正是這一點(diǎn)使得它獲得了極大的成功。四、 USB的性能特點(diǎn)(1) 終端用戶的易用性: ·為連接電纜和連接頭提供了單一模型; ·電氣特性與用戶無關(guān); ·自我檢測外設(shè),自動(dòng)地進(jìn)行設(shè)備驅(qū)動(dòng)設(shè)置; ·可動(dòng)態(tài)連接,動(dòng)態(tài)重置外設(shè)。 (2) 廣泛的應(yīng)用性: ·適應(yīng)不同設(shè)備,提供低速傳輸(1.5Mbps)和全速傳輸(12Mbps ); ·支持對(duì)多個(gè)設(shè)備的同時(shí)操作

13、; ·可同時(shí)操作127個(gè)物理設(shè)備; ·在主機(jī)和設(shè)備之間可以傳輸多個(gè)數(shù)據(jù)和信息流; ·支持多功能的設(shè)備; ·利用低層協(xié)議,提高了總線利用率。 (3) 同步傳輸帶寬: ·確定的帶寬和低延遲適合電話系統(tǒng)和音頻的應(yīng)用; ·同步工作可以利用整個(gè)總線帶寬。 (4) 靈活性: ·可以選擇一系列大小的數(shù)據(jù)包,允許對(duì)設(shè)備緩沖器大小進(jìn)行選擇; ·通過指定數(shù)據(jù)緩沖區(qū)大小和執(zhí)行時(shí)間,支持各種數(shù)據(jù)傳輸率; ·通過協(xié)議對(duì)數(shù)據(jù)流進(jìn)行緩沖處理。 (5) 健壯性: ·出錯(cuò)處理/差錯(cuò)恢復(fù)機(jī)制在協(xié)議中使用; ·對(duì)用戶的感覺

14、而言,熱插拔是完全實(shí)時(shí)的; ·可以對(duì)有缺陷設(shè)備進(jìn)行認(rèn)定。 (6) 與PC產(chǎn)業(yè)的一致性: ·協(xié)議的易實(shí)現(xiàn)性和完整性; ·與PC機(jī)的即插即用的體系結(jié)構(gòu)的一致; ·對(duì)現(xiàn)存操作系統(tǒng)接口的良好銜接。 (7) 成本低廉 ·以低廉的價(jià)格提供1.5兆比特率的子通道設(shè)施; ·將外設(shè)和主機(jī)硬件進(jìn)行了最優(yōu)化的集成; ·促進(jìn)了低價(jià)格的外設(shè)的發(fā)展; ·廉價(jià)的電纜和連接頭; ·運(yùn)用了商業(yè)技術(shù)。四、 USB系統(tǒng)組成一個(gè)USB系統(tǒng)被定義為三個(gè)部分:USB的互連、USB設(shè)備和USB主機(jī)。(一) USB的互連 USB的互連是指USB設(shè)備與主

15、機(jī)之間進(jìn)行連接和通信的操作,主要包括以下幾方面: · 總線的拓?fù)浣Y(jié)構(gòu):指明了USB設(shè)備與主機(jī)之間的連接方式; · 數(shù)據(jù)流模式:描述了數(shù)據(jù)在系統(tǒng)中通過USB從產(chǎn)生到使用方的流動(dòng)方式; · USB的調(diào)度:USB提供多個(gè)設(shè)備共享的連接,對(duì)USB設(shè)備必須進(jìn)行調(diào)度以分配帶寬。圖1(a) USB物理連接邏輯設(shè)備 主機(jī)邏輯設(shè)備 邏輯設(shè)備邏輯設(shè)備 邏輯設(shè)備圖1(b) USB邏輯連接USB物理互連方式如圖1(a) 所示,是一種星形級(jí)連結(jié)構(gòu)。集線器(Hub)位于每級(jí)星形的中心。這種集線器級(jí)連的方式使得外設(shè)的擴(kuò)展很容易(USB協(xié)議規(guī)定最多允許5級(jí)集線器進(jìn)行級(jí)連;USB邏輯互連方式如圖1

16、(b)所示,各個(gè)設(shè)備好象是與主機(jī)直接相連的,它們之間的通信不用關(guān)心物理連接方式。 數(shù)據(jù)流模式對(duì)于USB設(shè)備的實(shí)現(xiàn)是最關(guān)鍵的,我們將在下一章對(duì)其單獨(dú)進(jìn)行描述。USB的調(diào)度是針對(duì)多個(gè)設(shè)備互連的,不屬于功能設(shè)備開發(fā)者需要關(guān)心的內(nèi)容,在此不作描述。(二) USB設(shè)備 USB設(shè)備包括USB集線器和功能設(shè)備(Function)兩大類。它們都必須有標(biāo)準(zhǔn)的USB接口,符合USB協(xié)議,支持標(biāo)準(zhǔn)的USB操作(如配置,復(fù)位等)。它們的描述信息也必須具有USB協(xié)議定義的標(biāo)準(zhǔn)格式。集線器為USB總線提供擴(kuò)展和連接;功能設(shè)備是具有一定特殊應(yīng)用功能的設(shè)備,它能發(fā)送數(shù)據(jù)到主機(jī),也可以接收來自主機(jī)的數(shù)據(jù)和控制信息。(三) US

17、B主機(jī)USB主機(jī)是USB系統(tǒng)的核心。在一個(gè)USB系統(tǒng)中只有一臺(tái)主機(jī)。主機(jī)的USB接口稱為USB控制器,通過它主機(jī)和外圍USB設(shè)備進(jìn)行通信。在主機(jī)中還集成了一個(gè)根集線器(Root Hub)用于直接與外設(shè)相連或與一般USB Hub級(jí)連。主機(jī)所具有的功能包括:檢測USB設(shè)備的插入和拔出;管理主機(jī)與設(shè)備之間的數(shù)據(jù)流,對(duì)設(shè)備進(jìn)行必要的控制;收集各種狀態(tài)信息;對(duì)插入的設(shè)備供電。第一章 USB數(shù)據(jù)傳輸協(xié)議一、 USB電氣特征及電平信號(hào) USB采用四線電纜,由電源線(Vbus )、地線(GND)和兩根數(shù)據(jù)線(D和D)組成,如圖1-1所示。數(shù)據(jù)線傳輸差模信號(hào),以降低噪聲干擾??梢钥闯?,任何時(shí)刻USB總線上最多只

18、能有一位數(shù)據(jù)在傳輸,所以USB是一種完全按照時(shí)序進(jìn)行控制和數(shù)據(jù)傳輸?shù)目偩€。圖1-1 USB電纜結(jié)構(gòu)USB具有差分NRZI(不歸零倒置)代碼格式。在這種NRZI波形中,d (n-1)位和d (n)位之間如果有狀態(tài)變化(稱為過渡),就被解碼為一個(gè)二進(jìn)制b(n) =0的數(shù)據(jù)位,沒有過渡就被解碼為一個(gè)二進(jìn)制b (n) =1的數(shù)據(jù)位,如圖1-2所示。圖12 NRZI數(shù)據(jù)編碼 為了確保信號(hào)發(fā)送的準(zhǔn)確性,當(dāng)在USB上發(fā)送一個(gè)包時(shí),傳輸設(shè)備就要進(jìn)行位插入操作。所謂位插入操作是指在數(shù)據(jù)被編碼前,在數(shù)據(jù)流中每六個(gè)連續(xù)的 1后插入一個(gè)0,從而強(qiáng)迫NRZI碼發(fā)生變化,位插入操作由傳輸端強(qiáng)制執(zhí)行,任何數(shù)據(jù)都將被執(zhí)行位插

19、入操作,如圖1-3所示。接收端必須能對(duì)NRZI數(shù)據(jù)進(jìn)行解碼,識(shí)別插入位并去掉它們。 圖13 位插入數(shù)據(jù)編碼序列 原始數(shù)據(jù) 位插入數(shù)據(jù) 同步塊 數(shù)據(jù)包NRZI編碼后的數(shù)據(jù)位插入 在全速傳輸中,數(shù)據(jù)K態(tài)表示差分1,數(shù)據(jù)J態(tài)表示差分O,而在低速傳輸中則正好相反。二、 USB數(shù)據(jù)流模型 本數(shù)據(jù)流模型完全引自參考文獻(xiàn),以下不再標(biāo)注。(一) USB主機(jī)/設(shè)備分層模型 數(shù)據(jù)流發(fā)生在主機(jī)和USB設(shè)備之間,我們以常用的分層模型介紹USB系統(tǒng)的數(shù)據(jù)流,如圖14所示。它能使不同層次的實(shí)現(xiàn)者只關(guān)心USB相關(guān)層次的特定功能細(xì)節(jié),而不必掌握從硬件結(jié)構(gòu)到軟件系統(tǒng)的所有細(xì)節(jié),因此,不同層次的實(shí)現(xiàn)者其開發(fā)工作量將會(huì)有極大的不同

20、。 主機(jī)分客戶軟件層,USB系統(tǒng)軟件層和USB主機(jī)控制器。設(shè)備分USB總線接口層,USB設(shè)備層和功能層。USB系統(tǒng)軟件是指在某一操作系統(tǒng)上支持USB的軟件,它獨(dú)立于USB設(shè)備和客戶軟件;USB主機(jī)控制器是主機(jī)方的USB接口,它是軟硬件的總和。從圖14上我們可以看出,USB總線接口層提供主機(jī)和設(shè)備之間物理的連接,而從邏輯上看,USB設(shè)備層與USB系統(tǒng)軟件層對(duì)應(yīng),它們完成USB設(shè)備一些基本的、共有的工作;功能層和客戶軟件層通信,它們實(shí)現(xiàn)單個(gè)USB設(shè)備特有的功能。在編程時(shí),客戶軟件通過USB系統(tǒng)軟件提供的編程接口操作對(duì)應(yīng)的設(shè)備,而不是直接通過操作內(nèi)存或I/O口來實(shí)現(xiàn),這一點(diǎn)是USB和PCI總線的顯著

21、差異。所有USB設(shè)備只有在被主機(jī)承認(rèn)并配置后才可進(jìn)入系統(tǒng)工作,它們實(shí)現(xiàn)的功能不同,但對(duì)主機(jī)都提供一個(gè)同樣的接口。 在系統(tǒng)軟件層和USB設(shè)備層之間有一條缺省管道,主機(jī)與設(shè)備的端點(diǎn)O通信,用于實(shí)現(xiàn)一些USB設(shè)備的基本控制功能。在客戶軟件層和功能層有多組通信管道,它們實(shí)現(xiàn)USB設(shè)備的特定通信功能。我們所述的這些通信都是從邏輯上分析的,實(shí)際的信號(hào)的物理流程如圖14所示,以信號(hào)從主機(jī)流向設(shè)備為例:客戶軟件經(jīng)USBD傳輸給系統(tǒng)軟件的數(shù)據(jù)是不具有USB通信格式的數(shù)據(jù)。系統(tǒng)軟件對(duì)這些數(shù)據(jù)分幀,實(shí)現(xiàn)帶寬分配策略,然后交給USB主機(jī)控制器。主機(jī)控制器對(duì)數(shù)據(jù)按USB格式打包,實(shí)現(xiàn)傳輸事務(wù),再經(jīng)串行接口引擎(SIE)

22、后將數(shù)據(jù)最終轉(zhuǎn)化為符合USB電氣特征的差分碼從USB電纜發(fā)往設(shè)備。數(shù)據(jù)到達(dá)設(shè)備后是一個(gè)逆過程,在設(shè)備層中將數(shù)據(jù)解碼,發(fā)往不同端點(diǎn)的數(shù)據(jù)包被分開并正確排列,幀結(jié)構(gòu)被拆除,數(shù)據(jù)成為非USB格式的,最后數(shù)據(jù)送往各端點(diǎn),完成通訊。在主機(jī)方我們還發(fā)現(xiàn)有HCD和USBD兩個(gè)接口層。HCD的全稱為主機(jī)控制驅(qū)動(dòng)(Host Control Driver),它是對(duì)主機(jī)控制器硬件的一個(gè)抽象,提供和USB系統(tǒng)軟件之間的軟件接口。不同種PC的主機(jī)控制器硬件實(shí)現(xiàn)并不一樣,但有了HCD,USB系統(tǒng)軟件就可以不必理會(huì)各種HCD具有何種資源,數(shù)據(jù)如何打包等問題。尤其是HCD隱藏了怎樣實(shí)現(xiàn)根集線器的細(xì)節(jié),這有利于USBD的簡化。

23、(二) 端點(diǎn)端點(diǎn)在硬件上就是一個(gè)有一定深度的先入先出堆棧(FIFO)。主機(jī)和設(shè)備的通信最終作用于設(shè)備上的各個(gè)端點(diǎn)。每一個(gè)USB設(shè)備都有一組互相獨(dú)立的端點(diǎn)。每一個(gè)設(shè)備都有一個(gè)由主機(jī)分配的唯一的地址,而各個(gè)設(shè)備上的端點(diǎn)都有由設(shè)備確定的端點(diǎn)號(hào)(Endpoint Number)和通信方向。每個(gè)端點(diǎn)只支持單向通信:它要么是輸入(Input)端點(diǎn),數(shù)據(jù)流方向從設(shè)備到主機(jī);要么是輸出(Output)端點(diǎn),數(shù)據(jù)流方向從主機(jī)到設(shè)備。設(shè)備地址、端點(diǎn)號(hào)和通信方向三者結(jié)合起來就唯一確定了一個(gè)端點(diǎn)。在設(shè)備配置時(shí),它必須報(bào)告主機(jī)它的各個(gè)端點(diǎn)的特性,包括端點(diǎn)號(hào),通信方向,端點(diǎn)支持的最大包大小,帶寬要求以及支持的通信方式等。

24、其中端點(diǎn)支持的最大包大小稱為數(shù)據(jù)有效負(fù)載,是個(gè)重要的概念。端點(diǎn)O比較特殊,它實(shí)際是由輸入和輸出兩個(gè)端點(diǎn)組成。每個(gè)設(shè)備都必須有端點(diǎn)0,主機(jī)和它建立缺省控制管道,用于設(shè)備枚舉和實(shí)現(xiàn)對(duì)設(shè)備的一些基本的控制功能。除了端點(diǎn)0,其余的端點(diǎn)在設(shè)備配置之前是不能和主機(jī)通信的。只有設(shè)備在它的配置描述符中向主機(jī)報(bào)告了這些端點(diǎn)及其特性,并由主機(jī)確認(rèn)后,這些端點(diǎn)才被激活。(三) 管道 管道(Pipe)是設(shè)備上端點(diǎn)和主機(jī)上的客戶軟件的連接。因此,每條管道和端點(diǎn)的特性有直接關(guān)系,它只能支持一種通信方式。客戶軟件通常通過向主機(jī)的操作系統(tǒng)發(fā)I/O請(qǐng)求包(IRP)來要求和某一條管道進(jìn)行數(shù)據(jù)傳輸,而后它進(jìn)行等待,直到系統(tǒng)通知它傳

25、輸成功或失敗。USB協(xié)議規(guī)定了流管道(Stream Pipe)和消息管道(Message Pipe)兩種管道,其中消息管道有定義的結(jié)構(gòu)。缺省控制管道屬于消息管道。1 流管道流管道中的數(shù)據(jù)是流的形式,也就是該數(shù)據(jù)的內(nèi)容不具有USB要求的結(jié)構(gòu)。數(shù)據(jù)從流管道一端流進(jìn)的順序與它們從流管道另一端流出時(shí)的順序是一樣的,流管道中的信息流總是單方向的,或者流進(jìn),或者流出。流管道支持同步傳輸,中斷傳輸和批傳輸,這些在稍后將作進(jìn)一步解釋。2 消息管道 消息管道與端點(diǎn)的關(guān)系同流管道不同,它的數(shù)據(jù)格式由USB協(xié)議規(guī)定。首先,主機(jī)向USB設(shè)備發(fā)出一個(gè)請(qǐng)求;接著,就是數(shù)據(jù)的傳輸;最后,是一個(gè)狀態(tài)階段。為了能夠容納請(qǐng)求/數(shù)

26、據(jù)/狀態(tài)的變化,消息管道要求數(shù)據(jù)有一個(gè)格式(該格式將在第三節(jié)中詳細(xì)介紹),此格式保證了命令能夠被可靠地傳輸和確認(rèn)。消息管道需要雙方向的信息流,所以有兩個(gè)相同號(hào)碼的端點(diǎn),一個(gè)用于輸入,一個(gè)用于輸出。兩個(gè)號(hào)碼必須相同。缺省控制管道就是一個(gè)消息管道。消息管道僅支持控制傳輸。(三) 傳輸類型 USB定義了4種傳輸類型:控制傳輸、批傳輸、等時(shí)傳輸和中斷傳輸。由于我們的應(yīng)用只涉及控制傳輸,故只對(duì)這種傳輸類型作進(jìn)一步的描述。 控制傳輸用于支持在客戶軟件和它的應(yīng)用之間傳輸設(shè)置信息、命令信息、狀態(tài)信息等。它由以下三個(gè)事務(wù)組成: ·建立事務(wù):建立聯(lián)系,把請(qǐng)求信息從主機(jī)傳到它的應(yīng)用設(shè)備; ·零個(gè)

27、或多個(gè)數(shù)據(jù)傳輸事務(wù):按照上一事務(wù)中指明的方向傳輸數(shù)據(jù);·狀態(tài)事務(wù):將傳輸狀態(tài)信息從應(yīng)用設(shè)備傳回到主機(jī)。圖14 USB主機(jī)/設(shè)備數(shù)據(jù)流通信模型 USB設(shè)備必須實(shí)現(xiàn)缺省控制管道,并將它設(shè)置成一個(gè)消息管道。這個(gè)管道由USB系統(tǒng)軟件使用。USB設(shè)備的確認(rèn)信息、狀態(tài)信息以及控制信息由該管道傳輸。 USB設(shè)備框架定義了標(biāo)準(zhǔn)的,設(shè)備級(jí)的或由銷售商提供的請(qǐng)求,這些請(qǐng)求可操作設(shè)備的狀態(tài)。USB設(shè)備框架又定義了一些描述符(Descriptor),用于存放USB設(shè)備的各種信息??刂茩C(jī)制提供訪問設(shè)備描述器和請(qǐng)求操作設(shè)備的機(jī)制,所以使用控制傳輸?shù)臄?shù)據(jù)必須具有USB定義的數(shù)據(jù)格式。 應(yīng)用層和相應(yīng)的客戶軟件不能為

28、控制傳輸指定總線訪問頻率和帶寬。這由USB系統(tǒng)軟件從全局優(yōu)化角度加以決定。但不管有沒有控制傳輸發(fā)生,系統(tǒng)軟件至少需要將10%的帶寬留給控制傳輸。 控制傳輸使用的是消息管道上的雙向信息流。所以,一旦一個(gè)控制管道被建立之后,這個(gè)管道就使用具有某個(gè)端點(diǎn)號(hào)的兩個(gè)端點(diǎn),一個(gè)輸入,一個(gè)輸出??刂苽鬏?shù)臄?shù)據(jù)格式將在第三節(jié)中作詳細(xì)描述。 USB規(guī)定了控制傳輸所能接收或發(fā)送的最大數(shù)據(jù)凈負(fù)荷區(qū)長度。高速設(shè)備定義的最大數(shù)據(jù)凈負(fù)荷區(qū)長度為8、16、32或64字節(jié),控制傳輸端點(diǎn)必須支持規(guī)定的最大長度中的一個(gè),設(shè)備在自己的設(shè)置信息中報(bào)告該端點(diǎn)允許的最大凈負(fù)荷區(qū)長度;低速設(shè)備的數(shù)據(jù)凈負(fù)荷區(qū)的長度只能是8字節(jié)。這個(gè)規(guī)定是針對(duì)

29、這些數(shù)據(jù)包中的數(shù)據(jù)凈負(fù)荷區(qū)的,不包括包中的協(xié)議要求的額外信息。 當(dāng)端點(diǎn)做了以下兩件事時(shí),控制傳輸?shù)臄?shù)據(jù)階段可被認(rèn)為結(jié)束: ·已傳了由建立階段指定的數(shù)據(jù)量。 ·傳了一個(gè)數(shù)據(jù)包,它的長度為O或它的數(shù)據(jù)區(qū)長度小于最大長度。三、 USB協(xié)議層USB協(xié)議層描述了USB主機(jī)與USB設(shè)備交互時(shí)的語法和協(xié)議,從中定義了字段、包、事務(wù)和傳輸?shù)慕Y(jié)構(gòu),以及由字段到包、由包到事務(wù)、由事務(wù)到傳輸所組成的組織層次關(guān)系。本節(jié)中我們將從底向上展示USB的數(shù)據(jù)結(jié)構(gòu)。(一) 字段格式 數(shù)據(jù)位被發(fā)送到總線的時(shí)候,首先是最低有效位(LSB),跟著是下一個(gè)最低有效位,最后是最高有效位(MSB)。在本文以下描述中,數(shù)

30、據(jù)均以下列形式給出:包中單個(gè)的位和字段從左到右的順序就是它們通過總線的順序。1 . 同步字段任何包都是從同步(SYNC)字段開始的,同步字段是產(chǎn)生最大的過渡密度的編碼序列。同步字段作為空閑狀態(tài)出現(xiàn)在總線上,后面跟著以NRZI編碼的二進(jìn)制串“KJKJKJKK”。通過被定義為8位長的二進(jìn)制串,輸入電路以本地時(shí)鐘對(duì)齊輸入數(shù)據(jù)。同步字段里的最后兩位是同步字段結(jié)束的記號(hào),并且標(biāo)志了包標(biāo)識(shí)符(PID)的開始。2 包標(biāo)識(shí)符字段 所有包的同步字段后都緊跟著包標(biāo)識(shí)符(PID)。如圖15所示,包標(biāo)識(shí)符由4位的包類型字段和其后的4位的校驗(yàn)字段構(gòu)成。包標(biāo)識(shí)符指出了包的類型。包標(biāo)識(shí)符的4位的校驗(yàn)字段可以保證包標(biāo)識(shí)符譯碼

31、的可靠性,這樣包的余項(xiàng)也就能被正確地解釋。包標(biāo)識(shí)符的校驗(yàn)字段是通過對(duì)包類型字段的二進(jìn)制的求反碼產(chǎn)生的,如果4個(gè)PID檢驗(yàn)位不是它們的各自的包標(biāo)識(shí)符位的補(bǔ),則說明存在PID錯(cuò)。 圖15 包標(biāo)識(shí)符格式包標(biāo)識(shí)符被分為4個(gè)編碼組:標(biāo)記,數(shù)據(jù),握手和專用。如表11所示,包標(biāo)識(shí)符傳輸?shù)那?位(PID<O:1>)指出了其屬于哪個(gè)組。設(shè)備通過對(duì)包標(biāo)識(shí)符譯碼來確定包的類型。3 地址字段 設(shè)備端口使用2個(gè)字段;設(shè)備地址字段和端口字段。設(shè)備對(duì)地址和端口字段都需要進(jìn)行譯碼。任何一個(gè)字段不匹配,此標(biāo)記都必須被忽略。另外,對(duì)未初始化的端口的訪問將使得標(biāo)記被忽略。設(shè)備地址(ADDR)字段通過其地址指定設(shè)備,如圖

32、16所示,ADDR<6:O>指定了總共128個(gè)地址。由定義可知,每個(gè)ADDR值都定義了單一的設(shè)備。設(shè)備在剛一復(fù)位(Reset)和加電(Powerup)的時(shí)候,其地址默認(rèn)值為零,并且必須由主機(jī)在枚舉過程(Enumeration Process)中編程。設(shè)備地址零被用作為缺省地址,不可被分配作任何別的用途。如圖17所示,在設(shè)備擁有多個(gè)端口的時(shí)候通過附加的4位端口(ENDP)字段對(duì)端口進(jìn)行尋址。除了端口地址0之外,端口個(gè)數(shù)是由設(shè)備決定的。所有的設(shè)備都必須在端口O提供一個(gè)控制管道(缺省控制管道)。對(duì)于低速設(shè)備,每個(gè)設(shè)備最多提供3個(gè)管道:在端口0的控制管道加上2個(gè)附加管道(或是2個(gè)控制管道,

33、或是1個(gè)控制管道和1個(gè)中斷端口,或是2個(gè)中斷端口)。全速設(shè)備可以支持最多可達(dá)16個(gè)的任何類型的端口。圖16 地址字段圖17 端口字段表1-1 PID 類型PID 類型PID 名PID3:0描述標(biāo)記Token輸出(OUT)輸入(IN)幀開始(SOF)建立(SETUP)0001B1001B0101B1101B在主機(jī)到功能部件的事務(wù)中有地址+端口號(hào)在功能部件到主機(jī)的事務(wù)中有地址+端口號(hào)幀開始標(biāo)記和幀號(hào)在主機(jī)到功能部件建立一個(gè)控制管道的事務(wù)中有地址+端口號(hào)數(shù)據(jù)DATA數(shù)據(jù)0(DATA0)數(shù)據(jù)1(DATA1)0011B1011B偶數(shù)據(jù)包PID奇數(shù)據(jù)包PID握手Handshake確認(rèn)(ACK)不確認(rèn)(NA

34、K)停止(STALL)0010B1010B1110B接收器收到無措數(shù)據(jù)包;接收設(shè)備部不能接收數(shù)據(jù),或發(fā)送設(shè)備不能發(fā)送數(shù)據(jù);端口掛起,或一個(gè)控制管道請(qǐng)求不被支持。專用Special前同步(PRE)1100B主機(jī)發(fā)送的前同步字。打開到低速設(shè)備的下行總線通信。4 幀號(hào)字段幀號(hào)字段是一個(gè)11位的字段,主機(jī)每過一幀就將其內(nèi)容加一。幀號(hào)字段達(dá)到其最大值7FFH時(shí)歸零,且它僅每個(gè)幀最初時(shí)刻在SOF標(biāo)記中被發(fā)送,可以用來統(tǒng)計(jì)數(shù)據(jù)傳輸情況。 5 數(shù)據(jù)字段 包含數(shù)據(jù)字段的數(shù)據(jù)包大小隨著傳輸類型而變化,但所包含的數(shù)據(jù)必須是整數(shù)個(gè)字節(jié)。圖18為多字節(jié)顯示格式。每個(gè)字節(jié)的范圍內(nèi)的數(shù)據(jù)位移出時(shí)都是最低位(LSB)在前。圖

35、18 數(shù)據(jù)字段格式6 循環(huán)冗余校驗(yàn)循環(huán)冗余校驗(yàn)(CRC)被用來在標(biāo)記和數(shù)據(jù)包中保護(hù)所有的非PID字段。(二) 包格式1 標(biāo)記包 圖19顯示了標(biāo)記包的字段格式。標(biāo)記由PID,ADDR和ENDP構(gòu)成,其中PID指定了包是輸入,輸出還是建立類型,輸入PID定義了從設(shè)備到主機(jī)的數(shù)據(jù)事務(wù),輸出和建立PID定義了從主機(jī)到設(shè)備的數(shù)據(jù)事務(wù);對(duì)于輸出和建立事務(wù),地址和端口字段唯一地確定了接下來將收到數(shù)據(jù)包的端口,對(duì)于輸入事務(wù)的,這些字段唯一地確定了哪個(gè)端口應(yīng)該傳輸數(shù)據(jù)包。只有主機(jī)能發(fā)出標(biāo)記包。圖19 標(biāo)記包格式 如圖19所示,標(biāo)記包包括了覆蓋地址和端口字段的5位CRC。CRC并不覆蓋PID,因?yàn)樗凶约旱男r?yàn)字

36、段。標(biāo)記和幀開始(SOF)包是由3個(gè)字節(jié)的包字段數(shù)據(jù)后面的包結(jié)束(EOP,End of Packet)界定的。如果包被譯碼為合法標(biāo)記或SOF,但卻沒有在3個(gè)字節(jié)之后以EOP終止,則它被認(rèn)為是無效的,并被接收器忽略。 2 幀開始(SOF)包主機(jī)以每毫秒一次的額定速率發(fā)出幀開始(SOF)包。如圖110中所示,SOF包是由指示包類型的PID和其后的11位的幀號(hào)字段構(gòu)成。圖110 幀開始包 3 數(shù)據(jù)包 如圖111所示,數(shù)據(jù)包由PID,包括至少O個(gè)字節(jié)數(shù)據(jù)的數(shù)據(jù)區(qū)和CRC構(gòu)成。有兩種類型的數(shù)據(jù)包,根據(jù)不同的PID:DATA0和DATA1來識(shí)別。兩種數(shù)據(jù)包PID是為了支持?jǐn)?shù)據(jù)切換同步而定義的。數(shù)據(jù)必須以整

37、數(shù)的字節(jié)數(shù)發(fā)出。數(shù)據(jù)CRC僅通過對(duì)包中的數(shù)據(jù)字段計(jì)算而得到,而不包括PID,它有自己的校驗(yàn)字段。圖111 數(shù)據(jù)包格式4 握手包 如圖112所示,握手包僅由PID構(gòu)成,用來報(bào)告數(shù)據(jù)事務(wù)的狀態(tài),以及在數(shù)據(jù)事務(wù)中表示數(shù)據(jù)成功接收,命令的接收或拒絕,流控制和停止條件。只有支持流控制的事務(wù)類型才能返回握手信號(hào)。握手總是在事務(wù)的握手階段中被返回,也可在數(shù)據(jù)階段代替數(shù)據(jù)被返回。握手包由1個(gè)字節(jié)的包字段后的EOP確定界限。圖112 握手包(三) 事務(wù)格式 事務(wù)格式根據(jù)端口類型而變化。有4種端口類型:批處理(Bulk)、控制(Control)、中斷(Interrupt)和同步(Isochronous)。本文僅描

38、述應(yīng)用所涉及到的控制端口類型。 一個(gè)典型的控制傳輸需要3種不同的事務(wù):建立、數(shù)據(jù)和狀態(tài)事務(wù)。圖115顯示了三種不同的控制傳輸事務(wù)序列,控制讀和寫相似,由建立、數(shù)據(jù)和狀態(tài)事務(wù)組成。在某些情況下,也可以有無數(shù)據(jù)事務(wù)階段的控制傳輸,它僅由建立和狀態(tài)階段構(gòu)成。圖115 控制傳輸事務(wù)序列 建立事務(wù)用于向功能部件的控制端口傳輸信息。圖116說明了建立事務(wù)的格式。建立包總是在建立事務(wù)的數(shù)據(jù)階段上使用DATA0 PID。收到建立包的設(shè)備必須接收建立數(shù)據(jù)并用ACK應(yīng)答,如果數(shù)據(jù)被損壞,則丟棄數(shù)據(jù)且不返回握手。 控制傳輸?shù)臄?shù)據(jù)事務(wù)發(fā)生在建立事務(wù)階段之后,由一個(gè)以上的輸入或輸出事務(wù)構(gòu)成。所有的數(shù)據(jù)事務(wù)階段里的事務(wù)都

39、必須有相同的方向(即全部輸入或者全部輸出)。在數(shù)據(jù)階段中要發(fā)送的數(shù)據(jù)的數(shù)量和其方向在建立事務(wù)里被指定。如果數(shù)據(jù)的數(shù)量超過了先前確定的數(shù)據(jù)包大小,數(shù)據(jù)在支持最大的包大小的多個(gè)事務(wù)中被發(fā)送(輸入或者輸出)。任何剩下的數(shù)據(jù)都作為剩余在最后的事務(wù)中被發(fā)送。狀態(tài)事務(wù)是控制傳輸?shù)淖詈笠粋€(gè)事務(wù)階段,報(bào)告整個(gè)控制傳輸?shù)慕Y(jié)果是成功還是失敗。如果成功,則狀態(tài)事務(wù)中返回零長度數(shù)據(jù)包(即只有PID和CRC校驗(yàn)位);如果失敗,則對(duì)于控制寫,設(shè)備在數(shù)據(jù)包階段就返回NAK或者STALL,此時(shí)主機(jī)不再返回交換包;對(duì)于控制讀,主機(jī)依然發(fā)送一個(gè)零長度數(shù)據(jù)包,設(shè)備返回NAK或者STALL。狀態(tài)事務(wù)的方向是以相對(duì)前面的事務(wù)階段的數(shù)據(jù)

40、流方向來確定的,并且總是使用DATA1 PID。圖116 建立事務(wù)結(jié)構(gòu)第二章 USB驅(qū)動(dòng)程序概述本章首先簡要介紹了USB驅(qū)動(dòng)程序的Win32程序模型(WDM),然后介紹了USB主機(jī)體系結(jié)構(gòu),最后詳細(xì)介紹了本設(shè)計(jì)的驅(qū)動(dòng)程序及應(yīng)用程序的編寫。一、 WDM驅(qū)動(dòng)程序模型簡介 隨著Windows98和Windows20OO成為主流操作系統(tǒng),windows驅(qū)動(dòng)程序模型(WDM)取代了原先的VxD技術(shù),成為設(shè)備驅(qū)動(dòng)程序的主流模式。WDM提供靈活的方式,簡化了驅(qū)動(dòng)程序的開發(fā),并能夠?qū)SB、IEEE 1394、PCI等新硬件標(biāo)準(zhǔn)提供充分支持,并增強(qiáng)了驅(qū)動(dòng)程序的可靠性和可維護(hù)性。 WDM有兩種運(yùn)行模式,即內(nèi)核(

41、Kernel)模式和用戶(User)模式。在內(nèi)核模式下,程序的運(yùn)行不受操作系統(tǒng)的任何限制,對(duì)I/O設(shè)備有完全的訪問權(quán),能夠訪問任何虛地址和控制虛擬內(nèi)存硬件;在用戶模式下,操作系統(tǒng)提供某種機(jī)制,可以限制程序的各種I/O操作,硬件也可以防止特權(quán)指令的執(zhí)行,并進(jìn)行內(nèi)存和I/O空間檢查(關(guān)于這兩種模式的運(yùn)行過程涉及到操作系統(tǒng)核心和微處理器構(gòu)架,是一個(gè)大得多的話題,在此不作討論)。 WDM驅(qū)動(dòng)程序模型分兩個(gè)方面,除了核心模式描述設(shè)備驅(qū)動(dòng)程序的標(biāo)準(zhǔn)結(jié)構(gòu)外,WDM還為常見類型的設(shè)備實(shí)現(xiàn)了一個(gè)模塊化的、分層次類型的總線驅(qū)動(dòng)程序和類驅(qū)動(dòng)程序??偩€驅(qū)動(dòng)程序?qū)崿F(xiàn)了支持USB、IEEE1394協(xié)議等。類驅(qū)動(dòng)程序是為實(shí)

42、現(xiàn)標(biāo)準(zhǔn)Windows功能提供條件。WDM對(duì)標(biāo)準(zhǔn)類接口的支持減少了Windows 98和Windows NT所需的設(shè)備驅(qū)動(dòng)程序的數(shù)量和復(fù)雜性。 以往在Windows98和Windows NT兩個(gè)平臺(tái)上分別運(yùn)行時(shí)需要為同一個(gè)設(shè)備編寫兩個(gè)截然不同的驅(qū)動(dòng)程序,但WDM是跨平臺(tái)的,因而只需要編寫一個(gè)WDM驅(qū)動(dòng)程序就可以了。 WDM驅(qū)動(dòng)程序是分層的,即不同層上的驅(qū)動(dòng)程序有著不同的優(yōu)先級(jí),這使得I/0請(qǐng)求進(jìn)程更加明了,而Windows 9x下的VxD則沒有此結(jié)構(gòu)(如圖2l所示)。 WDM引入了功能設(shè)備對(duì)象FDO(Functional Device Object)與物理設(shè)備對(duì)象PDO(Physical Dev

43、ice Object)兩個(gè)新類來描述硬件,一個(gè)PDO對(duì)應(yīng)一個(gè)實(shí)際硬件。一個(gè)硬件只允許有一個(gè)PDO,卻可以擁有多個(gè)FDO,在驅(qū)動(dòng)程序中直接操作的不是硬件而是相應(yīng)的PDO與FDO。在用戶態(tài)和內(nèi)核態(tài)通信方面,系統(tǒng)為每一個(gè)用戶請(qǐng)求打包形成一個(gè)IRP結(jié)構(gòu),將其發(fā)送至驅(qū)動(dòng)程序,并通過識(shí)別IRP中的PDO來區(qū)別是發(fā)送給哪一個(gè)設(shè)備的。另外,在驅(qū)動(dòng)程序的加載方面,WDM不通過驅(qū)動(dòng)程序名稱識(shí)別,而是通過一個(gè)128位的全局唯一標(biāo)識(shí)符GUID來實(shí)現(xiàn)驅(qū)動(dòng)程序的識(shí)別。FIDOFDOFIDOPDO上層過濾器驅(qū)動(dòng)程序功能驅(qū)動(dòng)程序下層過濾器驅(qū)動(dòng)程序總線驅(qū)動(dòng)程序IRP圖21 WDM中設(shè)備對(duì)象和驅(qū)動(dòng)程序的層次結(jié)構(gòu) 在WDM驅(qū)動(dòng)程序

44、的工作方式和其他模式的驅(qū)動(dòng)程序模型有很多差別。在WDM驅(qū)動(dòng)程序中,即插即用(PnP)管理器告知何時(shí)向操作系統(tǒng)添加或刪除一個(gè)設(shè)備。它使用操作系統(tǒng)安裝的INF文件查找新設(shè)備的正確驅(qū)動(dòng)程序,并按照驅(qū)動(dòng)程序的要求創(chuàng)建設(shè)備對(duì)象堆棧,而其它模式驅(qū)動(dòng)程序必須發(fā)現(xiàn)它自己的設(shè)備,使用專門的安裝程序安裝;另外在細(xì)節(jié)上也存在很多區(qū)別,其它模式驅(qū)動(dòng)程序參數(shù)一般由注冊表提供,在DriverEntry里調(diào)用讀注冊表的函數(shù),然后根據(jù)注冊表再調(diào)用CreateDevice創(chuàng)建設(shè)備,但是WDM一般不是這樣,在加載的時(shí)候PnP管理器調(diào)用AddDevice入口點(diǎn)創(chuàng)建設(shè)備,一般在DriverEntry里創(chuàng)建的是一個(gè)與設(shè)備或者對(duì)象毫無關(guān)

45、系的虛擬設(shè)備,用于管理與Win32的通訊;另外整個(gè)設(shè)備驅(qū)動(dòng)樹也發(fā)生了改變,從而使安裝程序發(fā)生了很大的改變。WDM本身的PnP管理器被抽象地提升到了ROOT的地位,負(fù)責(zé)所有的總線驅(qū)動(dòng)程序的加載。總線驅(qū)動(dòng)程序則負(fù)責(zé)遍歷所有位于總線上的設(shè)備,并且為每個(gè)設(shè)備創(chuàng)建相應(yīng)的設(shè)備對(duì)象。 一個(gè)完整的驅(qū)動(dòng)程序要完成以下工作:初始化、創(chuàng)建與刪除設(shè)備、處理應(yīng)用層程序的打開和關(guān)閉句柄的請(qǐng)求、處理應(yīng)用層程序的輸入/輸出請(qǐng)求、串行化對(duì)設(shè)備的訪問、訪問硬件、調(diào)用其他驅(qū)動(dòng)程序、取消I/O請(qǐng)求、超時(shí)I/O請(qǐng)求、處理可熱插拔設(shè)備的加入和刪除事件、電源管理和WMI。二、 USB主機(jī)驅(qū)動(dòng)程序體系結(jié)構(gòu) 作為一種符合WDM的驅(qū)動(dòng)程序,US

46、B總線驅(qū)動(dòng)程序軟件堆棧內(nèi)的層間通信也使用IRP(l/O請(qǐng)求包)的機(jī)制。但實(shí)際的USB驅(qū)動(dòng)程序使用URB(USB請(qǐng)求塊)結(jié)構(gòu)向其硬件設(shè)備發(fā)送請(qǐng)求。USB驅(qū)動(dòng)程序高度依賴其總線驅(qū)動(dòng)程序(USBD.SYS),而不直接使用硬件抽象層(HAL)函數(shù)與硬件通信,這是USB驅(qū)動(dòng)程序的顯著特點(diǎn),它提高了系統(tǒng)的可靠性和可維護(hù)性。 USB總線主機(jī)通過主機(jī)控制器與USB設(shè)備進(jìn)行交互。Windows對(duì)構(gòu)成一個(gè)USB總線主機(jī)的不同軟件部分進(jìn)行了明確的劃分,如圖22所示,其中USB客戶軟件包含了不同總線設(shè)備的設(shè)各驅(qū)動(dòng)程序,它通過Windows提供的USB總線接口與根集線器驅(qū)動(dòng)程序進(jìn)行通信,而根集線器驅(qū)動(dòng)程序則要通過通用串

47、行總線驅(qū)動(dòng)程序接口(USBDI)來實(shí)現(xiàn)與通用串行總線驅(qū)動(dòng)程序(USBD)的通信(客戶也可以通過USBDI直接同USBD交互)。然后,USBD會(huì)選擇兩種主控制器驅(qū)動(dòng)(HCD)方式之一來同其下方的主控制器通信。最后,主控制器會(huì)直接實(shí)現(xiàn)對(duì)USB物理層總線的訪問。HCD與USBD提供了基于不同抽象層次的USB軟件接口,它們協(xié)同工作,共同完成USB總線系統(tǒng)能夠的功能。HCD提供抽象的主機(jī)控制器,對(duì)主機(jī)控制器所見到的USB總線系統(tǒng)的數(shù)據(jù)傳輸進(jìn)行了抽象:USBD提供抽象的設(shè)備,對(duì)USB客戶軟件和總線外部設(shè)備之間的數(shù)據(jù)傳輸進(jìn)行了抽象。USB總線系統(tǒng)模型簡化了USBD客戶和與USB總線設(shè)備之間的數(shù)據(jù)傳輸過程,并

48、且該模型可以看作是面向USB總線接口對(duì)USB總線設(shè)備進(jìn)行控制的入口。它們均由操作系統(tǒng)提供并維護(hù),對(duì)于客戶軟件是不透明的。(一) 主機(jī)控制器驅(qū)動(dòng)程序(HCD) HCD提供軟件界面HCDI(HCD Interface)對(duì)主機(jī)控制器實(shí)現(xiàn)必要的抽象,以隱藏主機(jī)控制器硬件的實(shí)現(xiàn)細(xì)節(jié),為上層的USB驅(qū)動(dòng)程序提供統(tǒng)一的接口。HCD是USB總線的最底層,USBD將客戶的請(qǐng)求映射到相關(guān)的HCD,由HCD轉(zhuǎn)交給主機(jī)控制器硬件執(zhí)行。主機(jī)控制器提供一條高速的數(shù)據(jù)存取物理總線,它負(fù)責(zé)所有USB物理層的總線操作,主要有:狀態(tài)控制、串行化和反串行化、幀產(chǎn)生、差錯(cuò)控制和數(shù)據(jù)傳輸?shù)?。圖22 USB驅(qū)動(dòng)程序體系結(jié)構(gòu) 如圖22所示

49、,UHCD和OpenHCI是為不同的USB總線設(shè)備供應(yīng)商提出的用于管理系統(tǒng)中的USB總線主控制器的兩種接口,Windows提供了對(duì)這兩種接口的支持,設(shè)備供應(yīng)商可以根據(jù)情況選擇實(shí)現(xiàn)其中的一種,Windows在USB總線和主機(jī)控制器之間放置了一個(gè)PCI總線枚舉器,它負(fù)責(zé)在檢測到系統(tǒng)中存在一個(gè)通用串行總線時(shí),裝載適當(dāng)?shù)腢SB總線系統(tǒng)軟件。(二) USB總線驅(qū)動(dòng)程序(USBD) 正如我們前面介紹的,USBD是USB系統(tǒng)軟件中最關(guān)鍵的一層,它負(fù)責(zé)控制全部USB協(xié)議的操作和中斷處理控制。主要功能有:設(shè)備設(shè)置、資源管理、數(shù)據(jù)傳輸(管道層次)以及公共數(shù)據(jù)定義等。 USBD為客戶軟件(設(shè)備驅(qū)動(dòng)程序)提供了訪問設(shè)

50、備的一組接口,客戶軟件只能通過它來訪問USB總線,對(duì)客戶軟件而言,它就是USB總線的底層。USBD的具體實(shí)現(xiàn)基于不同的操作系統(tǒng)會(huì)有所不同,圖23給出了USBD的總體框架。 USBD的客戶直接對(duì)設(shè)備發(fā)出命令或從管道直接輸入輸出數(shù)據(jù)流,USBD為客戶提供兩種機(jī)制:命令機(jī)制和管道機(jī)制。命令機(jī)制允許客戶設(shè)置和控制USBD的操作以及USB總線設(shè)備,并提供對(duì)設(shè)備標(biāo)準(zhǔn)管道的所有訪問。管道機(jī)制則允許USBD客戶管理特定設(shè)備的數(shù)據(jù)和控制數(shù)據(jù)的傳輸。1 USBD管道機(jī)制 管道是設(shè)備和主機(jī)之間的邏輯連接,一個(gè)管道屬于且只屬于一個(gè)客戶,在USBD中,管道有兩種:標(biāo)準(zhǔn)管道和客戶管道。標(biāo)準(zhǔn)管道用于完成一些客戶通過命令接口

51、所傳遞的請(qǐng)求,如設(shè)置設(shè)備的地址等,但USBD不允許客戶直接訪問設(shè)備的標(biāo)準(zhǔn)管道??蛻艄艿绖t由客戶進(jìn)行管理,并提供相應(yīng)的數(shù)據(jù)緩沖區(qū)??梢钥闯?,管道機(jī)制比命令機(jī)制所提供的數(shù)據(jù)傳輸服務(wù)更直接,因而數(shù)據(jù)傳輸效率更高。 2 USBD命令機(jī)制USBD命令機(jī)制允許客戶以讀寫的方式對(duì)設(shè)備的數(shù)據(jù)及其控制部分進(jìn)行訪問,客戶所要做的,僅僅是向USBD提供設(shè)備的地址及相關(guān)的數(shù)據(jù)緩沖區(qū)的指針。命令機(jī)制所提供的功能主要是USB總線管理相關(guān)的內(nèi)容,如設(shè)備設(shè)置管理、設(shè)備數(shù)據(jù)訪問、總線設(shè)備管理以及電流分配等。第三章 USB設(shè)備簡介 本章是整個(gè)USB設(shè)備開發(fā)中的核心部分,簡要介紹了設(shè)備開發(fā)所使用的PDIUSBD12接口芯片,對(duì)本設(shè)

52、計(jì)的硬件實(shí)現(xiàn)和設(shè)備固件編寫作了詳細(xì)介紹。一、 硬件結(jié)構(gòu)USB設(shè)備硬件設(shè)計(jì)的核心是USB控制器,在進(jìn)行一個(gè)具體的USB設(shè)備開發(fā)之前,首先要根據(jù)具體使用要求選擇合適的USB控制器,設(shè)備的設(shè)計(jì)將圍繞該控制器展開。目前,市場上供應(yīng)的USB控制器主要分為兩類:專用USB控制器和通用USB控制器。通用USB控制器實(shí)現(xiàn)基本的USB協(xié)議,并且為用戶預(yù)留多個(gè)多功能端點(diǎn),可以滿足不同的應(yīng)用要求,因此,我們選擇了后一種。通用USB控制器按照結(jié)構(gòu)又細(xì)分為帶USB接口的單片機(jī)(MCU)和通用USB收發(fā)器兩種。 服務(wù) 通道接口 命令接口信息和流通道配置管理設(shè)備數(shù)據(jù)訪問總線設(shè)備管理能量控制主機(jī)控制器驅(qū)動(dòng)主機(jī)控制器驅(qū)動(dòng)主機(jī)控

53、制器主機(jī)控制器圖23 USBD結(jié)構(gòu) (一) 帶USB接口的單片機(jī)主要有INTEL的8X930系列,CYPRESS公司的EZUSB,以及MOTOROLA公司的MC68HC908JB8系列等。這種方案的最大優(yōu)點(diǎn)在于開發(fā)難度較小,因?yàn)榇蠖鄶?shù)這樣的單片機(jī)都是基于8051結(jié)構(gòu)或者其他常見的結(jié)構(gòu),同時(shí)均有完備的開發(fā)輔助文檔和代碼實(shí)例,但是其開發(fā)一般需要專用的仿真器,并且對(duì)于簡單或低成本系統(tǒng),價(jià)格高將會(huì)是最大的障礙。 (二) 通用USB收發(fā)器 通用USB收發(fā)器僅處理USB總線相關(guān)事務(wù),必須有一個(gè)外部微處理器來進(jìn)行協(xié)議處理和數(shù)據(jù)交換。這種方案的主要特點(diǎn)是成本低、接口形式多樣、可靠性高,具有很高的靈活性,尤其適

54、合于產(chǎn)品的改型設(shè)計(jì),缺點(diǎn)是開發(fā)者需要非常熟悉USB的協(xié)議,以處理USB總線事務(wù),同時(shí)要用微處理器控制收發(fā)器的工作。 考慮到實(shí)驗(yàn)室具體情況,我們選擇了通用USB收發(fā)器。 USB硬件結(jié)構(gòu)相當(dāng)簡單,如圖31所示,它由以下三部分組成:USB收發(fā)器、微處理器和存儲(chǔ)器。它們構(gòu)成了一個(gè)USB數(shù)據(jù)傳輸?shù)淖钚∠到y(tǒng)。其功能為:USB收發(fā)器負(fù)責(zé)處理所有與USB總線事務(wù)有關(guān)的任務(wù),如總線喚醒、數(shù)據(jù)接收/發(fā)送、打包、CRC校驗(yàn)等,但該收發(fā)器不負(fù)責(zé)解釋這些數(shù)據(jù)的意義;微處理器負(fù)責(zé)處理數(shù)據(jù)、響應(yīng)主機(jī)請(qǐng)求、以及控制USB收發(fā)器的工作;存儲(chǔ)器負(fù)責(zé)存儲(chǔ)和提供數(shù)據(jù)。二、 PDIUSBD12通用USB收發(fā)器(一) PDIUSBD12的性能特點(diǎn) PDIUSBD12(以下簡稱D12)是PHILIPS公司推出的符合USB1.l規(guī)范的通用收發(fā)器,內(nèi)部有6個(gè)端點(diǎn),除了默認(rèn)控制端點(diǎn)外,還各有兩個(gè)普通端點(diǎn)和主端點(diǎn)。8位數(shù)據(jù)并行接口可以方便地與外部CPU進(jìn)行連接,在批量傳輸模式下達(dá)到1M

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論