USB技術和驅動程序開發(fā)_第1頁
USB技術和驅動程序開發(fā)_第2頁
USB技術和驅動程序開發(fā)_第3頁
USB技術和驅動程序開發(fā)_第4頁
USB技術和驅動程序開發(fā)_第5頁
已閱讀5頁,還剩41頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、. . . . 目 錄第一章 緒論 .(1)§1.1 USB開發(fā)的歷史背景 (1)§1.2 目前通用的各種總線和接口的大體介紹 . (2)§1.3 USB總線的特點與開發(fā)意義 . (2)第二章 USB技術規(guī) . (5)§2.1 USB的電器特性 . (5)§2.2 USB的數(shù)據(jù)包格式 .(8)§2.3 USB的傳輸類型. (10)§2.4 USB的設備架構 .(13)第三章 USB驅動程序的開發(fā). (20)§3.1 驅動程序與USB設備的通訊 (20)§3.2 USB鍵盤驅動程序 . (24)§

2、3.2.1 程序設計的基本思想. (25)§3.2.2 部分程序代碼的說明 . (28)§3.3 主機應用程序與虛擬設備的通信 . (37)§3.3.1 程序設計的基本思想. (37)§3.3.2 部分程序代碼的說明 . (38)總結 . (42)致 . (43)參考資料 . (44)附錄 (45)摘 要 關鍵詞:usb,通用串行總線,串行接口規(guī)摘要 本文主要介紹USB的技術規(guī)以與驅動程序的具體開發(fā),并通過一個USB鍵盤的實例來具體說明,展示了USB應用的大好前景。AbstractKeywords: usb,universal serial bus,se

3、rial interface criterionAbstract The paper mainly introduces the usbs technology criterion and how to develop a driver procedure of usb,and shows us the usbs beautiful future by explaining a usb keyboards driver procedure.46 / 46第一章 緒論Usb(Universal Serial Bus通用串行總線)是目前各個廠家投資最多的方向之一,從通用的鼠標鍵盤,到即插即用的Us

4、b硬盤,各種讀寫卡,帶Usb插口的相機等等相繼推出,它有著其他總線不可比擬的優(yōu)勢,是今后pc外設的主流產(chǎn)品。§1.1 USB開發(fā)的歷史背景隨著電腦應用的拓展,pc機的外設越來越多,機箱后的插口也形形色色:并行口,串行口,鍵盤口,鼠標口,游戲手柄接口,音頻輸入輸出口,視頻輸出口等等等等。而按常規(guī),用戶為pc增加一個新的外設卻有一套復雜的操作,至少需要作以下的工作:首先打開音箱,安裝新外設的接口插卡;其次,為了避免資源占用沖突,用戶必須設置跳線為新的外設插卡選擇合適的IRQ,DMA和I/O口地址,然后安裝外設的驅動程序。上述工作的問題是:pc有限的I/O插槽無法滿足日益增加的外設需要;不

5、具備專業(yè)知識的普通用戶難于選擇合適的資源和完成復雜的安裝工作。因此,簡化外設補充方法,使之方便易行便成為各個pc廠家面臨的重大研究課題。而且目前各種總線有著這樣那樣不足,有的是占用存過多,有的是速度不夠快,因此,在1996年召開的面向pc機硬件技術工作者會議上,Compaq,Intel和Microsoft三家廠商提出了設備插架(Device Bay)概念,Usb就是設備插架的一種規(guī)。用戶只需花費很少的時間對Usb設備進行安裝和配置,就可以使用;另外,它還提供即插即用功能,用戶可以在不斷電的情況下直接把設備插在Usb插口上,從而使連接到pc機上外設的連接和配置變得很容易?,F(xiàn)在USB外設得到了更新

6、更快的發(fā)展。存儲器方面,以前的4兆,8兆的OnlyDisk(優(yōu)盤),還有USB接口的讀寫卡,現(xiàn)在的10G20G的USB移動式硬盤,而且可以根據(jù)需要自己給生產(chǎn)廠家說明生產(chǎn)要求,需要多大的硬盤就生產(chǎn)出多大的硬盤;速度方面,由于USB2.0規(guī)的出現(xiàn),數(shù)據(jù)傳輸越來越快,以前的電腦眼實時傳輸數(shù)據(jù),還會出現(xiàn)一幀一幀的跳動,現(xiàn)在的數(shù)碼相機,網(wǎng)上聊天攝像機等等,真正做到了實時傳輸;在辦公用品方面,掃描儀,打印機等都出現(xiàn)了USB接口的產(chǎn)品,使得人們的工作和生活方便了許多。§1.2 目前通用的各種總線和接口的大體介紹PCI總線Pci總線是Intel公司為Pentium處理器設計的一種新型標準總線,這種總

7、線技術允許快速的存,磁盤和視頻訪問。Pci總線結構的高傳輸速度限制了pci接口的數(shù)量,一般只能有兩到三個(通常用于圖形和硬盤控制器)。如果數(shù)據(jù)進行的是64位傳輸,系統(tǒng)時鐘速度為33MHz,那么最大傳輸速度為264Mb/s,比較起Usb2.0的最大傳輸速度為480Mb/s來說,還是差了很多。一般pc廠家為了適應高速據(jù)傳輸速度和縮小接口卡的尺寸,Pci插槽與pc,isa和Eisa不再兼容。Pci總線的最大傳輸速度為264Mb/s,該速度只能在基于Pentium處理器的系統(tǒng)中使用64位軟件才能達到。在一個基于80486處理器的系統(tǒng)中,最大數(shù)據(jù)傳輸速度只有132Mb/s。SCSI總線接口Scsi是一種

