USB滑鼠列舉過程深入解析(下)

2021-08-25 20:08:56 字數 2294 閱讀 3201

transfer5

,transfer6

,transfer7

是獲得字串描述符的傳輸過程。transfer5

是為了獲得0

號字串描述符,transfer6

是為了獲得2

號字串描述符,transfer7

是為了獲得1

號字串描述符。

transfer5:

現在來分析transfer5

的setup transaction

的data

包的data

域,80

表示傳輸方向從device

到host

,06表示請求為get_descriptor

,03表示描述符的型別為string

,由於不知道描述符的長度是多少所以用了長度256

位元組。transaction24

的data

包中0x04

表示0號描述符的長度為4

個位元組,0x03

表示的是描述符的型別,即string

,0x0409

表示的是language id

,transaction25

乙個狀態階段結束了對0

號描述符的獲取。

transfer6:

transfer6

作用是獲取2

號描述符,80

表示傳輸方向從device

到host

,06表示請求為get_descriptor

,usb spec table 9-2 format of setup data

中,wvalue

由兩部分組成,wvalue

的高位位元組表示描述符的型別,低位位元組表示描述符的序號。所以03

表示string

,02表示index

為2的字串描述符。windex

對應字串描述符應該設定使用的語言id

,所以這裡為0x0409

,就是在transfer5

中獲得的那個。然後是0xff

,因為不知道描述符的長度所以用256

位元組。transaction27

,28,29

,30,31

的作用就是device

向host

傳送字串描述符。如下兩張圖,0

號字串描述符和其他非0

號的字串描述符的格式是不一樣的。0

號描述符包括了裝置所支援的所有語言的id。

號的字串描述符的第乙個位元組和第二個位元組分別表示這個描述符的長度和描述符的型別。transaction27

的data

包的data

域的第乙個位元組為0x24

,十進位制36

,所以index

為2的描述符長度是36

個位元組,大家可以數一下,從transaction27

~transaction31

中一共有36

個位元組的。

transfer7:

同理,transfer7

獲得了index

為1的字串描述符。

transfer8:

transfer8

主要的作用是設定配置,使usb

從address

狀態進入configured

狀態。00

表示從host

到device

,09表示set_configuration

,在address

時bconfigurationvalue

的值為0

,所以這裡設為大於0

,則usb

進入configured

狀態,如果set_configuration

傳得引數是0

則仍然是address

狀態。這裡為01。

transfer9:

transfer9

好像也沒乾成什麼事,這個廢物,哈哈。

transfer10

是獲得hid

描述符。

transfer11,12

是列舉成功後,兩次host

與device

之間傳輸資料。這裡只截了部分圖。host

每個binterval

這麼多時間就對device

查詢一下,看有沒有資料要傳,比如有沒有鍵子被按下。每次都是,host

向device

傳送乙個in

令牌包,如果沒有資料,device

就回乙個nak。

transfer11:

transfer12:

USB列舉過程詳述

本系統中所謂usb裝置與主機是通過檢測vcc上拉電阻的變化來確定是否有裝置連線的。在d12內部整合了1.5k 的上拉電阻,預設狀態下不與vcc相連,程式執行時可以向d12傳送連線命令使1.5k 電阻連線到vcc,這樣主機便檢測到有裝置連線。它的列舉過程分析如下。裝置連線到匯流排後,裝置從匯流排獲得5...

USB裝置列舉過程

當裝置連線到主機時,按照以下順序進行列舉 1.連線了裝置的hub 在host 查詢其狀態改變端點時返回對應的bitmap,告知host 某個port 狀態發生了改變。2.主機向hub 查詢該port 的狀態,得知有裝置連線,並知道了該裝置的基本特性。3.主機等待 至少100ms 裝置上電穩定,然後向...

USB列舉過程(1)

總的過程 host檢測到device,reset 獲取裝置描述符 host發獲取裝置描述符請求 setup data0 divice返回裝置描述符 in ack host說明已獲取裝置描述符 out data0空資料 lsb先發 對裝置reset,開始設定新位址 新位址 out data0 new ...