亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Windows下usb接口驅動技術(一)

系統 2038 0

Windows usb 接口芯片的驅動技術

一、 USB 概述

USB 的英文全稱為 Universal Serial Bus, 中文含義是通用串行總線,是由 Conpaq DEC IBM Inter Microsoft NEC Northen Telecom 等公司為簡化 PC 與外設之間的互連而共同研究開發的一種免費的標準化連接器,它支持各種 PC 與外設之間的連接,還可實現數字多媒體集成。現在生產的 PC 幾乎都配備了 USB 接口, Microsoft Windows98 NT 以及 MacOS Linux FreeBSD 等流行操作系統都增加了對 USB 的支持。它是一種快速的,雙向的,同步傳輸的廉價的并可以進行熱拔插的串行接口。 USB 接口使用方便,它可以連接多個不同的設備,而過去的串口和并口只能接一個設備。速度快是 USB 技術的突出特點之一。全速 USB 接口的最高傳輸率可達 12Mb/s, 比串口快了整整 100 倍, USB 總線標準由 1.1 版升級到 2.0 版后,傳輸率由 12Mbps 增加到了 480Mbps . 這使得高分辨率、真彩色的大容量圖象的實時傳送成為可能。 USB 接口支持多個不同設備的串列連接,一個 USB 接口理論上可以連接 127 USB 設備。連接方式也十分靈活,既可以使用串行連接,也可以使用集線器 (Hub) 把多個設備連接在一起,再同 PC 機的 USB 接口相接。普通的使用串口、并口的設備都需要單獨的供電系統,而 USB 設備則不需要。正是由于 USB 的這些特點,使其獲得了廣泛的應用。

二、 USB 的總線結構

Windows下usb接口驅動技術(一)

USB 總線 結構是采用階梯式星形( tiered star )的拓撲( topology )結構,如上圖和下圖所示。每一個星形的中心是 集線器 ,而每一個設備可以通過集線器上的 接口 來加以連接。從圖中可以看到 USB 的設各包含了兩種類型: USB 集線器與 USB 設備。位于最頂端的就是 Host (主機端)。從 Host 的聯機往下連接至 Hub (集線器),再由集線器按階梯式以一層或一階的方式往下擴展出去,連接在下一層的設備或另一個集線器上。事實上,集線器也可視為一種設備。而其中最大層數為 6 層(包括計算機內部的根集線器)。每一個星形的外接點的數目可加以變化,一般集線器具有 2 4 7 個接口。

Windows下usb接口驅動技術(一)

在此的主機端通常是指 PC 主機。當然,主機端因具有根集線器,因此也含有集線器的功能。而集線器是在 USB 規范中特別定義出來的外圍設備,除了擴增系統的連接點外,還負責中繼( repeat )上端/下端的信號以及控制各個下端端口的 電源 管理。至于另一個設備,即是用戶常見的外圍設備。但在 USB 規范書中,稱這種設備為 功能 functi on s ),意味著此系統提供了某些 能力 ,例如具有鍵盤或鼠標等功能。當然不同的外圍設各可以具有不同的功能。通過這種階梯式星形的連接方式,最多可同時連接到 127 個設備。

三、 USB 結構與工作原理

一個 USB 系統可以從三個方面加以描述:

(1)USB 互聯。

(2)USB 設備。

(3)USB 主機。

USB 互聯是指一個 USB 設備與 USB 主機相聯并和其通信的方式 , 它包括:

(1) 總線拓撲結構: USB 主機和 USB 設備的連接模型。

(2) 層間關系: USB 在系統中的每一層都要完成一定的任務。

(3) 數據流模型: USB 系統中信源和信息之間的數據傳送方式。

(4) 任務規劃: USB 提供可以共享的互聯機制。通過規劃對互連機制的訪問,可以支持同步數據傳輸。

四、 USB 硬件結構

一個 USB 系統包含三類硬件設備 : USB 主機 (USB HOST) USB 設備 (USB DEVICE) USB 集線器 (USB HUB)

(1)USB HOST

在一個 USB 系統中,當且僅當有一個 USB HOST 時, USB HOST 有以下功能 :

? 管理 USB 系統 ;

? 每毫秒產生一幀數據 ;

? 發送配置請求對 USB 設備進行配置操作 ;

? 對總線上的錯誤進行管理和恢復。

(2)USB DEVICE