8、智能型的總線子系統(tǒng),可以支持多個外設同時協(xié)同操作,每個設備都有一個優(yōu)先級。單個總線系統(tǒng)最多可以支持7個設備。既可支持高質量的接頭和電纜,也支持低質量的接頭和電纜。而且在快速傳輸和增強型外設的支持方面有很大的潛力。目前各種scsi總線中,最好的Ultra-Scsi總線支持32位數(shù)據(jù)總線,最大數(shù)據(jù)傳輸率為40Mb/s,可接到的最多設備數(shù)為15個。IDE接口(AT總線)Ide接口一般用于磁盤和光盤接口,它的特點是磁盤控制器做在驅動器里面,通過一個電纜直接與主板連接。這根電纜允許多個驅動器連接到系統(tǒng),而不必擔心總線和控制器沖突等問題。通常Ide接口還包含至少32Kb的磁盤緩存?,F(xiàn)在典型的pc機主板上有

9、兩個Ide接口,每個接口可以連接兩個硬盤或者一個硬盤和一個光驅,即最多可以接四個設備,數(shù)據(jù)傳輸率最大可以達到16.6Mb/s。1394接口1394接口有著很多和Usb相類似的特點,但是目前由于1394外設過于昂貴,只能用于公司或者高端用戶,所以還沒有成為廣大pc廠家所支持并流行起來的接口。§1.3USB總線的特點與開發(fā)意義USB作為計算機結構的一種新的擴展,主要致力于計算機一體化和應用類消費產(chǎn)品。它的數(shù)據(jù)傳輸速率比串、并口都要高 ,USB總線具有時分復用的特點 ,多個不同速度的 USB外設可以通過集線器同時連接到同一臺計算機的同一個 USB口上 ,在 USB總線帶寬允許的情況下 ,多

10、個外設可以同時工作而不相互影響。 USB傳輸速率適用于計算機的中低速外設 ,USB高速模式下支持實時的視頻、音頻和壓縮的視頻數(shù)據(jù)傳輸。現(xiàn)在生產(chǎn)的pc都配備了Usb接口,Microsoft 的Win98,NT,Wind2000,Windows XP以與Mac OS,Linux, FreeBSD等流行的操作系統(tǒng)都增加了對Usb的支持。Usb有如下的特點和優(yōu)點:(1) 速度快。Usb1.1標準有高速和低速兩種工作方式,主模式為高速模式,速率為12Mbps/s。Usb2.0把速度提高到480Mbps/s,可以在上面開發(fā)功能更多的電子產(chǎn)品,并且,在Usb2.0上,多個高速外設可以同時運行。(2) 設備配

11、置和安裝容易。如上所述,所有Usb設備支持即插即用,系統(tǒng)對其進行自動配置,徹底拋棄了過去的跳線和撥碼開關配置。(3) 易于擴展。通過使用Hub,理論上可最多接127個外設。標準的Usb電纜長度為3m(低速為5m)。通過Hub或者中繼器可使外設距離達到30m??梢允褂枚喾N連接方式進行擴展,圖11是一個典型的外設配置方案。主機設備 設備根HUB復合設備 HUBHUB設備設備設備HUB圖11(4) 能夠采用總線供電。Usb總線能提供最大電壓5V,最大電流500mA。這樣就另外為某些低電壓電流的Usb外設提供額外電源。(5) 使用靈活。Usb共有四種傳輸模式,控制傳輸,同步傳輸,中斷傳輸和批量傳輸(這

12、些容的細節(jié)在第二章有詳細的介紹),以適應不同的需要?;谝陨系倪@些優(yōu)于其他總線的特點,開發(fā)Usb是勢在必行的方向,也是本論文所要研究的意義。但是,隨之問題也就來了,盡管操作系統(tǒng)為Usb設備提供了用戶需要的驅動程序,在一般情況下,設備一插到pc上就可以使用了,這是最好不過的事情。但是,事實上并不是如此,現(xiàn)在已經(jīng)有上千種不同的設備,而且每天還有許多不同的設備在問世,操作系統(tǒng)不可能為所有的設備提供全部的驅動程序;而且,即使提供了通用的驅動程序,能夠驅動Usb設備進行工作,那也可能是針對某一類設備提供的通用驅動程序,許多個別設備的優(yōu)點在這種通用的驅動程序驅動下,不能發(fā)揮出來;另外,作為我們消費者而言,

13、總不能花了相對多的錢來用一個用很少的錢買的設備就能實現(xiàn)的功能,這對設備和人來說,都是一種浪費。在原有驅動程序的基礎上,自己開發(fā)出設備新的功能,或者自己干脆從頭做起,都是一種不錯的選擇。本論文完成的關于Usb鍵盤的驅動程序開發(fā),就是基于這種目的而設計的。第二章 USB技術規(guī)設計USB的目標就是使不同廠家所生產(chǎn)的設備可以在一個開放的體系下得到廣泛的使用。USB2.0規(guī)改進了便攜商務或家用電腦的現(xiàn)有體系結構,進而為系統(tǒng)生產(chǎn)商和外設開發(fā)商提供了足夠的空間,以用來創(chuàng)造多功能的產(chǎn)品和開發(fā)廣闊的市場,而且不必擔心失去舊的接口,失去兼容性。下面從五個方面簡要介紹此規(guī)。§2.1 USB的電器特性USB

14、的電氣特性主要是描述信號的發(fā)送與電壓分布情況。下面我們將分別對其進行詳細介紹。1、信號的發(fā)送USB通常使用一種差分的輸出驅動器來控制數(shù)據(jù)信號在USB電纜上的發(fā)送,一個USB設備端的連接器是由D+、D-與Vbus,GND和其它數(shù)據(jù)線構成的簡短連續(xù)電路,并要求連接器上有電纜屏蔽,以免設備在使用過程中被損壞。它有兩種工作狀態(tài),即低態(tài)和高態(tài)。在低態(tài)時,驅動器的靜態(tài)輸出端的工作電壓Vo變動圍為00.3V,且接有一個15k的接地負載。處于差分的高態(tài)和低態(tài)之間的輸出電壓變動應盡量保持平衡,以能很好地減小信號的扭曲變形。下圖是Usb電纜的示意圖:圖2-1在任何驅動狀態(tài)下,USB設備必須能接收如圖2-2所示的波

