DIY—當 PC 識別 USB 設備時會發生什麼?

薛定諤d家肥貓 發佈 2022-05-21T22:33:04.177934+00:00

本文將介紹當 USB 設備連接到PC 上標準的 USB 埠時,PC 上到底發生了什麼。連接戴爾製造的鍵盤。 示波器用於分析通信內容。當 PC 檢測到設備時,它會首先檢測設備是低速還是高速設備。從示波器來看,低速設備的「D-」為高電平,高速設備的「D+」為高電平。

本文將介紹當 USB 設備連接到PC 上標準的 USB 埠時,PC 上到底發生了什麼。

連接戴爾製造的鍵盤。 示波器用於分析通信內容。

當 PC 檢測到設備時,它會首先檢測設備是低速還是高速設備。

從示波器來看,低速設備的「D-」為高電平,高速設備的「D+」為高電平。 然後,PC 重置識別後,它將開始與設備通信。

首次連接設備時,設備會向 PC 發送設置數據包。 由於在此階段未將目標 ID 地址分配給設備,因此目標 ID 地址和終結點都顯示為 0。 設置使用此 0 的地址完成,然後發送數據。

後續設置數據將根據每個設備的特定格式進行標識。 此數據包為「00 05 0C 00 00 00 00 00 00」。 以十六進位表示。

第一個字節表示請求類型。

對於這次連接的鍵盤, bmRequestType 為「00」 , 因此二進位表示法為00000000 。 再按D7 、 D6 · D5 、 D4 ~ D0和位進行分組 , 將其改成十進位數 。 D7 是 0,因為 D7 是 0「從 PC 作為主機發送到設備」,因為 D6D5 也是 0「是標準請求」,因為 D4 到 D0 也是 0,「收件人是設備」您可以看到它指向。

下一個字節 (05) 表示它是特定請求。 確認後,您將看到「參見表 9-3」。

由於 bRequest 的值是「05」,因此您可以看到內容是「SET_ADDRESS」。

然後,檢查請求指示的「w 值」、「wINdex」和「wLength」值。

w 值、w 索引和 w 長度都是兩個字節。

從示波器的角度來看,wValue 是「0C 00」,wINdex 和 wLength 是「00 00」。

這三個都有特定的請求,所以讓我們來看看。 w 值表示設備地址。

由於 wValue 是「0C 00」,它們在轉換時排序,因此它們實際上表示「000C」,即「設備地址」是「C」。

wINdex 和 wLength 是「零」在這種情況下。

嘗試在電腦上運行lsusb命令。 將顯示所有 USB 設備,但您可以看到檢測到「12(十六進位 C)」設備。 剛剛連接的戴爾鍵盤似乎在示波器中檢測到良好。

設置命令分配 C 0C,終結點為指定 0。

當然,也有數據包從USB鍵盤發送到您的計算機。

USB 設備向 PC 發送數據包後,從 PC 返回給設備的請求為「6」。

「6」是「GET_DESCRIPTOR」,這意味著 PC 請求設備的描述符。 當計算機中的設備識別 USB 設備時,它不知道它是什麼。 可能是滑鼠,也可能是硬碟驅動器。 因此,PC 要求設備描述其內容。

接下來的數字是「10 01」。 這表示連接的設備是 USB 1.1。

它還標識製造商和產品的序列號。

關鍵字: