天天看點

USB軟硬體知識之一:綜述

       在USB接口有四根線,分别是VBUS,D-,D+,GND。其中VBUS線是HOST/HUB向USB裝置供電的電源線。

(1)USB供電:根據USB規範,從電源方面來講,USB裝置分為自供電和總線供電兩種裝置類型,裝置通過枚舉過程的裝置描述符聲明自己的電源要求。自供電裝置不使用HOST/HUB的電源,而是自身有電源供應;總線供電即指裝置電源來自VBUS。

 (2)USB硬體結構:USB是基于令牌的總線。類似于令牌環網絡或FDDI基于令牌的總線。USB主要制器廣播令牌,總線上裝置檢測令牌中的位址是否與自身相符,通過接收或發送資料給主機來響應。USB通過支援懸挂(suspend)/恢複(resume)操作來管理USB總線電源。USB系統采用級聯星型拓撲,該拓撲由三個基本部分組成:主機(Host),集線器(Hub)和功能裝置。 

A,主機,也稱為根,根結或根Hub,它做在主機闆上或作為适配卡安裝在計算機上,主機包含有主要制器和根集線器(Root Hub),控制着USB總線上的資料和控制資訊的流動,每個USB系統隻能有一個根集線器,它連接配接在主要制器上。 

B,集線器是USB結構中的特定成分,它提供叫做端口(Port)的點将裝置連接配接到USB總線上,同時檢測連接配接在總線上的裝置,并為這些裝置提供電源管理,負責總線的故障檢測和恢複。集線可為總線提供能源,亦可為自身提供能源(從外部得到電源),自身提供能源的裝置可插入總線提供能源的集線器中。

C,終端功能裝置。

(3)USB軟體結構:每個USB隻有一個主機,它包括以下幾層: 

A,USB總線接口:USB總線接口處理電氣層與協定層的互連。從互連的角度來看,相似的總線接口由裝置及主機同時給出。USB總線接口由主要制器實作。 

B,USB系統:USB系統用主要制器管理主機與USB裝置間的資料傳輸。它與主要制器間的接口依賴于主要制器的硬體定義。同時,USB系統也負責管理USB資源,例如帶寬和總線能量,這使客戶通路USB成為可能。

C,USB客戶軟體:它是位于軟體結構的最高層,負責處理特定USB裝置驅動器。客戶程式層描述所有直接作用于裝置的軟體入口。當裝置被系統檢測到後,這些客戶程式将直接作用于外圍硬體。這個共享的特性将USB系統軟體置于客戶和它的裝置之間,這就要根據USBD在用戶端形成的裝置映像由客戶程式對它進行處理。

(4)USB資料流傳輸:每個外設提供了一個或多個可以與客戶程式通信的端點endpoint,所有通信資料的來源或目的都基于這些端點,本質是一個可尋址的FIFO。每個USB 外設有一個唯一的位址,可能包含最多十六個端點。主機通過發出器件位址和每次資料傳輸的端點号,向一個具體端點(FIFO)發送資料。每個端點的位址為0 到15,一個端點位址對應一個方向。是以,端點2-IN 與端點2-OUT 完全不同。 每個器件有一個預設的雙向控制端點0,是以不存在端點0-IN 和端點0-OUT。

  USB支援四種基本的資料傳輸模式:控制傳輸,等時傳輸,中斷傳輸及資料塊傳輸。每次傳輸必須曆經兩個或三個部分,第一部分——USB控制器向USB裝置發出指令,

第二部分——USB控制器和USB裝置之間傳遞讀寫請求,其方向主要看第一部分的指令是讀還是寫,第二部分有時候可以沒有。第三部分——握手信号。  

A,控制傳輸類型:支援外設與主機之間的控制,狀态,配置等資訊的傳輸,為外設與主機之間提供一個控制通道。每種外設都支援控制傳輸類型,這樣主機與外設之間就可以傳送配置和指令/狀态資訊。 控制傳輸典型地用在主計算機和USB外設之間的端點0(EP0)之間的傳輸。

B,等時(lsochronous)傳輸類型:支援有周期性,有限的時延和帶寬且資料傳輸速率不變的外設與主機間的資料傳輸。與Bulk傳輸不同,同步傳輸允許有一定的誤碼率。同步傳輸事務有隻有兩個階段,即令牌階段、資料階段,因為不關心資料的正确性,故沒有握手階段。

C,中斷傳輸類型:支援像遊戲搖桿,滑鼠和鍵盤等輸入裝置,這些裝置與主機間資料傳輸量小,無周期性,但對響應時間敏感,要求馬上響應。 中斷方式傳輸是單向的并且對于host 來說隻有輸入(IN)的方式

D,資料塊(Bulk)傳輸類型:支援列印機,掃描器,數位相機等外設,這些外設與主機間傳輸的資料量大,USB在滿足帶寬的情況下才進行該類型的資料傳輸。

        第一部分——令牌階段。

Host端發出一個Bulk的令牌請求。

如果令牌是IN請求 ,則是從Device到Host的請求;

如果令牌是OUT請求,則是從Host到Device端的請求。

        第二部分——傳送資料的階段。

根據先前請求的令牌的類型,資料傳輸有可能是IN方向,也有可能是OUT方向。傳輸資料的時候用DATA0和DATA1令牌攜帶着資料交替傳送。資料傳輸格式DATA1和DATA0,這兩個是重複資料,確定在1資料丢失時0可以補上,不至于資料丢失。

        第三部分——握手階段。

如果資料是IN 方向,握手信号應該是Host端發出;

如果資料是OUT方向,握手信号應該是Device端發出。

握手信号可以為ACK, 表示正常響應,

NAK, 表示沒有正确傳送。

STALL,表示出現主機不可預知的錯誤。

(5)枚舉過程

      當裝置連接配接到主機時,按照以下順序進行枚舉:

1.  連接配接了裝置的 HUB 在 HOST 查詢其狀态改變端點時傳回對應的 bitmap,告知HOST 某個PORT狀态發生了改變。

2.  主機向 HUB 查詢該PORT的狀态,得知有裝置連接配接,并知道了該裝置的基本特性。 

3.  主機等待(至少 100mS)裝置上電穩定,然後向 HUB 發送請求,複位并使能該PORT。

4.  HUB執行PORT複位操作,複位完成後該PORT就使能了。現在裝置進入到defalut狀态,可以從Vbus擷取不超過 100mA 的電流。主機可以通過 0位址與其通訊。

5.  主機通過0位址向該裝置發送get_device_descriptor标準請求,擷取裝置的描述符。 

6.  主機再次向 HUB 發送請求,複位該PORT。

7.  主機通過标準請求 set_address給裝置配置設定位址。

8.  主機通過新位址向裝置發送 get_device_descriptor标準請求,擷取裝置的描述符。

9.  主機通過新位址向裝置發送其他 get_configuration請求,擷取裝置的配置描述符。

10.  根據配置資訊,主機選擇合适配置,通過 set_configuration請求對裝置而進行配置。這時裝置方可正常使用。    

繼續閱讀