15、形。這些波形從一個輸出阻抗為3P的恒流電壓源直接進入每一個USB數(shù)據(jù)口。高速USB設備的連接電纜是阻抗為90±15%,最大單路時延為26ns的屏蔽雙絞線電纜,其到達的最大速率為480Mb/s,并且每個驅動器的阻抗必須在2844之間。低速USB設備在插口端必須要有一個帶有串行口連接器的可控制電纜,其速率為12Mb/s。當電纜與設備相連時,在D+/D-線上必須要有一個200450PF的單終端電容器。低速電纜的傳播時延必須小于18ns,從而保證信號在其上升沿或 靠近設備的USB連接器上的D+或D_插口USB設備USB設備上的輸入保護設備可能互相排斥,故觀察數(shù)據(jù)輸入端口時,可能發(fā)現(xiàn)由電壓生成

16、器產(chǎn)生的信號波形會變形。 圖22 USB信號發(fā)送的最大輸出波形者下降沿的第一個中點產(chǎn)生。Usb信號的發(fā)送有其發(fā)送的標準,具體如表2-1所示,在該表中,J和K這兩個數(shù)據(jù)態(tài)是兩個邏輯電平,在系統(tǒng)中,通常被用來進行交換差分數(shù)據(jù)。差分數(shù)據(jù)信號的發(fā)送并不關心信號經(jīng)過的地方電平情況,它只要求橋電壓在1.32.0V之間。另外,在接收端,空閑態(tài)和工作態(tài)在邏輯上分別與J態(tài)和K態(tài)等價。一般而言,數(shù)據(jù),空閑信號與喚醒信號的發(fā)送標準均由端口的設備類型所決定。如果連結的是高速設備,則USB使用所規(guī)定的高速率來發(fā)送信號并且有很快的上升沿和下降沿時間,甚至還可用低速率來發(fā)送數(shù)據(jù),而對于表2-1中所示的低速信號發(fā)送標準僅用在

17、低速設備與其所連接的端口之間(上升沿和下降沿時間較長)。USB設備是一個智能型的設備,當它發(fā)現(xiàn)主機或集線器的下形端口上沒有設備連接時,端口上自帶的Rpu電阻將使D+和D-上的電壓低于主機或集線器端口的單終端電壓,此時該端口不是由集線器控制的,這將在下形端口產(chǎn)生一個SE0態(tài)。如果主機或集線器不在控制數(shù)據(jù)線并且下形端口的SE0態(tài)的持續(xù)時間超過2.5ns,則此時USB設備將中斷信號的發(fā)送,此時表示pc將認定沒有設備連接到端口上。如果集線器發(fā)現(xiàn)其中一根數(shù)據(jù)線上的電壓大于它的臨界值的持續(xù)時間超過2.5us,則表示pc知道端口上連接了一個設備,便開始信號的發(fā)送。表21 信號發(fā)送的標準總線狀態(tài) 信 號 電

18、平 開始端的源連接器 (一位時端) 終端的目標連接器 需要條件 接受條件差分的“1”D+>Voh(min) D-<Vol(max)(D+)-(D-)>200mv(D+)>Vih(min)(D+)-(D-)>200mv差分的“0”D->Voh(min)D+<Vol(max)(D+)-(D+)>200mvD->Vih(min)(D-)-(D+)>200mv單終端“0”(SE0)D+和D-<Vol(max)D+和D-<Vil(max)D+和D-<Vih(min)數(shù)據(jù)J態(tài):高速低速差分的“0”差分的“1”差分的“0”差分的“

19、1”數(shù)據(jù)K態(tài):高速低速差分的“1”差分的“0”差分的“1”差分的“0空閑狀態(tài):高速低速N.A.D->Vihz(min)D+>Vil(max)D+>Vihz(min)D-<Vil(max)D->Vihz(min)D+<Vih(min)D+>Vihz(min)D-<Vih(min)喚醒狀態(tài)數(shù)據(jù)K狀態(tài)數(shù)據(jù)K狀態(tài)包開始(SOP)數(shù)據(jù)線從空閑態(tài)轉到K態(tài)包結束(EOP)SE0近似的為2位時其后僅接著1位時的JSE01位時其后僅接著一位時的J態(tài)SE01位時其后僅接著J態(tài)包結束(EOP)SE0近似地為2位時其后僅接著1位時的JSE01位時其后僅接著一位時的J態(tài)S

20、E01位時其后僅接著J態(tài)斷開(在下行端口處)N.A.SE0持續(xù)時間大于等于2.5微秒連接(在上行端口處)N.A.空閑態(tài)持續(xù)時間大于等于2毫秒空閑態(tài)持續(xù)時間大于等于2.5微秒復位D+和D-小于Vol(max)的持續(xù)時間大于等于10毫秒D+和D-小于Vil(max)的持續(xù)時間大于等于10毫秒D+和D-小于Vil(max)的持續(xù)時間大于等于2.5微秒2、電壓分布所有USB設備的缺省電壓為低電壓,當設備要從低電壓變化到高電壓時,則是由軟件來控制的。在允許設備達到高電壓之前,軟件必須保證有足夠的電壓可供使用。 USB支持一定圍的外設來提供電壓來源和電壓消耗,包括如下的部分。·根端口集線器:它是

21、直接與USB主機控制器相連的,并與其有一樣的電源來源。從外部獲得操作電壓(AC或DC)的系統(tǒng),在每個端口至少支持五個單位負載,這些端口稱為高電壓端口。由電池組提供電壓的系統(tǒng)可以支持一個或五個單位負載。哪些只能支持一個單位負載的端口稱為低電壓端口。·從總線獲得電壓的集線器:它的所有部功能設備和下形端口都從它的上形端口的Vbus上獲得電壓。在電壓升高時,它可以接一個單位負載,經(jīng)過初始設置后,它可以接五個單位負載。初始設置電壓被分配給了集線器,任一固定功能設備和外部端口。它的外部端口只能接一個單位負載,當集線器處于活動或掛起態(tài)時,它必須為這個端口提供電流。·自給電壓集線器:它的任

