Bus Hound抓包分析,USB設備識別為HID(轉)
Device:17.0 —— 表示ID為17的設備的0號端點
Phase:階段列
Cmd.phase.ofs:命令數.階段數.每個階段中字節的偏移量
CTL:表示8字節的USB控制傳輸的Setup包
bmRequestType —— 80:數據方向從USB到PC;標準的請求;USB設備接收
bRequest —— 06:表示接下來發送的數據時GET_DESCRIPTOR(主控器讀取USB描述符)
wValue —— 00 01:從偏移地址0開始讀取設備描述符
wIndex —— 00 00:一般用於說明端點號或者接口標識
wLength —— 12 00:下一階段發送數據的長度為18個字節(小端格式理解)
First 【IN】:數據傳輸(USB設備到PC)
bLength —— 12:數據字節長度為18
bDescriptorType —— 01:設備描述符
bcdUSB —— 00 02:USB設備2.0協議
bDeviceClass —— ef:USB_DEVICE_CLASS_MISCELLANEOUS(雜項)
bDeviceSubClass —— 02
bDeviceProtocol —— 01
bMaxPacketSize0 —— 40:最大包長64個字節
idVendor —— 1Fc9
idProduct —— 100B
bcdDevice —— 0100
iManufacturer —— 01
iProduct —— 02
iSerialNumber —— 03
bNumConfigurations —— 01
Second 【IN】
bLength —— 09:該描述符結構體的大小為9個字節
bDescriptorType ——02:配置描述符
wTotalLength ——29 00:配置返回的所有數據大小為41個字節(其實是指明下一次傳輸的數據字節大小)
bNumInterfaces ——01:此配置的接口數量
bConfigurationValue ——01:此配置所需要的參數值
iConfiguration ——00:描述該配置的字符串的索引值
bmAttributes ——C0:供電模式的選擇USB_CONFIG_SELF_POWERED(自供電)
bMaxPower ——32:設備從總線提取的最大的電流100mA
Third 【IN】(前面數據和第二個IN一樣,從32後開始分析)
bLength —— 09:接口描述符結構體大小
bDescriptorType —— 04:USB_INTERFACE_DESCRIPTOR_TYPE
bInterfaceNumber —— 01:該接口的編號
bAlternateSetting —— 00:備用的接口描述符編號
bNumEndpoints —— 02:該接口使用的端點數,不包括端點0
bInterfaceClass —— 03:接口類型為USB_DEVICE_CLASS_HUMAN_INTERFACE(HID)
bInterfaceSubClass —— 00:接口子類型
bInterfaceProtocol —— 00:接口遵循的協議
iInterface —— 04:描述該接口的字符串索引值
HID Class Descriptor
bLength ——09:該HID描述符的大小
bDescriptorType —— 21:HID_HID_DESCRIPTOR_TYPE
bcdHID —— 00 01:HID類協議版本號,為1.1
bCountryCode —— 00:固件的國家地區代碼
bNumDescriptors —— 01:下級描述符的個數
bDescriptorType —— 22:下級描述符為HID_REPORT_DESCRIPTOR_TYPE(報告描述符)
wDescriptorLength —— 2C 00:下級描述符的長度
Endpoint HID Interrupt In
bLength —— 07
bDescriptorType —— 05:端點描述符
bEndpointAddress —— 84:HID_EP_IN Address
bmAttributes —— 03:USB_ENDPOINT_TYPE_INTERRUPT
wMaxPacketSize —— 04
bInterval —— 00 20:間隔為16ms
Endpoint HID Interrupt Out
bLength —— 07
bDescriptorType —— 05:端點描述符
bEndpointAddress —— 04:HID_EP_OUT Address
bmAttributes —— 03:USB_ENDPOINT_TYPE_INTERRUPT
wMaxPacketSize —— 04
bInterval —— 00 20:間隔為16ms
CTL:表示8字節的USB控制傳輸的Setup包
bmRequestType —— 00:數據方向從PC到USB;標準的請求;USB設備接收
bRequest —— 09:表示接下來的請求是SET_CONFIGURATION (設置配置)
wValue —— 00 01:從偏移地址0開始讀取設備描述符
wIndex —— 00 00:一般用於說明端點號或者接口標識
wLength —— 00 00
CTL:表示8字節的USB控制傳輸的Setup包
bmRequestType —— 21:數據方向從PC到USB;Class類的請求;接口接收
bRequest —— 0a:表示接下來的請求是GET_INTERFACE (獲取接口)
wValue —— 00 00:從偏移地址0開始讀取設備描述符
wIndex —— 01 00:接口標識為01
wLength —— 00 00
CTL:表示8字節的USB控制傳輸的Setup包
bmRequestType —— 81:數據方向從USB到PC;標準請求;接口接收
bRequest —— 06:表示接下來的請求是獲取描述符
wValue —— 00 22:從偏移地址00 22開始讀取描述符
wIndex —— 01 00:接口標識為01
wLength —— 6C 00:數據長度為108個字節
Fourth 【IN】——HID Report Descriptor
具體參考usbdesc.c內的設置
分析整個通信過程則可知其傳輸事務過程如下:
1、Setup事務,傳輸Setup數據格式包,告訴設備接下要獲取USB描述符,但不知道描述符的類型,並指明了接下來的數據傳輸方向和傳輸的數據大小
2、IN傳輸事務,表示設備傳輸數據到PC,傳輸中指明了這次傳輸的數據大小,類型是設備描述符以及其他相關的設備信息
3、Setup事務,改變了讀取描述符的偏移地址和傳輸數據的大小
4、N傳輸事務,但描述符類型是配置描述符,指明了接口數量、供電模式、最大電流等參數
5、Setup事務,再次獲取配置描述符,僅僅改變了獲取的傳輸數據的大小為41個字節,即下一次準備接收41個字節
6、IN事務,返回配置描述符時連並接口、端點描述符都一起返回,向PC指明了這是個HID接口以及其使用的端點數
7、Setup事務,設置配置
8、Setup事務,設置接口閑置狀態
9、Setup事務,獲取描述符
10、IN事務,設備發送HID報告描述符給PC
---------------------
作者:yhl_sophia
來源:CSDN
原文:https://blog.csdn.net/yhl_sophia/article/details/81875382
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!
Bus Hound抓包分析,USB設備識別為HID(轉)