如何查看BUSHOUND內容

來源:互聯網
上載者:User
轉自  點擊開啟連結

 

USB行動裝置的定位

通常的USB裝置可以分為五大類:顯示器、通訊裝置、音訊裝置、人機輸入和海量儲存。

而海量儲存又包含了兩大部分:傳輸方式和控制方式。

傳輸方式主要有:CBI傳輸和Bulk_only傳輸。

控制方式主要有:ATA命令和UFI命令規範。

 

CBI即指:Control / Bulk / Interrupt。因此,Bulk_only傳輸可以看成CBI中包含的一種傳輸方式。 

對於USB行動裝置,使用的是Bulk_only傳輸方式,即批量傳輸方式。同時,USB行動裝置遵從UFI命令規範。 

對於CBI傳輸和ATA命令塊,主要用於對硬碟的管理。

 

在BusHound6.0觀察PC串連的Device,可以看到比較細緻的分類。

 BusHound顯示的除了一些似曾相識的裝置外,還有兩個主要的概念:Hub和Controller。

  USB Controller和Hub

閱讀任何一份和USB協議相關的文檔,都能看到一個經典的金字塔圖,告訴你Controller和USB裝置的關係。用文字描述這個圖大概是這樣子的:“一個USBControl下只有一個RootHub,一個RootHub可以接多個Hub或USB裝置,如果接的是Hub,則該Hub還可以接Hub和USB裝置……”。 

但是,並非串連的層數可以這樣無止境下去,而裝置個數也不是unlimited。USB協議做了這樣的規定,以RootHub為起點,層數最多不能超過7層,也就是說任何一個USB系統中最多可以允許5個USB Hub級聯。一個複合裝置(CompoundDevice)將同時佔據兩層或更多層。裝置(包括USB裝置和Hub)不能超過127個。不能超過127個裝置的原因是USB Controller只用了7Byte用於記錄裝置地址。 

此外,需要注意的是,一個USB Controller下只有一個RootHub,所有需要串連到USB Controller的裝置都是直接或間接的串連在該RootHub上。RootHub其實是一個特殊的USB Hub,它整合在USB Controller中,因此並不佔用地址。即有限的127裝置裡面並不包含RootHub。 

還有一個概念,沒有在上圖出現,但是卻十分重要,那就是:EndPoint。

  EndPoint

EndPoint,中文名:端點,常用縮寫EP。

EndPoint一般後面會跟個序號,如EndPoint0、EndPoint1、EndPoint2…… 

一般情況下,我們常說的一個EndPoint的輸入輸出,其實指的的是一組EndPoint,因為單個EndPoint實際上只有輸入或輸出功能,即它是單方向的。 

一組EndPoint之間的通訊(或者說資料轉送),它們建立的“無形”通道,被稱作管道(Pipe)。

 

在EndPoint0、EndPoint1、EndPoint2……中,以EndPoint0最為特殊,因為它被USB協議規定為預設端點,即無論什麼USB裝置,無論該USB裝置具備多少個EndPoint,EndPoint0總是必須的,它被用於控制命令的傳輸。在BusHound6.0裡面,可以看到EndPoint0發送的命令除了資料轉送,都是CTL。 

EndPoint0之間的通道被稱為預設通道。

 

如上圖,紅圈裡面的0表示當前的通訊是EndPoint0的通訊,發送CTL命令用於擷取裝置描述符。而紅圈2表示當前通訊的是EndPoint2。 

  其它

BusHound的使用操作很簡單,無須過多介紹。但有幾點注意:

 

 1、如果需要觀察更加全面的訊息互動,需要選上USB移動存放裝置的上一層。比如需要查看EndPoint0枚舉過程。

 

 2、前面說到USB移動儲存使用的是UFI命令規範。UFI是個什麼東西。

 

       一般可以把UFI看成是SCSI命令的一個子集。

       UFI包含三種字長的命令:6bit、10bit、12bit,在window下通常使用12bit。

 

       UFI規範裡包含的SCSI命令如下:

指令代碼

指令名稱

說明

04h

Format Unit

格式化儲存單元

●12h

Inquiry

索取器件資訊

1Bh

Start / Stop

Load / unload