22、一部功能設備和下形端口不再從Vbus上獲得電壓,但當它的其余部分電壓下降時,它的USB接口可接一個單位負載并從Vbus處獲得電壓,以允許該接口能工作。從外部(從USB)獲得操作電壓的集線器,可在每個端口接五個單位負載。·由電池組提供電壓的集線器,每端口可接一個或五個單位負載。·從總線獲得電壓的低電壓功能設備,該種設備上的所有電壓均來自Vbus,在任一時刻,它們最多只能接一個單位負載。·從總線獲得電壓的高電壓設備。該種設備上的所需電壓均來自Vbus。在電壓升高時,它們至多只能接一個單位負載,但當初始設置后,可接五個單位負載。自給電壓功能設備,如圖17,當它的其余設備

23、電壓下降時,它可以接一個單位負載,并從Vbus上獲取所需電壓,以使USB接口處于活動狀態(tài)。§2.2 USB的數(shù)據(jù)包格式USB外設施不管是實現(xiàn)什么功能,它總是傳輸?shù)氖菙?shù)據(jù), 數(shù)據(jù)位被發(fā)送到總線的時候,首先最低有效位(LSb),跟著是下一個最低有效位,最后是最高有效位(MSb)。所有的數(shù)據(jù)包都從同步字段開始的,同步字段為空閑狀態(tài)出現(xiàn)在總線上,后面跟著以NRZI編碼的二進制串“KJKJKJKK”。同步字段里的最后的2位是同步字段結束的記號,并且標志了包標識符(PID)的開始。所有USB包的同步字段后都緊跟著包標識符(PID),如圖2-3所示: 主機和所有功能部件都必須對得到全部PID字段實

24、行完整的譯碼。任何收到包標識符,如果含有失敗的校驗字段,或者經(jīng)譯碼得到未定義的值,則該包標識符被認為是錯誤的,而且包的余項將被忽略。圖2-3 PID 格式表2-2 PID 類型PID 類型PID 名PID3:0描述標記(Token)輸出(OUT)輸入(IN)幀開始(SOF)建立(SETUP)0001B1001B0101B1101B在主機到功能部件的事務中有地址+端口號在功能部件到主機的事務中有地址+端口號幀開始標記和幀號在主機到功能部件建立一個控制管道的事務中有地址+端口號數(shù)據(jù)(DATA)數(shù)據(jù)0(DATA0)數(shù)據(jù)1(DATA1)0011B1011B偶數(shù)據(jù)包PID奇數(shù)據(jù)包PID握手(Handsh

25、ake)確認(ACK)不確認(NAK)停止(STALL)0010B1010B1110B接收器收到無措數(shù)據(jù)包;接收設備部不能接收數(shù)據(jù),或發(fā)送設備不能發(fā)送數(shù)據(jù);端口掛起,或一個控制管道請求不被支持。專用(Special)前同步(PRE)1100B主機發(fā)送的前同步字。打開到低速設備的下行總線通信。地址字段地址字段通過其地址指定函數(shù),至于是數(shù)據(jù)包的發(fā)出地還是目的地,則取決于標記PID的值。如圖2-4所示,ADDR0.6指定了總共128個地址。地址字段用于輸入,建立和輸出標記。由定義可知,每個ADDR值都定義了單一的功能。圖2-4 地址字段端口字段如圖2-5所示,當功能部件需要一個以上的端口時,附加的4

26、位的端口(ENDP)字段提供了更靈活的尋址方式。除了端口地址0之外,端口個數(shù)是由功能部件決定的。端口字段只對輸入,建立和輸出標記PID有定義。圖2-5 端口字段數(shù)據(jù)字段數(shù)據(jù)字段可以在0到1,023字節(jié)之間變動,但必須是整數(shù)個字節(jié)。圖2-6為多字節(jié)顯示格式,每個字節(jié)的圍的數(shù)據(jù)位移出時都是最低位(LSb)在前。圖2-6 數(shù)據(jù)字段數(shù)據(jù)包大小隨著傳送類型而變化。循環(huán)冗余校驗(CRC)被用來在標記和數(shù)據(jù)包中保護所有的非PID字段。在上下文中,這些字段被認為是保護字段。PID不在含有CRC的包的CRC校驗圍。數(shù)據(jù)包格式如圖2-7所示,數(shù)據(jù)包由PID,包括至少0個字節(jié)數(shù)據(jù)的數(shù)據(jù)區(qū)和CRC構成。有2種類型的數(shù)

27、據(jù)包,根據(jù)不同的PID:DATA0和DATA1來識別。2種數(shù)據(jù)包PID是為了支持數(shù)據(jù)切換同步而定義的。圖2-7 數(shù)據(jù)包格式數(shù)據(jù)必須以整數(shù)的字節(jié)數(shù)發(fā)出。數(shù)據(jù)CRC僅通過對包中的數(shù)據(jù)字段計算而得到,而不包括PID,它有自己的校驗字段。§2.3USB的傳輸類型USB通過通道在主機緩沖區(qū)與設備端點間傳送數(shù)據(jù)。在消息通道中傳遞的數(shù)據(jù)具有USB定義的格式,它的數(shù)據(jù)包中包含的數(shù)據(jù)允許具有設備指定的格式。USB要求任何在通道上傳送的數(shù)據(jù)均被打包,數(shù)據(jù)的解釋工作由客戶軟件和應用層軟件負責。USB提供了多種數(shù)據(jù)格式,使之盡可能滿足客戶軟件和應用軟件的要求。Usb有四種傳輸方式:控制傳輸,批量傳輸,中斷傳

