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

Windows下usb接口驅(qū)動(dòng)技術(shù)(一)

系統(tǒng) 2429 0

Windows usb 接口芯片的驅(qū)動(dòng)技術(shù)

一、 USB 概述

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

二、 USB 的總線結(jié)構(gòu)

Windows下usb接口驅(qū)動(dòng)技術(shù)(一)

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

Windows下usb接口驅(qū)動(dòng)技術(shù)(一)

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

三、 USB 結(jié)構(gòu)與工作原理

一個(gè) USB 系統(tǒng)可以從三個(gè)方面加以描述:

(1)USB 互聯(lián)。

(2)USB 設(shè)備。

(3)USB 主機(jī)。

USB 互聯(lián)是指一個(gè) USB 設(shè)備與 USB 主機(jī)相聯(lián)并和其通信的方式 , 它包括:

(1) 總線拓?fù)浣Y(jié)構(gòu): USB 主機(jī)和 USB 設(shè)備的連接模型。

(2) 層間關(guān)系: USB 在系統(tǒng)中的每一層都要完成一定的任務(wù)。

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

(4) 任務(wù)規(guī)劃: USB 提供可以共享的互聯(lián)機(jī)制。通過規(guī)劃對(duì)互連機(jī)制的訪問,可以支持同步數(shù)據(jù)傳輸。

四、 USB 硬件結(jié)構(gòu)

一個(gè) USB 系統(tǒng)包含三類硬件設(shè)備 : USB 主機(jī) (USB HOST) USB 設(shè)備 (USB DEVICE) USB 集線器 (USB HUB)

(1)USB HOST

在一個(gè) USB 系統(tǒng)中,當(dāng)且僅當(dāng)有一個(gè) USB HOST 時(shí), USB HOST 有以下功能 :

? 管理 USB 系統(tǒng) ;

? 每毫秒產(chǎn)生一幀數(shù)據(jù) ;

? 發(fā)送配置請(qǐng)求對(duì) USB 設(shè)備進(jìn)行配置操作 ;

? 對(duì)總線上的錯(cuò)誤進(jìn)行管理和恢復(fù)。

(2)USB DEVICE

在一個(gè) USB 系統(tǒng)中, USB DEVICE USB HUB 總數(shù)不能超過 127 個(gè)。 USB DEVICE 接收 USB 總線上的所有數(shù)據(jù)包,通過數(shù)據(jù)包的地址域來判斷是不是發(fā)給自己的數(shù)據(jù)包:若地址不符,則簡(jiǎn)單地丟棄該數(shù)據(jù)包 ; 若地址相符,則通過響應(yīng) USB HOST 的數(shù)據(jù)包與 USB HOST 進(jìn)行數(shù)據(jù)傳輸。

(3)USB HUB

USB HUB 用于設(shè)備擴(kuò)展連接,所有 USB DEVICE 都連接在 USB HUB 的端口上。一個(gè) USB HOST 總與一個(gè)根 HUB (USB ROOT HUB) 相連。 USB HUB 為其每個(gè)端口提供 100mA 電流供設(shè)備使用。同時(shí), USB HUB 可以通過端口的電氣變化診斷出設(shè)備的插拔操作,并通過響應(yīng) USB HOST 的數(shù)據(jù)包把端口狀態(tài)匯報(bào)給 USB HOST 。一般來說, USB 設(shè)備與 USB HUB 間的連線長(zhǎng)度不超過 5m USB 系統(tǒng)的級(jí)聯(lián)不能超過 6 級(jí) ( 包括 ROOT HUB)

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

五、 USB 的數(shù)據(jù)流

主控制器負(fù)責(zé)主機(jī)和 USB 設(shè)備間數(shù)據(jù)流的傳輸。這些傳輸數(shù)據(jù)被當(dāng)作連續(xù)的比特流。每個(gè)設(shè)備提供了一個(gè)或多個(gè)可以與客戶程序通信的接口,每個(gè)接口由 0 個(gè)或多個(gè)管道組成,它們分別獨(dú)立地在客戶程序和設(shè)備的特定終端間傳輸數(shù)據(jù)。 USBD 為主機(jī)軟件的現(xiàn)實(shí)需求建立了接口和管道,當(dāng)提出配置請(qǐng)求時(shí),主控制器根據(jù)主機(jī)軟件提供的參數(shù)提供服務(wù)。