在一個 USB 系統中, USB DEVICE USB HUB 總數不能超過 127 個。 USB DEVICE 接收 USB 總線上的所有數據包,通過數據包的地址域來判斷是不是發給自己的數據包:若地址不符,則簡單地丟棄該數據包 ; 若地址相符,則通過響應 USB HOST 的數據包與 USB HOST 進行數據傳輸。

(3)USB HUB

USB HUB 用于設備擴展連接,所有 USB DEVICE 都連接在 USB HUB 的端口上。一個 USB HOST 總與一個根 HUB (USB ROOT HUB) 相連。 USB HUB 為其每個端口提供 100mA 電流供設備使用。同時, USB HUB 可以通過端口的電氣變化診斷出設備的插拔操作,并通過響應 USB HOST 的數據包把端口狀態匯報給 USB HOST 。一般來說, USB 設備與 USB HUB 間的連線長度不超過 5m USB 系統的級聯不能超過 6 ( 包括 ROOT HUB)

USB 總線最多可支持 127 USB 外設連接到計算機系統。 USB 的拓撲是樹形結構,有 1 USB 根集線器 (root hub) ,下面還可有若干集線器。 1 個集線器下面可接若干 USB 接口。 USB 線纜包括 4 條線: Vbus(USB 電源 ) D+( 數據 ) D-( 數據 ) Gnd(USB ) 。線纜最大長度不超過 5m USB1.1 的傳輸速率最高為 12Mb/s( 低速外設的標準速率為 1.5Mb/s ,高速外設的標準速率為 12Mb/s) USB 外設可以采用計算機里的電源 (+5V 500mA) ,也可外接 USB 電源。在所有的 USB 信道之間動態地分配帶寬是 USB 總線的特征之一,這大大地提高了 USB 帶寬的利用率。當一臺 USB 外設長時間 (3ms 以上 ) 不使用時,就處于掛起狀態,這時只消耗 0.5mA 電流。按 USB1.0/1.1 標準, USB 的標準脈沖時鐘頻率為 12MHz ,而其總線時脈沖時鐘為 1ms(1kHz) ,即每隔 1ms USB 器件應為 USB 線纜產生 1 個時鐘脈沖序列。這個脈沖系列稱為幀開始數據包 (SOF) 。高速外設長度為每幀 12000bit( ) ,而低速外設長度只有每幀 1500bit 1 USB 數據包可包含 0~1023 字節數據。每個數據包的傳送都以 1 個同步字段開始。

五、 USB 的數據流

主控制器負責主機和 USB 設備間數據流的傳輸。這些傳輸數據被當作連續的比特流。每個設備提供了一個或多個可以與客戶程序通信的接口,每個接口由 0 個或多個管道組成,它們分別獨立地在客戶程序和設備的特定終端間傳輸數據。 USBD 為主機軟件的現實需求建立了接口和管道,當提出配置請求時,主控制器根據主機軟件提供的參數提供服務。

USB 支持四種基本的數據傳輸模式:控制傳輸,等時傳輸,中斷傳輸及數據塊傳輸。每種傳輸模式應用到具有相同名字的終端,則具有不同的性質。

控制傳輸類型:支持外設與主機之間的控制,狀態,配置等信息的傳輸,為外設與主機之間提供一個控制通道。每種外設都支持控制傳輸類型,這樣主機與外設之間就可以傳送配置和命令 / 狀態信息。等時傳輸類型:支持有周期性,有限的時延和帶寬且數據傳輸速率不變的外設與主機間的數據傳輸。該類型無差錯校驗,故不能保證正確的數據傳輸,支持像計算機 - 電話集成系統 (CTI) 和音頻系統與主機的數據傳輸。

中斷傳輸類型:支持像游戲手柄,鼠標和鍵盤等輸入設備,這些設備與主機間數據傳輸量小,無周期性,但對響應時間敏感,要求馬上響應。

數據塊傳輸類型:支持打印機,掃描儀,數碼相機等外設,這些外設與主機間傳輸的數據量大, USB 在滿足帶寬的情況下才進行該類型的數據傳輸。

USB 采用分塊帶寬分配方案,若外設超過當前帶寬分配或潛在的要求 , 則不能進入該設備。同步和中斷傳輸類型的終端保留帶寬,并保證數據按一定的速率傳送。集中和控制終端按可用的最佳帶寬來傳輸傳輸數據。

六、 USB 外設控制器的兩種實現方式

