Bus Hound數據分析:spa
CTL:表示8字節的USB控制傳輸的Setup包----------------------------重點分析.net
控制傳輸setup(token包)和對應數據包(DATA0)來告訴設備目的和要求,結束以數據流的反方向通知DATA1包.3d
setup包有5個參數,分別是bmRequestType,bRequest,blog
wValue:此字段的內容因請求而異。它用於向設備傳遞特定於請求的參數。索引
wIndex:Windex字段常常用於指定端點或接口的請求。token
wLength:(bm指Bitmap;b指byte;w指word,即double byte.).接口
如下是對設備在Bus Hound捕獲到的數據進行分析:事務
bmRequestType —— 80:數據方向從USB到PC;標準的請求;USB設備接收ip
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內的設置
傳輸事務過程以下:
一、Setup事務,傳輸Setup數據格式包,告訴設備接下要獲取USB描述符,但不知道描述符的類型,並指明瞭接下來的數據傳輸方向和傳輸的數據大小
二、IN傳輸事務,表示設備傳輸數據到PC,傳輸中指明瞭此次傳輸的數據大小,類型是設備描述符以及其餘相關的設備信息
三、Setup事務,改變了讀取描述符的偏移地址和傳輸數據的大小
四、IN傳輸事務,但描述符類型是配置描述符,指明瞭接口數量、供電模式、最大電流等參數
五、Setup事務,再次獲取配置描述符,僅僅改變了獲取的傳輸數據的大小爲41個字節,即下一次準備接收41個字節
六、IN事務,返回配置描述符時連並接口、端點描述符都一塊兒返回,向PC指明瞭這是個HID接口以及其使用的端點數
七、Setup事務,設置配置
八、Setup事務,設置接口閒置狀態
九、Setup事務,獲取描述符
十、IN事務,設備發送HID報告描述符給PC
---------------------
參考博文連接:https://blog.csdn.net/yhl_sophia/article/details/81875382