55h

Mode select

允許Host對外部裝置設定參數

●5Ah

Mode sense

向Host傳輸參數

●1Eh

Prevent / allow medium removal

防寫保護

●28h

Read(10)

Host讀儲存介質中的位元據

A8h

Read(12)

同上,比較詳細

●25h

Read capacity

要求裝置返回當前容量

23h

Read Format capacity

查詢當前容量及可用空間

03h

Request sense

請求裝置向主機返回執行結果及狀態資料

01h

Rezero Unit

返回零軌道

2Bh

Seek(10)

為裝置分配到特定地址

1Dh

Send diagnostic

執行韌體複位並執行診斷

●00h

Test unit ready

請求裝置報告是否處於ready狀態

●2Fh

Verify

在儲存中驗證資料

●2Ah

Write(10)

從主機向介質寫位元據

AAh

Write(12)

同上,比較詳細

2Eh

Write and verify

寫位元據並驗證

 

 3、對于海量儲存而言,上面標記了“●”的命令是必須響應。當然,海量儲存包括了USB移動存放裝置,因此USB移動存放裝置也必須響應這些命令。

 

 4、上面第3點說明,對于海量存放裝置的命令,部分命令碼被重複定義不會導致通訊出錯,因為它們根本不會被系統調用。

 

 5、其實,細心一點,回顧上圖,會發現無論是USB Controller、RootHub還是USB裝置,其地址都是遞增的,即不會重複。一開始我認為一個PC可能有多個USB Controller,後來我大膽推測,一個PC(或者說一塊主板),只有一個USB Controller。【註:當然,如果這個地址只是BusHound自己分配的,那麼所有推測就都沒意義了。】

 

再後來,上網查了下,真相大白。

在USB2.0出來之前,一個主板上只有一個USBController,即USB1.1的Controller。USB2.0出來之後,為了支援USB2.0,只支援USB1.1的主板上就多加了一個USB2.0的適配器,但是這個適配器和USB1.1Controller是獨立工作,互不影響的。而在USB2.0後面設計的主板,就只有一個USB Controller了,你也可以說是USB2.0Controller,但是這個USB2.0 Controller是支援USB1.0和USB1.1的,即相容了FS和LS。

再再後來,我又做了一個推測,對於主板上這個唯一的USB Controller,它早已把地址做了劃分,先對每個子Controller劃分地址,同時標明該Controller會被用於串連哪些裝置。接著按序又為每個子Controller的RootHub分配接下來的地址,然後才是Hub和USB移動存放裝置。當然,如何劃分,是不是這樣劃分,還有指定每個子Controller的用途,對於不同的主板應該有各自不同的規定。於是,從這個推測中得到一個推測的結論,一個PC上能夠讓使用者外接的USB裝置不可能有127個。

 

 6、從協議分析儀可以看到BusHound顯示的Controller都是什麼樣的USB Controller類型。

Host controller interface (HCI) is a registerlevelinterfacewhich allows ahost controller forUSB orFireWireto communicate with theoperatingsystem of apersonal computer.

Open Host Controller Interface, orOHCI,is anopen standard.

Universal Host Controller Interface (UHCI)was created by Intel forUSB 1.0 (full and low speeds).

Enhanced Host ControllerInterface (EHCI)is a high speed controller standard which is publicly specified. The USB-IFinsisted on this for USB 2.0 instead of having a different standard forPCI-based USB interfaces, which would have increased complexity and thereforecosts. Intel hosted the EHCI conformance testing, which helped to preventdivergence from the standard.

 

 7、USB協議規定,USB的延長線不能超過5M,因此在實際使用時,最好使用短且粗的USB延長線。

 

 

8. 解析資料:a3 00 00 00 01 00 04 00
   a3:其它類型請求=裝置到主機,00:指定命令=GET STATUS ,00 00:值為0 ,00 01:裝置 ,00 04:長度4

   查看通訊的資料,需要在設定介面裡,把IN、OUT兩個勾選上

9.用BusHound測量出資料轉送速率

在設定介面可以勾選命令回應時間的顯示

10.只要是usb端和host端的通訊資料,bushound都可以抓到。另外Data資料區的長度是可以設定的。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.