USB 芯片在外設領域的應用面很廣。 USB 外設控制芯片通常包括 USB 收發器、串行接口引擎 (SIE) USB 控制器和外設功能等四個模塊 (SIE 主要以硬件方式處理大多數 USB 協議, USB 控制器負責與 PC 交互通信信息 ) USB 控制器一般有兩種類型:一種是 MCU 集成在芯片里面的,如 Intel 8X930AX CYPRESS EZ-USB SIEMENS C541U 以及 MOTOLORA National Semiconductors 等公司的產品 ; 另一種就是純粹的 USB 接口芯片,僅處理 USB 通信,如 PHILIPS PDIUSBD11(I2C 接口 ) PDIUSBP11A PDIUSBD12( 并行接口 ) National Semiconductor USBN9602 USBN9603 USBN9* 等。

集成 MCU USB 控制芯片優點是 CPU 與控制器在同一片芯片里, CPU 只需要訪問一系列寄存器和存儲器,便可實現 USB 口的數據傳輸,最大限度的發揮 USB 高速的特點。而且簡化了程序的設計,極大地降低了 USB 外設的開發難度。缺點是靈活性不夠高,開發成本較大。

純粹的 USB 接口芯片的優點是系統組成靈活,可根據不同的系統需求,搭配不同的 MCU ,具有較高的性能價格比。但因為 USB 控制器是通過串行口或并行口與 MCU 連接,在傳輸速度方面和開發難度方面不如集成了 MCU 的控制芯片。

不同的實現方式在設計開銷、上市時間、 元器件 開銷和引腳數方面各有優劣,選擇不同的方案意味著在以上各項指標中進行取舍。如 PHILIPS 公司的 PDIUSBD12 器件。該芯片是一款性價比很高的 USB 器件,它通常用作 微控制器 系統中實現與微控制器進行通信的高速通用并行接口,設計者可根據需要選擇合適的微控制器,靈活性較大,適用于開發低成本且高效的 USB 外圍設備。

七、 USB 設備的枚舉過程

USB 架構中, hub 負責檢測設備的連接和斷開,利用其中斷 IN 端點 (Interrupt IN Endpoint) 來向主機( Host )報告。在系統啟動時,主機輪詢它的根 hub Root Hub )的狀態看是否有設備(包括子 hub 和子 hub 上的設備)連接。

Windows下usb接口驅動技術(一)

一旦獲悉有新設備連接上來,主機就會發送一系列的請求 (Resqusts) 給設備所掛載到的 hub ,再由 hub 建立起一條連接主機( Host )和設備( Device )之間的通信通道。然后主機以控制傳輸 (Control Transfer) 的方式,通過端點 0(Endpoint 0) 對設備發送各種請求,設備收到主機發來的請求后回復相應的信息,進行枚舉( Enumerate )操作。所有的 USB 設備必須支持標準請求( Standard Requests ),控制傳輸方式( Control Transfer )和端點 0 Endpoint 0 )。

當枚舉完成后,這個新添加的設備可在 Windows 的設備管理器里面看到,當用戶刪除這個設備 / 硬件時,系統把這個設備從設備管理器里刪除。

對于一般的設備,固件( Firmware )內包含主機所要請求的信息,而有些設備則是完全由硬件來負責響應主機的請求。在主機方面則是由操作系統而非應用程序負責處理相關枚舉操作。

枚舉步驟

USB 協議定義了設備的 6 種狀態,僅在枚舉過程種,設備就經歷了 4 個狀態 的遷移:上電狀態 (Powered) ,默認狀態 (Default) ,地址狀態 (Address) 和配置狀態 (Configured) (其他兩種是連接狀態和掛起狀態( Suspend ))。

USB 協議定義了設備的 6 種狀態,僅在枚舉過程種,設備就經歷了 4 個狀態的遷移:上電狀態 (Powered) ,默認狀態 (Default) ,地址狀態 (Address) 和配置狀態 (Configured) (其他兩種是連接狀態和掛起狀態( Suspend ))。

下面步驟是 Windows 系統下典型的枚舉過程,但是固件不能依此就認為所有的枚舉操作都是按照這樣一個流程行進。設備必須在任何時候都能正確處理所有的主機請求。

1. 用戶把 USB 設備插入 USB 端口或給系統啟動時設備上電。

這里指的 USB 端口指的是主機下的根 hub 或主機下行端口上的 hub 端口。 Hub 給端口供電,連接著的設備處于上電狀態。

2.Hub 監測它各個端口數據線上 (D+/D-) 的電壓