28、輸和同步傳輸。每個傳輸類型在以下的幾個傳輸特征上會有不同:可用性,數(shù)據(jù)包大小、信息流的方向、數(shù)據(jù)傳輸?shù)乃俣取㈠e誤處理。下面分別介紹:1、 控制傳輸控制傳輸允許訪問一個設備的不同部分??刂苽鬏斢糜趥魉涂刂泼睿ㄈ缈蛻糗浖退膽弥g的設置信息、命令信息、狀態(tài)信息)??刂苽鬏斢梢韵聨讉€事務組成:(1)建立聯(lián)系,把請求信息從主機傳到它的應用設備;(2)零個或多個數(shù)據(jù)傳送事務,按照(1)事務中指明的方向傳送數(shù)據(jù);(3)狀態(tài)信息回傳。將狀態(tài)信息從應用設備傳到主機。當端點成功地完成了被要求的操作時,回傳的狀態(tài)信息為“SUCCESS”。·可用性 每個設備必須在終端0的默認流程中支持控制傳輸。一個

29、設備也可以有被配置為控制傳輸?shù)钠渌鞒蹋诂F(xiàn)實中沒有必要有多個流程。即使如果一個設備需要發(fā)送許多控制請求,主機是根據(jù)請求的數(shù)量和大小來分配帶寬的,而不是根據(jù)控制流程的數(shù)量,因此擁有多個控制終端是沒有必要的。·USB規(guī)定的數(shù)據(jù)包大小 在全速設備中,數(shù)據(jù)包的最大值可以是8,16,32或者64B。在低速設備中,最大值是8B。這只包括了數(shù)據(jù)包中的信息,不包括檢驗位和起始位。一個包含了少于數(shù)據(jù)字節(jié)數(shù)最大值的事務表明這是傳輸中最后一個事務。·信息流的方向 控制傳輸使用的是消息通道上的雙向信息流。所以,一旦一個控制通道被確認之后,這個通道就使用了具有某個端點號的兩個端點,一個輸入,一個

30、輸出。·數(shù)據(jù)傳輸?shù)乃俣瓤刂苽鬏敳皇怯脕韨鬏敂?shù)據(jù)的最有效的方法。全速傳輸除了要傳輸?shù)臄?shù)據(jù)外,還有一個45B的數(shù)據(jù)頭。低速傳輸可能傳輸不超過8B的數(shù)據(jù),它被限制為每幀最多三個事務。一個8B的單個低速控制傳輸使用一個幀的帶寬的29,如果總線很忙,則所有的控制傳輸可能不得不共享保留的10的帶寬。這樣就限制了速度。·出錯處理如果一個設備在一個控制傳輸中沒有返回一個預期的交換包,那么一個pc主機控制器將重試兩次。如果主機在重試三次后沒有接收到相應,那么它通知需要這個傳輸?shù)能浖?,停止與終端的通信,知道問題得到解決。如果一個SETUPB包在上一個傳輸?shù)竭_之前到達,則外設就丟棄上一個傳輸并開

31、始新的一個傳輸。2、 批量傳輸批量傳輸對傳輸時間不嚴格的數(shù)據(jù)傳輸來說是很有用的。一個批量傳輸可以發(fā)送大量的數(shù)據(jù)而不會阻塞總線,因為這個傳輸會為其他類型的傳輸而延遲,并且會等到總線可用的時候再傳輸。批量傳輸可用于從主機發(fā)送數(shù)據(jù)到一個打印機,從一個掃描儀發(fā)送數(shù)據(jù)到主機,對一個磁盤的讀和寫等等。·可用性 只有全速設備可以使用批量傳輸。設備不需要支持批量傳輸,但一個特定設備類可能需要它。·USB規(guī)定的數(shù)據(jù)包的大小 USB沒有規(guī)定批量傳輸通道上數(shù)據(jù)包的格式。一個批量傳輸能有一個最大的包的大小值為8,16,32或64B。在列舉過程中,主機從設備處讀取每一個批量傳輸?shù)淖畲蟀拇笮?,一次?/p>

32、輸過程中,數(shù)據(jù)的大小可以是小于或者等于這個最大值。如果一個數(shù)據(jù)包單個包不能發(fā)送,那么主機控制器會把這個傳輸分成多個事務。·信息流的方向 這種通道總是單方向的,如果要進行雙向傳送,必須用兩個通道。· 數(shù)據(jù)傳輸?shù)乃俣?當總線是空閑時,批量傳輸可以使用任何類型的最大帶寬(最多95),它們有一個很小的頭,因此它是所有傳輸中最快的。·出錯處理 批量傳輸使用錯誤檢測。如果一個設備沒有返回預期的交換包,pc中的主機控制器最多重試兩次。如果接到一個nak交換信息,則主機也會重試。批量傳輸也使用數(shù)據(jù)循環(huán)位來確保沒有丟失數(shù)據(jù)。3、 中斷傳輸中斷傳送是為這樣一類設備設計的,它們只傳或收

33、少量數(shù)據(jù),而且并不經(jīng)常進行傳送,但它們有一個確定的服務周期,對中斷傳送有以下要求:通道的最大服務期得到保證;由于錯誤而引起的重發(fā)在下一服務期進行。·可用性 低速和全速設備都可以使用中斷傳輸。設備不需要支持中斷傳輸,但一個設備類可能需要它。·USB規(guī)定的數(shù)據(jù)包的大小 USB對中斷通道上的數(shù)據(jù)流格式無要求。一個全速設備可以使用從1到64B之間的任何大小的數(shù)據(jù)包。低速設備有一個8B的最大值。·信息流的方向 中斷通道是單向的。端點描述信息指明了通道的數(shù)據(jù)流方向。·數(shù)據(jù)傳輸?shù)乃俣?中斷傳輸沒有保證的傳輸速率,只有事務之間保證的最大間隔。一個空閑總線理論上可以在每幀

