USB驅動 USB列舉

2021-07-05 10:52:19 字數 2911 閱讀 2082

一 . 列舉詳細過程

usb主機在檢測到usb裝置插入後,就要對裝置進行列舉了。為什麼要列舉呢?列舉就是主機host從裝置讀取一些資訊,知道裝置是什麼樣的裝置,如何進行通訊,這樣主機就可以根據這些資訊來載入合適的驅動程式。除錯usb裝置,很重要的一點就是usb的列舉過程,只要列舉成功了,那麼就已經成功大半了。

在說列舉之前,先大概說一下usb的一種傳輸模式——控制傳輸。這種傳輸在usb中是非常重要的,它要保證資料的正確性,在裝置的列舉過程中都是使用控制傳輸。控制傳輸分為三個過程:①建立過程。②可選的資料過程。③狀態過程。建立(setup)過程都是由usb主機發起,它開始於乙個setup令牌包,後面緊跟乙個data0包。如果是控制輸入傳輸,那麼資料過程就是輸入資料;如果是控制輸出傳輸,那麼資料過程是輸出資料。如果在設定過程中,指定了資料長度為0,則沒有資料過程。資料過程之後是狀態過程。狀態過程剛好與資料過程的資料傳輸方向相反:如果是控制輸入傳輸,則狀態過程是乙個輸出資料報;如果是控制輸出傳輸,則狀態過程是乙個輸入資料報。狀態階段用來確認所有的資料都已經正確傳輸。

好了,下面我們來看看列舉的詳細過程。

1)首先,usb主機檢測到usb裝置插入後,就會先對裝置復位。裝置復位後,usb主機就會對位址為0的裝置傳送獲取裝置描述符的標準請求。所有的usb裝置在匯流排復位後其位址都為0,這樣主機就可以跟那些剛剛插入的裝置通過位址0通訊。主機在建立階段發出獲取裝置描述符的輸入請求,裝置收到該請求後,在資料過程將裝置描述符返回給主機。主機在成功獲取到乙個資料報的裝置描述符後並且確認沒有什麼錯誤後(注意:有些usb裝置的端點0大小不足18位元組(但至少具有8位元組),而標準的裝置描述有18位元組,在這種情況下,usb裝置只能暫時按最大包將部分裝置描述符返回,而主機在成功獲取到前面一部分描述符後,就不會再請求剩下的裝置描述符部分,而是進入設定位址階段),就會返回乙個0長度的狀態資料報給裝置。

2)然後主機再對裝置復位一下,接下來就會進入到設定位址階段。這時usb主機發出乙個設定位址的請求(建立過程,設定位址無資料過程),位址包含在建立包中,具體的位址usb主機會負責管理,它會分配乙個唯一的位址給新的裝置。usb裝置在收到位址後,返回0長度的狀態包,主機收到0長度的狀態包之後,會返回乙個ack給裝置。裝置在收到這個ack之後,就可以啟用新的位址了。這樣裝置就分配到了乙個唯一的裝置位址,以後主機就通過它來進行訪問該裝置。

3)然後主機再次獲取裝置描述符.這次跟第一次可能有點不一樣,首先是主機不再使用位址0來訪問裝置,而是用新的裝置位址;另外這次需要獲取完全部的18個位元組的裝置描述符。當然,如果你的端點0緩衝大於18位元組的話,那就跟第一次的情形一樣了,如果端點0的最大包長度小於18個位元組,那就會有多次請求資料輸入(即傳送多個in令牌包)。

4)主機就會獲取配置描述符。配置描述符總共為9位元組。主機在獲取到配置描述符後,根據裡面的配置集合總長度,再獲取配置集合。配置集合包括配置描述符,介面描述符,端點描符等等,介面描述符,端點描述符是不能單獨獲取的,必須跟隨配置描述以乙個集合的方式一併返回。

如果有字串描述符的話,還要獲取字串描述符。另外hid裝置還有hid描述符等。使用bushound以及通過串列埠返回資訊,很容易看到具體的過程。總之是主機請求什麼,你的程式就響應什麼。

二 . 列舉大致過程

包有如下分類:

分別是令牌包、資料報、握手包和特殊包(其實是由pid決定的)

令牌包:可分為輸入包、輸出包、設定包和幀起始包(注意這裡的輸入包是用於設定輸入命令的,輸出包是用來設定輸出命令的,而不是放據數的)其中輸入包、輸出包和設定包的格式都是一樣的:

sync+pid+addr+endp+crc5(五位的校驗碼)

幀起始包:

sync+pid+11位fram+crc5(五位的校驗碼)

資料報:分為data0包和data1包,當usb傳送資料的時候,當一次傳送的資料長度大於相應端點的容量時,就需要把資料報分為好幾個包,分批傳送,data0包和data1包交替傳送,即如果第乙個資料報是data0,那第二個資料報就是data1。但也有例外情況,在同步傳輸中(四類傳輸型別中之一),所有的資料報都是為data0,格式如下:

sync+pid+0~1023位元組+crc16

握手包:結構最為簡單的包,格式如下

sync+pid

transfer(傳輸)後的

control :表示的是屬與控制傳輸,這個位置還能是interrupt 中斷傳輸,bulk 批量傳輸,isochronous 等時傳輸

descriptors :描述符

transaction(事務)  後的setup : 表示的是設定事務,還能是 in 和 out

packet 有setup,data,ack等包,注意資料報裡的位數是16進製制的

USB主機列舉USB裝置步驟

usb主機列舉usb裝置步驟 1.usb主機對usb裝置進行復位,復位後usb裝置用端點0來傳輸資料 usb主機向usb裝置傳送獲取裝置描述符指令,usb裝置收到指令後,通過端點0將裝置描述符資訊返回給usb主機,且若端點0中包含完整的18位元組裝置描述符資訊,則將完整的裝置描述符資訊返回給usb主...

USB 裝置 USB 驅動 USB 應用程式

usb 裝置 usb 驅動 usb 應用程式 1.usb 裝置硬體部分 a.這個硬體的標識是用的 vender id 和 product id,即 廠家標識 和 產品標識 b.這個硬體規定了各個 end point 端點 的性質,讀 寫 及 型別 control interrupt bulk iso...

USB驅動初探

調了n久68013,最後還是放棄了,使用stm32的usb 調到驅動,建立驅動環境,win7調驅動總感覺格格不入,在xp下建立開發環境 vc6,xpddk 2600,driverstudio 3.2 先安裝vc6,安裝ddk,最後安裝driverstudio 安裝完後,開啟vc6,設定ddk bui...