hub 端,數據線 D+ D- 都有一個阻值在 14.25k 24.8k 的下拉電阻 Rpd ,而在設備端, D+ (全速,高速)和 D- (低速)上有一個 1.5k 的上拉電阻 Rpu 。當設備插入到 hub 端口時,有上拉電阻的一根數據線被拉高到幅值的 90% 的電壓(大致是 3V )。 hub 檢測到它的一根數據線是高電平,就認為是有設備插入,并能根據是 D+ 還是 D- 被拉高來判斷到底是什么設備(全速 / 低速)插入端口(全速、高速設備的區分在我將來的文章中描述)。如下圖。

Windows下usb接口驅動技術(一)

檢測到設備后, hub 繼續給設備供電,但并不急于與設備進行 USB 傳輸。

3. Host 了解連接的設備。

每個 hub 利用它自己的中斷端點向主機報告它的各個端口的狀態(對于這個過程,設備是看不到的,也不必關心),報告的內容只是 hub 端口的設備連接/斷開的事件。如果有連接/斷開事件發生,那么 host 會發送一個 Get_Port_Status 請求 (request) 以了解更多 hub 上的信息。 Get_Port_Status 等請求屬于所有 hub 都要求支持的 hub 類標準請求( standard hub-classrequests )。

4.Hub 檢測所插入的設備是高速還是低速設備。

hub 通過檢測 USB 總線空閑 (Idle) 時差分線的高低電壓來判斷所連接設備的速度類型,當 host 發來 Get_Port_Status 請求時, hub 就可以將此設備的速度類型信息回復給 host 。( USB 2.0 規范要求速度檢測要先于復位( Reset )操作)。

5.hub 復位設備。

當主機獲悉一個新的設備后,主機控制器就向 hub 發出一個 Set_Port_Feature 請求讓 hub 復位其管理的端口。 hub 通過驅動數據線到復位狀態 (D+ D- 全為低電平 ) ,并持續至少 10ms 。當然, hub 不會把這樣的復位信號發送給其他已有設備連接的端口,所以其他連在該 hub 上的設備自然看不到復位信號,不受影響。

6.Host 檢測所連接的全速設備是否是支持高速模式。

因為根據 USB 2.0 協議,高速( High Speed )設備在初始時是默認全速( Full Speed )狀態運行,所以對于一個支持 USB 2.0 的高速 hub ,當它發現它的端口連接的是一個全速設備時,會進行高速檢測,看看目前這個設備是否還支持高速傳輸,如果是,那就切到高速信號模式,否則就一直在全速狀態下工作。

同樣的,從設備的角度來看,如果是一個高速設備,在剛連接 bub 或上電時只能用全速信號模式運行(根據 USB 2.0 協議,高速設備必須向下兼容 USB 1.1 的全速模式)。隨后 hub 會進行高速檢測,之后這個設備才會切換到告訴模式下工作。假如所連接的 hub 不支持 USB 2.0 ,即不是高速 hub ,不能進行高速檢測,設備將一直以全速工作。

7. Hub 建立設備和主機之間的信息通道。

主機不停得向 hub 發送 Get_Port_Status 請求,以查詢設備是否復位成功。 Hub 返回的報告信息中有專門的一位用來標志設備的復位狀態。

hub 撤銷了復位信號,設備就處于默認/空閑狀態( Default state ),準備著主機發來的請求。設備和主機之間的通信通過控制傳輸,默認地址 0 ,端點號 0 進行。在此時,設備能從總線上得到的最大電流是 100mA

8. 主機發送 Get_Descriptor 請求獲取默認管道的最大包長度。

默認管道( Default Pipe )在設備一端來看就是端點 0 。主機此時發送的請求是默認地址 0 ,端點 0 ,雖然所有位分配地址的設備都是通過地址 0 來獲取主機發來的信息,但由于枚舉過程不是多個設備并行處理,而是一次枚舉一個設備的方式進行,所以不會發生多個設備同時響應主機發來的請求。

設備描述符的第 8 字節代表設備端點 0 的最大包大小。對于 Windows 系統來說, Get_Descriptor 請求中的 wLength 一項都會設為 64 ,雖然說設備所返回的設備描述符( Device Descriptor )長度只有 18 字節,但系統也不在乎,此時,描述符的長度信息對它來說是最重要的,其他的瞄一眼就過了。 Windows 系統還有個怪癖,當完成第一次的控制傳輸后,也就是完成控制傳輸的狀態階段,系統會要求 hub 對設備進行再一次的復位操作( USB 規范里面可沒這要求)。再次復位的目的是使設備進入一個確定的狀態。

9. 主機給設備分配一個地址。