34、中傳輸最多19個64B全速中斷傳輸。在實際中,主機不可能把19個傳輸安排在一個幀中,因此實際最大速率將小于這個值。·出錯處理 如果一個設備沒有返回一個預期的交換包,則pc的主機控制器將最多重試兩次。主機如果從設備接收到nak,它也會重試。中斷傳輸可以使用數(shù)據(jù)循環(huán)值來確保所有的數(shù)據(jù)都被正確無誤的接收到。4、 同步傳輸在非USB的環(huán)境下,同步傳輸意味著恒定速率、允許錯誤存在的傳輸。在USB環(huán)境下,要求同步傳輸能提供以下幾點: 固定的延遲下,確保對USB帶寬的訪問;只要數(shù)據(jù)能提供得上,就能保證通道上的恒定數(shù)據(jù)傳送速度;如果由于錯誤而造成傳送失敗,并不重傳數(shù)據(jù)。當USB同步傳輸類型被用來支持

35、同步的源和目的時,使用這個傳輸類型的軟件并不要同步的。·可用性 只有全速設備可以使用等時傳輸。設備不需要支持等時傳輸,但一個設備類可能需要支持它。·USB規(guī)定的數(shù)據(jù)包的大小 USB并不對數(shù)據(jù)格式做要求。如果帶寬可用,則一個事務可以傳輸最多1023個字節(jié)。如果數(shù)據(jù)的數(shù)量一個單個包不能發(fā)送,則主機控制器會把這個傳輸分成多個事務。每幀的數(shù)據(jù)量不必一樣。·信息流的方向 同步通道是單方向的。在對端點的描述中指明了與它相連的通道的數(shù)據(jù)流方向。如果設備要同步的雙向流的話,只好用兩個同步通道,一個流進,一個流出。·數(shù)據(jù)傳輸?shù)乃俣?等時和終端傳輸組合最多可以使用90的帶寬

36、。一個等時傳輸每幀最多可以傳輸1023B,這就留下了31的帶寬給其他傳輸使用。·出錯處理 保證大塊數(shù)據(jù)的等時傳輸?shù)拇鷥r是失去錯誤校正。所以一般用于偶爾,少量錯誤可以接受的情況下。§2.4 USB的設備架構USB設備可被劃分三層:·底層是傳送和接收數(shù)據(jù)包的總線接口·中間層處理總線接口與不同端點之間的數(shù)據(jù)路由端節(jié)點是數(shù)據(jù)的終結提供處或使用處,它可被看作數(shù)據(jù)源或數(shù)據(jù)接收端。·最上層的功能由串行總線設備提供。驅動程序所要做的就是在這些層上編程滿足Usb外設的需要。這里主要講一下中間層設備架構和如何處理設備請求。1、 USB設備狀態(tài)USB設備有若干可能的

37、狀態(tài),其中一些對于USB與主機(host)來說是外置的,而另外一些對USB設備來說是置的,出于本論文的目的,現(xiàn)在主要講外置狀態(tài)。圖28說明了這些外設狀態(tài)的轉化關系。·連接狀態(tài) Usb外設連接到主機上時的狀態(tài)。·加電狀態(tài) USB設備的電源可來自外部電源,也可從USB接口的集線器而來。電源來自外部電源的USB設備被稱作自給電源式的。盡管自給電源式的USB設備可能在連接上USB接口以前可能已經(jīng)帶電,但它們直到連線上USB接口后才能被看作是加電狀態(tài)。而這時候VBUS已經(jīng)對設備產(chǎn)生作用了。·缺省狀態(tài) 設備加電以后,在它從總線接收到復位信號之前不應對總線傳輸發(fā)生響應。在接收到

38、復位信號之后,設備才在缺省地址處變得可尋址。·地址狀態(tài) 所有的USB設備在加電復位以后都使用缺省地址。每一設備在連接或復位后由主機分配一個唯一的地址。當USB設備處于掛起狀態(tài)時,它保持這個地址不變。·配置狀態(tài) 在USB設備正常工作以前,設備必須被正確配置。從設備的角度來看,配置包括一個將非零值寫入設備配置寄存器的操作。配置一個設備或改變一個可變的設備設置會使得與這個相關接口的終端結點的所有的狀態(tài)與配置值被設成缺省值。·中止狀態(tài) 為節(jié)省電源,USB設備在探測不到總線傳輸時自動進入中止狀態(tài)。當中止時,USB設備保持本身的部狀態(tài),包括它的地址與配置。2、 USB標準設備

39、請求這一部分描述的是所有USB設備都定義的標準設備請求。表21列出了所有的標準請求。請求號請求數(shù)據(jù)源接收方值指針長度(B)數(shù)據(jù)01HCLEAR_FEATURE無設備,接口終端特性設備,接口終端0無08HGET_CONFIGURATION無設備零設備1配置值06HGET_DESCRIPTOR設備設備描述符類型和指針設備或語言ID描述符長度描述符0AHGET_INTERFACE無接口0接口1可選設置00HGET_STATUS設備設備,接口,終端0設備,接口,終端2端點狀態(tài)05HSET_ADDRESS無設備設備地址00無09HSET_CONFIGURATION無設備配置值設備0無07HSET_DES

