列舉過程的詳細介紹
1、usb 主機檢測到 usb 裝置插入後,就會先對裝置復位。usb 裝置在匯流排復位後其位址為 0 ,這樣主機就可以通過位址 0 和那些剛剛插入的裝置通訊。
2、usb 主機往位址為 0 的裝置的端點 0 傳送獲取裝置描述符的標準請求(這是乙個控制傳輸的建立過程)。裝置收到該請求後,會按照主機請求的引數,在資料過程將裝置描述符返回給主機。主機在成功獲取到乙個資料報的裝置描述符並且確認沒有錯誤後,就會返回乙個 0 長度的確認資料報(狀態過程)給裝置。(注意:第一次主機只會讀取乙個資料報的裝置描述符。標準的裝置描述有 18 位元組,有些 usb 裝置的端點 0 大小不足 18 位元組,但至少具有 8 位元組。在這種情況下,usb 主機也是只傳送一次資料輸入請求,多於的資料將不會再次請求。因此,當裝置端點 0 大小不足 18 位元組時,在第一次獲取裝置描述符時,只需要返回一次資料即可,不要再等主機繼續獲取剩餘資料(如果還有),當主機成功獲取到裝置描述符的前 8 個位元組之後,它就知道端點 0 的最大包長度了,因為端點 0 最大包長度剛好在裝置描述符的第八位元組處)
3、主機對裝置又一次復位。
4、接下來進入位址設定階段。usb 主機往位址為 0 的裝置的端點 0 發出乙個設定位址的請求,新的位址包含在建立過程的資料報中。具體的位址由 usb 主機負責管理,主機會分配乙個唯一的位址給剛接入的裝置。usb 裝置在收到這個建立過程之後,就直接進入到狀態階段,因為這個控制傳輸沒有資料過程。裝置等待主機請求狀態返回,收到輸入令牌包後,裝置就返回 0 長度的狀態資料報。如果主機確認該狀態包已經正確收到,就會傳送應答包 ack 給裝置,裝置在收到這個 ack 之後,就要啟動新的裝置位址了。這樣裝置就分配到了乙個唯一的裝置位址,以後主機就通過它來訪問該裝置。
5、主機再次獲取裝置描述符。這次主機是真心實意的獲取了,首先主機不再使用位址 0 來訪問裝置,而是新的裝置位址,另外,這次需要獲取全部的 18 位元組的裝置描述符。如果你的端點 0 最大包長小於 18 位元組,那麼就會由多次請求資料輸入
6、主機獲取配置描述符。配置描述符總共為 9 位元組。
7、主機在獲取到配置描述符後,根據配置描述符中所描述符的配置集合總長度,獲取配置集合。獲取配置描述符和獲取配置描述符集合的請求是差不多的,只是指定的長度不一樣。有些主機乾脆不單獨獲取配置描述符,而是直接使用最大長度來獲取配置描述符集合,因為裝置實際返回的資料可以少於指定的位元組數。配置集合包括:配置描述符,介面描述符,類特殊描述符(如果有),端點描述符等。介面描述符,類特殊描述符,端點描述符是不能單獨獲取的,必須跟隨配置描述符以乙個集合的方式一併返回。
8、如果有字串描述符,還要獲取字串描述符。
9、另外,像 hid 裝置還有報告描述符等,它們是單獨獲取的。
以上內容來自 《圈圈教你玩 usb》 的學習筆記
《圈圈教你玩 USB》學習筆記 令牌包
令牌包用來啟動一次 usb 傳輸。因為 usb 是主從結構的拓撲結構,所以所有的資料傳輸都是由主機發起的,裝置只能被動地接收資料。這就需要主機傳送乙個令牌來通知哪個裝置進行響應,如何響應。令牌包有 4 種,分別為輸入 in 輸出 out 建立 setup 和幀起始 sof out通知裝置將要輸出資料...
《圈圈教你玩 USB》學習筆記 特殊包
特殊包是一些在特殊場合使用的包。總共有 4 中 pre,err,split 和 ping。pre前導 令牌包 err錯誤 握手包 split 事務 令牌包 ping ping 測試 令牌包 1 pre 是通知集線器開啟其低速埠的一種前導包。pre 只使用在 全速模式中。平時,為了防止全速訊號使低速裝...
USB學習 列舉1
一 列舉過程 獲取裝置描述符。該過程只是粗要獲取usb裝置的預設管道最大包長度。在初始化的過程中,usb裝置使能所有的資料完成傳輸中斷。1.主機傳送setup令牌包 80 06 00 01 00 40 00 2.端點0暫存器相對應的setup位置位,表明收到setup令牌包,所傳輸的資料報被sir儲...