主機控制器通過 Set_Address 請求向設備分配一個唯一的地址。在完成這次傳輸之后,設備進入地址狀態( Address state ),之后就啟用新地址繼續與主機通信。這個地址對于設備來說是終生制的,設備在,地址在;設備消失(被拔出,復位,系統重啟),地址被收回。同一個設備當再次被枚舉后得到的地址不一定是上次那個了。

10. 主機獲取設備的信息。

主機發送 Get_Descriptor 請求到新地址讀取設備描述符,這次主機發送 Get_Descriptor 請求可算是誠心,它會認真解析設備描述符的內容。設備描述符內信息包括端點 0 的最大包長度,設備所支持的配置( Configuration )個數,設備類型, VID Vendor ID ,由 USB-IF 分配), PID Product ID ,由廠商自己定制)等信息。 Get_Descriptor 請求 (Device type) 和設備描述符(已抹去 VID PID 等信息) 之后主機發送 Get_Descriptor 請求,讀取配置描述符( Configuration Descriptor ),字符串等,逐一了解設備更詳細的信息。事實上,對于配置描述符的標準請求中,有時 wLength 一項會大于實際配置描述符的長度( 9 字節),比如 255 。這樣的效果便是:主機發送了一個 Get_Descriptor_Configuration 的請求,設備會把接口描述符,端點描述符等后續描述符一并回給主機,主機則根據描述符頭部的標志判斷送上來的具體是何種描述符。

11. 主機給設備掛載驅動(復合設備除外)。

主機通過解析描述符后對設備有了足夠的了解,會選擇一個最合適的驅動給設備。在驅動的選擇過程中, Windows 系統會和系統 inf 文件里的廠商 ID ,產品 ID ,有時甚至用到設備返回來的產品版本號進行匹配。如果沒有匹配的選項, Windows 會根據設備返回來的類,子類,協議值信息選擇。如果該設備以前在系統上成功枚舉過,操作系統會根據以前記錄的登記信息而非 inf 文件掛載驅動。當操作系統給設備指定了驅動之后,就由驅動來負責對設備的訪問。對于復合設備,通常應該是不同的接口( Interface )配置給不同的驅動,因此,需要等到當設備被配置并把接口使能后才可以把驅動掛載上去。

設備 - 配置 - 接口 - 端點關系見下圖:

Windows下usb接口驅動技術(一)

實際情況沒有上述關系復雜。一般來說,一個設備就一個配置,一個接口,如果設備是多功能符合設備,則有多個接口。端點一般都有好幾個,比如 Mass Storage 設備一般就有兩個端點(控制端點 0 除外)。

12. 設備驅動選擇一個配置。

驅動(注意,這里是驅動,之后的事情都是有驅動來接管負責與設備的通信)根據前面設備回復的信息,發送 Set_Configuration 請求來正式確定選擇設備的哪個配置( Configuration )作為工作配置(對于大多數設備來說,一般只有一個配置被定義)。至此,設備處于配置狀態,當然,設備也應該使能它的各個接口( Interface )。

對于復合設備,主機會在這個時候根據設備接口信息,給它們掛載驅動。

13. 設備可使用。

至此,步驟完成,設備可用了。

Windows下usb接口驅動技術(一)


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 九九这里只有精品 | 国产 magnet | 国产欧美亚洲精品第一区 | 日韩精品无码一区二区三区 | 国产这里只有精品 | 在线日韩中文字幕 | 波多野结衣av1区2区3区 | 久久精品视频在线播放 | 国产精品伦理一区二区三区 | 亚洲精品免费在线观看 | 狠狠色噜噜狠狠狠8888米奇 | 一级a级毛片 | 五月天天色 | 日韩免费精品一级毛片 | 轻轻操在线观看 | 久久青草国产免费观看 | 久久久不卡国产精品一区二区 | 四虎爱爱 | 在线久操 | 久久99热这里只有精品7 | 欧美黑人猛xxxxbbbb | 国产成人亚洲日本精品 | 在线免费观看亚洲 | 欧美日韩中文视频 | 视频在线一区二区三区 | 亚洲黄色a级片 | 亚洲精品国产suv一区88 | 亚洲一区二区精品 | 欧美亚洲另类视频 | 四虎在线影视在线影库 | 精品久久洲久久久久护士免费 | 国产亚洲午夜精品a一区二区 | 亚洲 欧美 日韩 综合 | 热久久这里只有精品 | 久久久午夜影院 | 国产精品视频第一页 | 最新国产在线视频 | 久久美女免费视频 | 国产娱乐凹凸视觉盛宴在线视频 | 久久国产乱子伦免费精品 | 青青青爽在线视频观看大全 |