40、CRIPTOR主機設備描述符類型和指針設備或語言ID描述符長度描述符03HSET_FEATURE無設備,接口,終端特性選擇符設備,接口,終端0無0BHSET_INTERFACE無接口可選設置接口號1無0CHSYNCH_FRAME設備終端0終端2幀號表2-1 標準設備請求a、清除特性(ClearFeature()這個請被用來清除一個指定的特性。一個ClearFeature( )請求所指的特性如果不能被清除,不存在或指的是不存在的接口或結點號,會產(chǎn)生請求錯誤。 如果長度不為0,設備響應無定義。 缺省狀態(tài):當設備處于缺省狀態(tài)時,對此請求的反應無定義。 地址狀態(tài):在設備處于地址狀態(tài)時這個請合法的,但如

41、果該請求指的是接口或是非零號端結點,會引起請求錯誤。配置狀態(tài):在此狀態(tài)下,該請求合法。b、取得配置(GetConfiguration()此請求返回當前設備配置值。 如果返回0值表明設備未配置。 如果值,指針,長度的值與上面表中不同,設備響應無定義。 缺省狀態(tài):該請求響應無定義。 地址狀態(tài):返回0值。 配置狀態(tài):非0的 配置值被返回。c、取得描述符(GetDescriptor())這個請求返回存在的描述符。這個標準請求包括三種描述符:設備、配置、與字符串。一個配置描述符的設備請求會一次返回配置描述符,所有的接口描述符和所有接口的端節(jié)點的描述符。第一個接口描述符緊跟著配置描述符,隨后是接口的端點的

42、描述符。如果有其它的接口與端點,它們的描述符則跟在第一個接口與端點描述符之后。與類有關的描述符,或Usb外設生產(chǎn)廠商定義的描述符跟在標準描述符之后。 所有的設備必須提供一個設備描述符并且至少一個配置描述符,如果一個設備不支持一個請求的描述符,則返回請求錯誤。 缺省狀態(tài):此請求合法。 地址狀態(tài):此請求合法。配置狀態(tài):此請求合法。d、取得接口設置(GetInterface() 這個請求返回所指接口的選中的可選設置。 有些USB設備的接口配置有互斥的設置。這個請求使得主機決定當前設置。 如果值或長度不依上表設置,設備響應無定義。 如果所指的接口不存在,返回請求錯誤。 缺省狀態(tài):此狀態(tài)下,設備對該請求

43、響應無定義。 地址狀態(tài):設備返回請求錯誤。 配置狀態(tài):此請求合法。e、取得狀態(tài)(GetStatus ( ) 這個請求返回所指接收者的狀態(tài)。 如果值或長度不是上表中值,或指針在讀取設備狀態(tài)請求時非0,則設備響應無定義。 缺省狀態(tài):設備響應無定義。 地址狀態(tài):如果所指的是接口或是一個非0號端點,設備響應返回請求出錯。 配置狀態(tài):如果所指接口或端點不存在,返回請求錯誤。f、設置地址(SetAddress ( ) 本請求為主機指定以后與設備通信的地址。如果所指的設備地址大于127或指針或者長度非零,設備響應無定義。設備對SetAddress(0)的響應無定義。 缺省狀態(tài):如果地址值非0,那設備將進入地

44、址狀態(tài),否則地址仍留在缺省態(tài)(此非出錯狀態(tài))。 地址狀態(tài):如果新地址值為0,進入缺省態(tài),否則仍留在地址狀態(tài)但使用新地址。配置狀態(tài):在此狀態(tài)下設備對此請求的響應無定義。g、設置配置值(SetConfiguration( ) 此請求設置設備配置值 值的低字節(jié)指出配置,這個配置值必須為0或與配置描述符中的一個配置相一致。如果配置值為0,設備置地址狀態(tài)。值的高字節(jié)保留。 如果指針,長度或者值的高字節(jié)非0,則設備對之的響應無定義。 缺省狀態(tài):設備響應無定義 地址狀態(tài):如果所指的配置為0,設備停留在地址狀態(tài)。如果所指的配置與描述符中的一個值相匹配,那個配置就被選中,設備轉到配置有。否則,返回請求錯誤 配置

45、狀態(tài):如果配置值為0,設備進入地址狀態(tài)。如果配置值非0并與描述符中的一個配置相匹配則設備仍留在配置態(tài),但采用新的配置值,否則返回請求錯誤。h、設置描述符(SetDescriptor ( ) 此請求用于更新或添加新的描述符。 值域高字節(jié)指出了描述符的類型,低字節(jié)指出了描述符索引。指針域指出了字符串描述符的語言標識,對于其它描述符來說它為0。長度域指出從主機傳向設備的字節(jié)數(shù)。 如果設備不支持該請求則設備返回一個請求錯誤。 缺省狀態(tài):此狀態(tài)下設備對該請求反應無定義。 地址狀態(tài):如果設備支持請求,則為合法。 配置狀態(tài):如果設備支持請求,則為合法。i、設置特性(SetFeature ( ) 這個請求用來

46、設置或使一個特性生效。 SetFeature ( )請求如果指出一個不存在的特性會使得設備在交換狀態(tài)階段返回STALL信號。 如果SetFeature ( )指的是一個不存在的接口或端點,設備返回一個請求錯誤。 缺省狀態(tài):設備響應無定義。 地址狀態(tài):合法、除非請求錯誤。 配置狀態(tài):合法。j、設置接口(SetInterface ( ) 此請求讓主機為指定的接口選擇一個設置。 如有USB設備接口配置中有互斥設置。此請求讓主機選擇所要的設置。如果設備的接口只支持缺省設置,在狀態(tài)交換階段設備返回STALL 如果所指接口或設置不存在,設備返回請求錯誤。 缺省狀態(tài):設備響應無定義。 地址狀態(tài):設備返回請求

47、錯誤。 配置狀態(tài):合法。k、同步幀(SynchFrame ( ) 該請求用來設置或返回一個結點的同步幀。 如果所指的端點不支持此請求,設備返回一個請求錯誤。 缺省狀態(tài):設備響應無定義。 地址地址:設備返回請求錯誤。配置狀態(tài):此請求合法。除了11種標準請求外,USB允許類和供應商也定義他們自己的請求,這里就不在贅述了。第三章 USB驅動程序的開發(fā)設備驅動是保證應用程序訪問硬件設備的軟件組件。硬件設備可能是打印機,調制解調器,鍵盤,視頻顯示器或者任何連接到計算機的電子電路。設備可能在計算機部,或者是使用電纜連接到計算機上。設備可以是標準類型,也可以不是,也包括自定義的設備。一個設備驅動使得應用程序

48、不必知道物理連接,信號和與一個設備通信需要的協(xié)議等細節(jié)。應用程序是用戶運行的程序,包括支持自定義硬件的特殊用途的應用程序。設備驅動可以保證應用程序代碼只通過外設名字(如Legend Keyboard)訪問外設或者端口目的地。應用程序不需要知道外設連接端口的物理地址,不需要精確監(jiān)視和控制外設需要的交換信號。設備驅動通過在應用層和硬件專用代碼之間的轉化來完成它的任務。§3.1 驅動程序與USB設備的通訊USB設備的選擇很多外設符合標準類,例如硬盤,光驅,打印機,鍵盤和鼠標。對于這些外設,Windows包括通用驅動,這個類中的設備都可以使用。如果設備具有獨特的功能,則供應商會提供一個稱為m

49、ini-driver的附加驅動,對通用驅動加以補充。一些外設提供接口選擇,選項中可能包括Usb。一個鍵盤可以使用原始的接口,也可以是Usb接口。在這種情況下,mini-driver可以在通用驅動和設備使用的接口之間通信。Windows為Hid(Human Interface Device)類提供了mini-driver,包括鍵盤和鼠標。對于其他設備,Windows不支持Usb接口,因此,產(chǎn)品供應商必須提供完整的驅動程序。USB驅動的Win32驅動模式Windows的Usb設備驅動必須遵循微軟在Win98和更新的版本中為用戶定義的Win32驅動模式。這些驅動以WDM(Windows Driver

50、 Model)為主,擴展名為sys。像其他低級驅動一樣,WDM驅動不能驅動應用程序,因為它和操作系統(tǒng)以更高的優(yōu)先級通信。WDM驅動可以允許或拒絕應用程序訪問設備。USB的驅動層分層驅動USB通信使用分層驅動模型,每層處理一部分通信過程。把通信分成層是有效的,因為這樣可以使不同的設備在一些任務上使用一樣的驅動。舉個例子,所有設備都連接到USB上,因此有一套可以被所有設備訪問的,包括操作系統(tǒng)中的,用來處理USB專用通信的驅動使明智的。也可以選擇使得每個設備驅動直接與USB硬件通信,這樣就會出現(xiàn)很多重復的勞動。Windows中管理與設備通信的部分使I/O子系統(tǒng)。子系統(tǒng)有幾個層,每個層包含一個或多個處

51、理一套相關任務的驅動。系統(tǒng)或者設備請求按一定的順序從一個層轉到相鄰層。在I/O子系統(tǒng)中的一個重要要素使USB子系統(tǒng),包括處理所有設備的USB專門通信的驅動。這個驅動使用的協(xié)議組被稱為一個堆棧,我們可以把它看成層是一個疊著一個堆起來的,通信是按順序從上到下通過這個堆棧。一般設備通信是通過IRP(IO請求包)來完成的。IRP是一個核“對象”,它是一個預先定義的結構,帶有一組對它進行操作的IO管理器函數(shù)。IO管理器接受到一個IO請求,即IRP,先初始化,然后把它傳遞到合適的驅動程序棧中的驅動程序。一個IRP有一個固定的首部和可變數(shù)目的IRP棧單元塊。如圖31所示。每個IO請求有一個主功能代碼(如IR

52、P_MJ_CREATE對應于文件的打開)并可能有次功能代碼。例如IRP_MJ_PNP即插即用IRP有幾個次功能(如IRP_MN_START_DEVICE)。表31列出了常用的主功能代碼。表31 常用的IRP主功能代碼IRP_MJ_CREATE創(chuàng)建或打開設備文件IRP_MJ_CLOSE關閉文件IRP_MJ_WRITE寫文件IRP_MJ_READ讀文件IRP_MJ_CLEANUP取消文件句柄上的任何等待的IRPIRP_MJ_DEVICE_CONTROL設備IO控制IRP_MJ_POWER電源管理請求IRP_MJ_PNP即插即用消息IRP_MJ_SHUTDOWN關閉通知IRP的固定部分含有IRP的固

53、定屬性,每個棧單元(一個IO_STACK_LOCATION)事實上含有大多數(shù)有關的IRP參數(shù)。當一個IRP由多個驅動程序處理時,使用多個IRP棧單元。每個驅動程序從當前IRP棧單元得到它的IRP參數(shù)。如果把一個IRP沿當前設備的驅動程序向下傳遞,必須使用正確的參數(shù)設置下一個棧單元。向下傳遞的參數(shù)必須與正在處理的參數(shù)不同。IRP首部當一個寫IO請求轉換成一個IRP時,IO管理器填寫IO_STACK_LOCATION主要的IRP首部,并構造第一個棧單元。對于寫,IRP首部IO_STACK_LOCATION含有用戶緩沖區(qū)信息。如果使當前棧單元用緩沖IO,IRP的Associated-Irp.Syst

54、emBuffer域含有一個指向用戶緩沖區(qū)的非分頁副本IO_STACK_LOCATION的指針:對于直接IO,IRP的MdlAddress域有一個指向用戶緩沖區(qū)MDL的指針。圖31 IRP概貌IRP棧單元含有主要的寫參數(shù)。棧單元的MajorFunction域含有主功能代碼IRP_MJ_WRITE,指明請求一次寫。前面已經(jīng)說過,如果調用另一個驅動程序,必須建立下一個棧單元。這意味在理論上可以把IRP主功能代碼改成別的功能代碼。一般我們不這么做。在處理大的傳輸上,必須把這個IRP向下發(fā)送幾次,每個驅動程序完成不同的功能。在驅動程序棧中處理IRP在實際的操作中,IO棧單元通常不用于更改這些基本的IRP參數(shù),IRP棧單元通常用于允許一個IRP被設備棧中的所有驅動程序處理。圖32說明一個IRP如何被設備棧中的四個驅動程序處理。第一個IRP到達最高層的驅動程序1,它使用函數(shù)IoGetCurrentIrpStackLocation()獲得指向當前棧單元的指針。這個圖說明它返回最上層的IRP棧單元。驅動程序1決定它需要把這個IRP沿著設備棧向下傳遞處理。這個IRP可能是最低層驅動程序需要看到的“電源管理”IRP。驅動程序1對這個IR

溫馨提示

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

評論

0/150

提交評論