USB 支持四種基本的數(shù)據(jù)傳輸模式:控制傳輸,等時(shí)傳輸,中斷傳輸及數(shù)據(jù)塊傳輸。每種傳輸模式應(yīng)用到具有相同名字的終端,則具有不同的性質(zhì)。

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

中斷傳輸類型:支持像游戲手柄,鼠標(biāo)和鍵盤等輸入設(shè)備,這些設(shè)備與主機(jī)間數(shù)據(jù)傳輸量小,無周期性,但對(duì)響應(yīng)時(shí)間敏感,要求馬上響應(yīng)。

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

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

六、 USB 外設(shè)控制器的兩種實(shí)現(xiàn)方式

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

集成 MCU USB 控制芯片優(yōu)點(diǎn)是 CPU 與控制器在同一片芯片里, CPU 只需要訪問一系列寄存器和存儲(chǔ)器,便可實(shí)現(xiàn) USB 口的數(shù)據(jù)傳輸,最大限度的發(fā)揮 USB 高速的特點(diǎn)。而且簡(jiǎn)化了程序的設(shè)計(jì),極大地降低了 USB 外設(shè)的開發(fā)難度。缺點(diǎn)是靈活性不夠高,開發(fā)成本較大。

純粹的 USB 接口芯片的優(yōu)點(diǎn)是系統(tǒng)組成靈活,可根據(jù)不同的系統(tǒng)需求,搭配不同的 MCU ,具有較高的性能價(jià)格比。但因?yàn)? USB 控制器是通過串行口或并行口與 MCU 連接,在傳輸速度方面和開發(fā)難度方面不如集成了 MCU 的控制芯片。

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

七、 USB 設(shè)備的枚舉過程

USB 架構(gòu)中, hub 負(fù)責(zé)檢測(cè)設(shè)備的連接和斷開,利用其中斷 IN 端點(diǎn) (Interrupt IN Endpoint) 來向主機(jī)( Host )報(bào)告。在系統(tǒng)啟動(dòng)時(shí),主機(jī)輪詢它的根 hub Root Hub )的狀態(tài)看是否有設(shè)備(包括子 hub 和子 hub 上的設(shè)備)連接。

Windows下usb接口驅(qū)動(dòng)技術(shù)(一)

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

當(dāng)枚舉完成后,這個(gè)新添加的設(shè)備可在 Windows 的設(shè)備管理器里面看到,當(dāng)用戶刪除這個(gè)設(shè)備 / 硬件時(shí),系統(tǒng)把這個(gè)設(shè)備從設(shè)備管理器里刪除。

對(duì)于一般的設(shè)備,固件( Firmware )內(nèi)包含主機(jī)所要請(qǐng)求的信息,而有些設(shè)備則是完全由硬件來負(fù)責(zé)響應(yīng)主機(jī)的請(qǐng)求。在主機(jī)方面則是由操作系統(tǒng)而非應(yīng)用程序負(fù)責(zé)處理相關(guān)枚舉操作。

枚舉步驟

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

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

下面步驟是 Windows 系統(tǒng)下典型的枚舉過程,但是固件不能依此就認(rèn)為所有的枚舉操作都是按照這樣一個(gè)流程行進(jìn)。設(shè)備必須在任何時(shí)候都能正確處理所有的主機(jī)請(qǐng)求。

1. 用戶把 USB 設(shè)備插入 USB 端口或給系統(tǒng)啟動(dòng)時(shí)設(shè)備上電。

這里指的 USB 端口指的是主機(jī)下的根 hub 或主機(jī)下行端口上的 hub 端口。 Hub 給端口供電,連接著的設(shè)備處于上電狀態(tài)。

2.Hub 監(jiān)測(cè)它各個(gè)端口數(shù)據(jù)線上 (D+/D-) 的電壓

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

