久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 13283|回復: 1
打印 上一主題 下一主題
收起左側

USB 枚舉的具體過程詳細說明

[復制鏈接]
跳轉到指定樓層
樓主
ID:94349 發表于 2015-11-10 01:40 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
USB的的監控用得較多的是BUSHund,但是這個BUSHound這家伙不能監控USB的枚舉,我們使用USBMonitor就能很好地實現這一過程。

工具:
USB Monitor 2.26
USB 移動硬盤
personal Computer

軟體的安裝:
這個問題難度不大,一般下載完成后,一路解壓縮即可,最后點擊完成,安裝OK!

監控USB的枚舉:
1.啟動安裝好后的USB Monitor,點擊“file”,“new Session”,如圖:

2.在彈出的對話窗口中選擇“下一步”,如圖:


3.在“Monitoring Session Type”對話框中選擇“USB Montitor”,點擊下一步,如圖:


4.在“configurating The USBMonitor”對話框中選擇你需要見識的USB口,如果這是你還沒有將任何USB設備插入主機,將顯示如下界面:


5.將需要監控的USB設備插入主機USB接口,這是將會在某選項的后面多出一些內容,如下圖所示,此處選擇"USB MassStorage".
tips:當我們要監控我們自己開發的設備時,可以瞎弄一個U盤插入其中一個USB接口,在此步中選擇我么能插入的U盤,在實際檢測過程中,將我們開發的USB設備插入這個USB接口即可!


6.在“Configure Data Processing”對話框中選擇“Request View”,并點擊下一步:


7.彈出你的U盤,然后在USB Monitor主界面里點“Edit”->"Clear View",如下圖所示:

8.插入你的U盤,記得徐插在同一USb接口,!此時,USBMonitor會監測到許多數據流,我們切換到Complete標簽,如圖:


以下是USB 設備枚舉的分析過程:
通過以上操作以后,我們可以對USB Monitor監測到的數據進行分析了,如下:
1.按“CTRL+F”,查找第一個“Descriptor Request”,從此處開始是對我們有用的信息:如圖:


2.對USB Monitor 現實的數據進行分析:

①序列號,可理解為一個上行或者下行數據流標號,無實際意義
②命令類型,括號里的“Down”代表輸出數據,即主機到設備
③命令數據流,出現“Setup Pocket”后面,十六進制
④對命令數據的簡單分析
⑤傳輸類型,括號里的“Up”代表輸入數據,及設備到主機
⑥設備返回的數據流,十六進制
⑦對命令(請求)數據的詳略分析(其中對“Request”的分析應該有BUG,0X6應為Get_Descriptor,而USb Monitor 解釋為Get_Configuration)

以上沒有看到對上行數據(數據返回的數據)的分析,我們只要將鼠標停留在設備返回數據流出(上圖⑥),就會彈出對上行數據的分析畫面,如圖:


3.枚舉過程分析
a.主機第一次發出請求描述符命令,數據流為:
80 06 00 02 00 00 0900    bRequest的值為0X06,代表Get_Descriptor命令
但為什么描述符呢?
wValue的高字節表示了描述符的類型,
此處的wValue值為0X0100,所以高字節為0X01,代表設備描述符!!
設備返回的數據為:12 01 00 02 00 00 00 40 51 09 0E16 00 02 01 02 0301   
bLength的值為0X12,表示此描述符的長度
bDescriptorType的值為0X01,代表設備描述符
bcdUSb的值為0X0200,代表USB協議的版本號,此處2.0版,入股歐威0X0110則表示1.1版
bDeviceClass和bDeviceSubClass讀為0,表示設別類別有接口描述符指定,
bDeviceProtoco值為0,但并不代表它不支持USb定義的標準設備類協議,因為此時可有接口描述符指明設備支持的協議
bMaxPocketsize0的值為0X40,表示端點0的數據包最大長度為64字節
iManufacturer、iProduct和iSeriousNumber的值分別為0X01、0X02和0X03,表示字符串索引在主機讀取字符串的命令中,將以這幾個值來填充wIndex字段


b.主機再次發出請求描述符指令,數據流為:
80 06 00 02 00 00 09 00
wValue的高字節為0x02表示配置描述符,表示請求配置描述符
wLength的值為0x0009,表示要求返回的數據長度為9個字節。
這次
設備返回的數據只有9個字節:
09 02 20 00 01 01 00 80 32
第一位數為
bLeng域,其值為0x09,代表此描述符的長度。
bDecriptorType的值為0x02,表示配置描述符。
wTotalLength的值為0x0020,表示包括此配置描述符、接口描述符、端點描述符和設備類及廠商定義的描述符的總長為32個字節。
bNumInterfaces的值為0x01,表示該配置支持1個接口。
MaxPower的值為0x32,表示總線耗電量為50×2=100mA


c.機第一次請求設備的配置描述符后得知包括:
配置描述符、接口描述符、端點描述符等在內的描述總長為
32個字節后
這此主機再次發出請求配置描述指令,這次命
令與上一個命令只有wLength字段的值不一樣:
這次
wLength的值為0x20,表示要求設備返回32個字節,正好和上次命令中設備返回的wTotalLength信息一致。設備返回的數據流為如下圖所示,