Windows下usb接口驅(qū)動(dòng)技術(shù)(一)

檢測(cè)到設(shè)備后, hub 繼續(xù)給設(shè)備供電,但并不急于與設(shè)備進(jìn)行 USB 傳輸。

3. Host 了解連接的設(shè)備。

每個(gè) hub 利用它自己的中斷端點(diǎn)向主機(jī)報(bào)告它的各個(gè)端口的狀態(tài)(對(duì)于這個(gè)過程,設(shè)備是看不到的,也不必關(guān)心),報(bào)告的內(nèi)容只是 hub 端口的設(shè)備連接/斷開的事件。如果有連接/斷開事件發(fā)生,那么 host 會(huì)發(fā)送一個(gè) Get_Port_Status 請(qǐng)求 (request) 以了解更多 hub 上的信息。 Get_Port_Status 等請(qǐng)求屬于所有 hub 都要求支持的 hub 類標(biāo)準(zhǔn)請(qǐng)求( standard hub-classrequests )。

4.Hub 檢測(cè)所插入的設(shè)備是高速還是低速設(shè)備。

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

5.hub 復(fù)位設(shè)備。

當(dāng)主機(jī)獲悉一個(gè)新的設(shè)備后,主機(jī)控制器就向 hub 發(fā)出一個(gè) Set_Port_Feature 請(qǐng)求讓 hub 復(fù)位其管理的端口。 hub 通過驅(qū)動(dòng)數(shù)據(jù)線到復(fù)位狀態(tài) (D+ D- 全為低電平 ) ,并持續(xù)至少 10ms 。當(dāng)然, hub 不會(huì)把這樣的復(fù)位信號(hào)發(fā)送給其他已有設(shè)備連接的端口,所以其他連在該 hub 上的設(shè)備自然看不到復(fù)位信號(hào),不受影響。

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

因?yàn)楦鶕?jù) USB 2.0 協(xié)議,高速( High Speed )設(shè)備在初始時(shí)是默認(rèn)全速( Full Speed )狀態(tài)運(yùn)行,所以對(duì)于一個(gè)支持 USB 2.0 的高速 hub ,當(dāng)它發(fā)現(xiàn)它的端口連接的是一個(gè)全速設(shè)備時(shí),會(huì)進(jìn)行高速檢測(cè),看看目前這個(gè)設(shè)備是否還支持高速傳輸,如果是,那就切到高速信號(hào)模式,否則就一直在全速狀態(tài)下工作。

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

7. Hub 建立設(shè)備和主機(jī)之間的信息通道。

主機(jī)不停得向 hub 發(fā)送 Get_Port_Status 請(qǐng)求,以查詢?cè)O(shè)備是否復(fù)位成功。 Hub 返回的報(bào)告信息中有專門的一位用來標(biāo)志設(shè)備的復(fù)位狀態(tài)。

當(dāng) hub 撤銷了復(fù)位信號(hào),設(shè)備就處于默認(rèn)/空閑狀態(tài)( Default state ),準(zhǔn)備著主機(jī)發(fā)來的請(qǐng)求。設(shè)備和主機(jī)之間的通信通過控制傳輸,默認(rèn)地址 0 ,端點(diǎn)號(hào) 0 進(jìn)行。在此時(shí),設(shè)備能從總線上得到的最大電流是 100mA

8. 主機(jī)發(fā)送 Get_Descriptor 請(qǐng)求獲取默認(rèn)管道的最大包長(zhǎng)度。

默認(rèn)管道( Default Pipe )在設(shè)備一端來看就是端點(diǎn) 0 。主機(jī)此時(shí)發(fā)送的請(qǐng)求是默認(rèn)地址 0 ,端點(diǎn) 0 ,雖然所有位分配地址的設(shè)備都是通過地址 0 來獲取主機(jī)發(fā)來的信息,但由于枚舉過程不是多個(gè)設(shè)備并行處理,而是一次枚舉一個(gè)設(shè)備的方式進(jìn)行,所以不會(huì)發(fā)生多個(gè)設(shè)備同時(shí)響應(yīng)主機(jī)發(fā)來的請(qǐng)求。

設(shè)備描述符的第 8 字節(jié)代表設(shè)備端點(diǎn) 0 的最大包大小。對(duì)于 Windows 系統(tǒng)來說, Get_Descriptor 請(qǐng)求中的 wLength 一項(xiàng)都會(huì)設(shè)為 64 ,雖然說設(shè)備所返回的設(shè)備描述符( Device Descriptor )長(zhǎng)度只有 18 字節(jié),但系統(tǒng)也不在乎,此時(shí),描述符的長(zhǎng)度信息對(duì)它來說是最重要的,其他的瞄一眼就過了。 Windows 系統(tǒng)還有個(gè)怪癖,當(dāng)完成第一次的控制傳輸后,也就是完成控制傳輸?shù)臓顟B(tài)階段,系統(tǒng)會(huì)要求 hub 對(duì)設(shè)備進(jìn)行再一次的復(fù)位操作( USB 規(guī)范里面可沒這要求)。再次復(fù)位的目的是使設(shè)備進(jìn)入一個(gè)確定的狀態(tài)。

9. 主機(jī)給設(shè)備分配一個(gè)地址。

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

10. 主機(jī)獲取設(shè)備的信息。

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

11. 主機(jī)給設(shè)備掛載驅(qū)動(dòng)(復(fù)合設(shè)備除外)。

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

設(shè)備 - 配置 - 接口 - 端點(diǎn)關(guān)系見下圖:

Windows下usb接口驅(qū)動(dòng)技術(shù)(一)

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

12. 設(shè)備驅(qū)動(dòng)選擇一個(gè)配置。

驅(qū)動(dòng)(注意,這里是驅(qū)動(dòng),之后的事情都是有驅(qū)動(dòng)來接管負(fù)責(zé)與設(shè)備的通信)根據(jù)前面設(shè)備回復(fù)的信息,發(fā)送 Set_Configuration 請(qǐng)求來正式確定選擇設(shè)備的哪個(gè)配置( Configuration )作為工作配置(對(duì)于大多數(shù)設(shè)備來說,一般只有一個(gè)配置被定義)。至此,設(shè)備處于配置狀態(tài),當(dāng)然,設(shè)備也應(yīng)該使能它的各個(gè)接口( Interface )。

對(duì)于復(fù)合設(shè)備,主機(jī)會(huì)在這個(gè)時(shí)候根據(jù)設(shè)備接口信息,給它們掛載驅(qū)動(dòng)。

13. 設(shè)備可使用。

至此,步驟完成,設(shè)備可用了。

Windows下usb接口驅(qū)動(dòng)技術(shù)(一)


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

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

【本文對(duì)您有幫助就好】

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

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 亚洲人成网站999久久久综合 | 玖玖影院在线观看 | 国产一区二区三区四区在线 | 国产女主播在线 | 91啦视频在线观看 | 香蕉tv亚洲专区在线观看 | 97高清国语自产拍 | va亚洲va日韩不卡在线观看 | 欧美成人午夜做爰视频在线观看 | 亚洲国产日韩在线一区 | 操亚洲| 青青草a免费线观a | 国产精品成人观看视频国产奇米 | 久久国产香蕉视频 | 黄页免费观看1 | 成人免费视频一区 | 国产女人成人精品视频 | 国产一区在线观看免费 | 欧美91 | 嘿嘿嘿视频免费网站在线观看 | 福利视频999 | 免费视频精品一区二区 | 玖玖草在线观看 | 成人性一级视频在线观看 | 亚洲午夜久久影院 | 国产精品在线 | 中文字幕一区二区三区免费看 | 欧美中文综合在线视频 | 九天玄帝诀免费完整观看 | 99精品久久久久中文字幕 | 国产精品久久久久国产精品 | 国产亚洲精品在天天在线麻豆 | 中文字幕精品视频在线观 | 久久99热精品这里久久精品 | 红色一级毛片 | 四虎国产永久免费久久 | 国产成人精品免费视频大全五级 | 国产精品无码久久综合网 | 久久中文字幕在线 | 伊人黄网 | 四虎高清在线精品免费观看 |