USB Monitor已經將配置描述符、接口描述符、和端點描述符用不同的背景色區分開來,鼠標停留在不同的區域將彈出對此描述符的具體分析。
第一個描述符的數
據為:09 02 20 00 01 01 00 8032
和上一次請求配置描述符得到的數據一模一樣,這里不再分析。
第二個描述符的數據為:
09 04 00 00 02 0806 50 00
bLength0x09表示此描述符為9個字節
bDescriptorType的值為0x04表示接口描述
bInterfaceNumber0x00表示此配置接口的索引值。
bNumEndpoint的值為0x02表示此接口端點數為兩個。
bInterfaceClass的值為0x08表示大數據存儲類
bInterfaceSubClass的值為0x06,其含義因bInterfaceClass的不同而不同,
由于此處
bInterfaceClass的值指定了此設備屬大數據存儲類,
所以需要查看大數據存儲類
(Mass storageclass device)相關協議標準,經查詢得知:
bInterfaceSubClass0x06時代表傳輸協議工業標準為SCSI
bInterfaceProtocol的值為0x50
大數據存儲類協議規定其含義為通訊方式為批量傳輸
(Bulk-only)


d.請求完配置描述符后,主機發出請求字符串描述符指令。
請求字符描述符分兩大步,每大步又分兩小步,
兩大步為:
先請求字符串描述符語言
ID(此時wIndex的值設為零),再請求UNICODE編碼的字符串描述符。
不管是請求語言
ID還是UNICODE編碼的字符串描述符,都要分成兩小步:
先請求
設備返回相應字符串描述符的前兩個字節,第一個字節代表了此字符串描述符的長度,主機根據這個長度再次請求相應字符串描述符,這次得到整個字符串描述符。
先取得語言ID的前兩個字節,數據流為:
80 06 00 03 00 00 0200
wValue的高字節為0x03,表示字符串描述符。
wIndex的值為0x0000,表示讀取語言ID
wLength0x0002要求設備返2個字節數據。
設備返回的數據為
0403,第一個字節為0x04表示語言ID字符串描述符長度為4個字節。


e.
主機根據上次讀取的語言ID字符串描述符長再次讀取此描述符,
這次讀出全部語言ID描述符。主機發出的數據流為:
80 06 00 03 00 00 04 00
其中wValue的高字節為0x03,表示字符串描述符,
wIndex的值為0x00,表示讀取語言ID。
wLength為0x0004要求設備返回4個字節數據。設備返回的數據流為:04 03 09 04,
bLength的值為0x04表示此描述符長度為4個字節,
bDescriptorType的值為0x03表示字符串描述符。
wLANGUID的值 為0x0409,表示英語


f.取完字符串描述符支持的語言ID后將讀取UNICODE編碼的字符串描述符,
同讀取語言
ID一樣,
主機同樣會分兩步讀取。主機發出的命令數據流為:
80 06 0303 09 04 02 00
wValue的高字節為0x03,表示字符串描述符,
低字節為
0x03,表示讀取索引為3的字符串描述符(在第1步讀取的設備描述中iSerialNumber字符串的索引為3
所以這里實際讀取的是設備序列號
)
wIndex
的值為0x0409,表示語言ID
wLength的值為0x0002,表示要求設備返回此描述符的前兩個字節。
設備返回的數據流為:
3203,第一個字節的值為0x32表示此字符串描述符的長度為50個字節。


g.取得UNICODE字符串描述符的長度后,
主機根據這個長度讀取整個
UNICODE字符串描述符。
主機發出的命令數據流為:

80 06 03 03 09 04 32 00
wValue的高字節為0x03,表示字符串描述符,低字節為0x03表示讀取索引為3的字符串描述符。
wIndex的值為0x0409表示語言ID
wLength的值為0x0032,表示要求設備返回50個字節的數據。
設備返回的數據從第三個字節開始為
Unicode編碼的字符串,
這里返回的字符串
是:20070620000000005918B19E


h.在讀取完字符串描述符后,主機發出Set_Configuration選擇配置索引以激活這個設備的一個配置,
然后設備對這一命令作出回應。
(不知為何USBMonitor對這此命令的數據流沒有顯示出來)



i.主機發出Set_Interface指令激活設備的某個接口,然后設備對此指令作出回應


j.以上為所有USB設備枚舉過程中都會經歷的過程,
后續的配置過程將根據不同的設備分類

(
見《USB開發基礎--USB命令(請求)和USB描述符》中表6)而有所不同。
下圖所示為此實驗所用優盤的后續配置過程的一部分。
對于具體設備類相關協議規定的枚舉過程就不作分析了,請大家參考相關設備類協議。

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:64089 發表于 2015-11-11 18:19 | 只看該作者
分析的非常好,對于想學習USB的來說確實很實用哦!
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲精品一区二区在线观看 | 在线视频中文字幕 | 国产一级片在线观看视频 | 一级毛片免费看 | 欧美精品一区在线发布 | 国产玖玖 | 国产不卡在线观看 | 日韩一区二区在线视频 | 久久精品一区二区三区四区 | 亚洲二区视频 | 午夜影视网 | 国产精品久久久久久久久免费相片 | 日韩一二区在线 | 91精品国产色综合久久不卡98 | 日韩一区二区三区在线观看 | 日日夜夜免费精品视频 | 日日日操 | 一级爱爱片 | 一区观看| 五月激情婷婷六月 | 久久久91精品国产一区二区精品 | 精品欧美一区二区三区久久久 | 国产精品美女久久久久aⅴ国产馆 | 美女午夜影院 | 91在线观看免费视频 | 欧洲免费毛片 | 91精品国产91久久综合桃花 | 国产精品一区二区av | 国产剧情一区 | 成人一区二区视频 | 国产精品成人一区二区三区 | 91精品国产91 | 久久成人免费视频 | 人人爽日日躁夜夜躁尤物 | 99久久夜色精品国产亚洲96 | 人人色视频 | 欧美综合国产精品久久丁香 | 亚洲日本三级 | 国产福利免费视频 | 国产乱码精品一区二区三区忘忧草 | 亚洲欧洲精品一区 |