USB 介面淺介

關鍵字 :USB介面
USB 介面淺介

USB (Universal Serial Bus) 是一個外部匯流排標準,作為電腦的外置介面,為了代替傳送速率能力低、1個埠只能連接1個設備的RS-232C、列印埠而誕生。

USB 介面最初是由英特爾與微軟倡導發起,最大的特點是儘可能得實現熱插拔和隨插即用,用於規範電腦與外置設備的連接。由 USB-IF(USB Implementers Forum , Inc) 負責 USB 標準的制定和管理。當 USB 裝置插入時,主機列舉到此裝置並載入所需的驅動程式,因此其在使用上遠比PCI和ISA等匯流排方便。USB在速度上遠比並列埠(例如EPP、LPT)與序列埠(例如RS-232)等傳統電腦用標準匯流排快上許多。

USB 1.1(USB 2.0 FullSpeed)的最大傳輸速率為12Mbps,USB 2.0(USB 2.0 HiSpeed)為480Mbps,
USB 3.0(USB 3.2 Gen1) 為 5Gbps,USB 3.1(USB 3.2 Gen2x1) 為 10Gbps,而USB 3.2(USB 3.2 Gen2x2)更達20Gbps,以及近期發表的USB 4.0其速度可達40Gbps。

USB的設計為非對稱式的,它由一個主機控制器和若干通過集線器裝置以樹形連接的裝置組成。一個控制器下最多可以有5級Hub,包括Hub在內,最多可以連接128個裝置,因為在設計時是使用7位元定址欄位,二的七次方就等於128,

一般人說USB連接127個是指連接(某一裝置)時需扣除一個連接主機的USB接頭,而一台電腦可以同時有多個控制器。和SPI-SCSI等標準不同,USB集線器不需要終端子。


USB可以連接的外設有滑鼠、鍵盤、遊戲手柄、遊戲杆、掃描器、數位相機、印表機、硬碟和網路等部件。對數位相機這樣的多媒體外設USB已經是預設介面;由於大大簡化與電腦的連接,USB也逐步取代並列埠成為印表機的主流連接方式之一。

2004年已經有超過1億台USB裝置;到2007年時,高解析度數位影片外設是僅有的USB未能影響的外設類別,因為他需要更高的傳輸速率,不過USB3.1和2019年USB4的問世,高解析度數位影片外設和外接式顯示卡也能在USB播放。

USB3.1  10Gbps

USB是通用串列匯流排(Universal Serial Bus)的縮寫。在USB1.0和USB1.1版本中,只支援1.5Mb/s的低速(low-speed)模式和12Mb/s的全速(full-speed)模式,在USB2.0中,又加入了480Mb/s的高速模式。





USB規格是高位相容的。例如:USB2.0的規格中,定義了3種總線速度(high・speed/full・speed/low ・speed),USB1.0,USB1.1規格的設備可直接使用。



USB 傳輸模式

USB通信中有4個傳輸模式:控制傳輸、批量傳輸、中斷傳輸、同步傳輸

1、控制傳輸方式(Control) 該方式用來處理主機到USB設備的資料傳輸。包括設備控制指令、設備狀態查詢及確認命令。      當USB設備收到這些資料和命令後,將依據先進先出的原則處理到達的資料。

2、批(Bulk)傳輸方式 該方式用來傳輸要求正確無誤的資料。通常印表機、掃描器和數位相機以這種方式與主機聯接。

3、同步傳輸方式(Isochronous) 該方式用來聯接需要連續傳輸資料,且對資料的正確性要求不高而對時間極為敏感的外部設備,如麥克風、嗽叭以及電話等。等時傳輸方式以固定的傳輸速率,連續不斷地在主機與USB

     設備之間傳輸資料,在傳送資料發生錯誤時,USB並不處理這些錯誤,而是繼續傳送新的資料。

4、中斷傳輸方式(Interrupt) 該方式傳送的資料量很小,但這些資料需要及時處理,以達到即時效果,此方式主要用在鍵盤、滑鼠以及操縱杆等設備上。



USB 傳輸模式


USB 傳輸的結構

資料結構 (幀)  : 
 USB線上實際的資料,通過被稱為「幀」的單位進行通信。 這個幀以1ms的頻率反復傳輸,所有資料在這個幀中獲取。

幀:為時間概念,在USB中,一幀就是1MS(低速和全速),它是一個獨立的單元,包含了一系列匯流排動作,USB將1幀分為好幾份,每一份中是一個USB的傳輸動作。

包(Packet)是USB系統中資訊傳輸的基本單元,所有資料都是經過打包後在匯流排上傳輸的。數據在 USB匯流排上的傳輸以包為單位,包只能在幀內傳輸。幀的起始由一個特定的包(SOF 包)表示,幀尾為 EOF。EOF不是一個包,而是一種電平狀態,EOF期間不允許有資料傳輸。

host每1ms產生SOF包(相當於微幀的時候是每8個微幀產生一個SOF包)。高速USB 匯流排的幀週期為125us,全速以及低速 USB 匯流排的幀週期為 1ms。

 

注意:雖然高速USB匯流排和全速/低速USB匯流排的幀週期不一樣,但是SOF包中幀編號的增加速度是一樣的,
           因為在高速USB系統中,SOF包中幀編號實際上取得是計數器的高11位,最低三位作為微幀編號沒有使用,因此其幀編號的增加週期也為 1mS。

           一個幀可以包含多個事務。每N個幀匯流排會分配頻寬給中斷傳輸或是等時傳輸。匯流排時隙分成一個個幀,每個幀裡面由事務組成。
           host controller的作用就是根據傳輸類型合理分配這些事務在匯流排上的調度。

           包是USB匯流排上資料傳輸的最小單位,不能被打斷或干擾,否則會引發錯誤。若干個資料包組成一次事務傳輸,一次事務傳輸也不能打斷,
           屬於一次事務傳輸的幾個包必須連續,不能跨幀完成。一次傳輸由一次到多次事務傳輸構成,可以跨幀完成。

 





資料格式(幀/事務構成)

USB資料是由二進位數字字串構成的,首先數位串構成域(有七種),域再構成包,包再構成事務(IN、OUT、SETUP),
事務最後構成傳輸(中斷傳輸、平行傳輸、批量傳輸和控制傳輸)。

事務可以分成三類

1. setup事務:主機用來向設備發送控制命令

2. 資料登錄事務:主機用來從設備讀取資料

3. 數據輸出事務:主機用來向設備發送資料

事務組成:分別有IN、OUT和SETUP三大事務,
                  每一種事務都由權杖包、資料包、握手包三個階段構成,這裡用階段的意思是因為這些包的發送是有一定的時間先後順序的,事務的三個階段如下:

        1、權杖包階段:啟動一個輸入、輸出或設置的事務。

        2、資料包階段:按輸入、輸出發送相應的資料。

        3、握手包階段:返回資料接收情況,在同步傳輸的IN和OUT事務中沒有這個階段,這是比較特殊的。

             
              Token packet權杖 + Data packet數據 + 可選的Handshake packet握手






包的種類和結構

USB是串列匯流排,所以資料是一位元一位元地在資料線上傳遞的。既然是一位一位地傳遞,就存在著一個資料位元先後的問題。
USB使用的是LSB在前的方式,即先出來的是最低位元資料,接下來是次低位,最後是最高位(MSB)。

一個包,又被分成了很多個域(field),而LSB、MSB就是以域為單位來劃分的。

域:是USB資料最小的單位,由若干位元組成(至於是多少位由具體的域決定),域可分為七個類型:

1、同步域(SYNC),八位,值固定為0000 0001,用於本地時鐘與輸入同步。

2、標識域(PID),由四位識別字+四位識別字反碼構成,表明包的類型和格式,這是一個很重要的部分,這裡可以計算出,**USB的標識碼有16種。

3、地址域(ADDR):七位元位址,代表了設備在主機上的位址,位址000 0000被命名為零位址,是任何一個設備第一次連接到主機時,在被主機配置、枚舉前的默認位址,
     由此可以 知道為什麼一個USB主機只能接127個設備的原因。

4、端點域(ENDP),四位,由此可知一個USB設備有的端點數量最大為16個。

5、幀號域(FRAM#),11位,每一個幀都有一個特定的幀號,幀號域最大容量0x800,對於同步傳輸有重要意義(同步傳輸為四種傳輸類型之一,請看下麵)。

6、資料欄(DATA):長度為0~1023位元組,在不同的傳輸類型中,資料欄的長度各不相同,但必須為整數個位元組的長度。

7、校驗域(CRC):對權杖包和數據包中非PID域進行校驗的一種方法,CRC校驗在通訊中應用很泛,是一種很好的校驗方法,
     須注意CRC碼的除法是模2運算,不同於10進制中的除法。


幀起始包的格式:

SYNC+PID+11FRAM+CRC5(五位的校驗碼)

權杖包:

SYNC+PID+ADDR+ENDP+CRC5(五位的校驗碼)

 

USB 包的種類和結構



包ID (PID) 的詳細內容

標識域(PID)

        由四位識別字 + 四位識別字反碼構成,表明包的類型和格式,這是一個很重要的部分,這裡可以計算出,USB的標識碼有16種。
         USB2.0使用了十六種標識碼,標識碼的作用是用來說明包的屬性的,標識碼是和包聯繫在一起的,標識碼分別有以下十六種

包:由域構成的包有四種類型,分別是權杖包、資料包、握手包和特殊包,前面三種是重要的包,不同的包的域結構不同,介紹如下:

   
     1、權杖包:可分為輸入包、輸出包、設置包和幀起始包(注意這裡的輸入包是用於設置輸入命令的,輸出包是用來設置輸出命令的,而不是放據數的)。

            權杖包有4種,分別為輸出(OUT)、輸入(IN)、建立(SETUP)和幀起始(SOF Start Of Frame)。

  • 輸出權杖包:用來通知設備將要輸出一個資料包。
  • 輸入權杖包:用來通知設備返回一個資料包。
  • 建立權杖包:只用在控制傳輸中,它跟輸出權杖包的作用一樣,也是通知設備將要輸出一個資料包,兩者的區別在於:SETUP權杖包後只使用DATA0資料包,且只能發到設備的控制端點,並且設備必須要接收,而OUT權杖包沒有這些限制。
  • 幀起始包:在每幀(或微幀)開始時發送,它以廣播的形式發送,所有USB全速設備和高速設備都可以接收到SO2F包。USB全速設備每毫秒產生一個幀,而高速設備每125us產生一個微幀。

        其中輸入包、輸出包和設置包的格式都是一樣的:


      2、YNC+PID+ADDR+ENDP+CRC5(五位的校驗碼 )

           幀起始包的格式:

           SYNC+PID+11FRAM+CRC5(五位的校驗碼)

      3、握手包:結構最為簡單的包,格式如下

      SYNC+PID

      端點:位於USB設備或主機上的一個數據緩衝區,用來存放和發送USB的各種資料每一個端點都有惟一的確定位址,有不同的傳輸特性
     (如輸入端點、輸出端點、配置端點、批量 傳輸端點) 。






 

控制傳輸的協議


(1)控制傳輸

    該協定程式如圖所示,最初是從主機發送的SETUP的權杖PID。接著,發送資料是輸出還是輸入,請求接收資料的發送。還有一個完全沒有資料的東西。


    然後,各自的最後資料的通信完成的話,相反的傳送被進行,結果資料被回復成為完成。

    控制傳輸是負責向USB設置一些控制資訊,傳送這種事務的管道是控制管道。在每個USB設備中都會有控制管道,也就是說控制管道在USB設備中是必須的。
    控制傳輸也分為三個階段,即權杖階段、資料傳送階段、握手階段,如圖所示。

    控制傳輸分為三(或兩個)個階段:建立( Setup)、 數據( DATA)(可能沒有)以及狀態( Status)。 每個階段都由一次或多次事務傳輸組成。


    建立過程
setup stage

    使用一個建立事務,如下:SETUP-〉DATA0-〉ACK


    資料過程
data stage

    資料過程是可選的。一個資料過程包含一筆或者多筆資料事務。資料過程的第一個資料包必須是DATA1包,然後每次正確傳輸一個資料包就在DATA0和DATA1之間交替。


    狀態過程
status stage

    狀態過程也是一筆批量事務。狀態過程只使用DATA1包。

    設備枚舉過程中各種描述符的獲取以及設置位址和設置配置等,都是通過控制傳輸來實現的。

    控制傳輸是一種可靠的雙向傳輸,一次控制傳輸可分為構成(初始設置階段、可選資料階段、狀態資訊步驟),每一個階段可以看成一個傳輸,
    也就是說控制傳輸其實是由三個傳輸構成 的,在USB設備初次接到主機後,主機通過控制傳輸來交換資訊、設備位址和讀取設備的描述符,使得主機識別設備,並安裝相應的驅動程式,這是每一個USB開發者都要關心的問題。

        第一階段:從HOST到Device的SETUP事務傳輸,這個階段指定了此次控制傳輸的請求類型。

        第二階段:資料階段,也有些請求沒有資料階段。

        第三階段:狀態階段,通過一次IN/OUT傳輸表明請求是否成功完成。

        控制傳輸通過控制管道在應用軟體和Device的控制端點之間進行,控制傳輸過程中傳輸的資料是有格式定義的,USB 設備或主機可根據格式定義解析獲得的資料含義。其他三種傳輸類型都沒有格式定義。控制傳輸對於最大包長度有固定的要求。對於高速設備該值為64Byte,對於低速設備該值為8,全速設備可以是8或16或32或64。

        最大包長度表徵了一個端點單次接收/發送資料的能力,實際上反應的是該端點對應Buffer的大小。Buffer越大,單次可接收/發送的資料包越大,反之亦反。當通過一個端點進行資料傳輸時,若資料的大小超過該端點的最大包長度時,需要將資料分成若干個資料包傳輸。並保證除最後一個包外,所有的包長度均等于該最大包長度。這也就是說如果一個端點收到/發送了一個長度小於最大包長度的包,即意味著資料傳輸結束。

        控制傳輸在訪問匯流排時也受到一些限制,如高速端點的控制傳輸不能佔用超過 20%的微幀,全速和低速的則不能超過 10%。在一幀內如果有多餘的未用時間,並且沒有同步和中斷傳輸,可以用來進行控制傳輸。




控制傳輸的協議

批量傳輸的協議

(2)批量傳輸
 
  在這裡通常,成功發送返回ACK,不過,以不能接收的狀態的時候,返回NAK。當設備不能操作時,返回STALL。

顧名思義,批量傳輸主要是大塊的資料,傳送這種事務的管道叫做Bulk管道。這種事務傳輸的時候分為三部分,如圖所示。

第一部分是Host端發出一個Bulk的權杖請求,如果權杖是IN請求則是從Device到Host的請求,如果是OUT權杖,則是從Host到Device端的請求。
第二部分是傳送資料的階段,根據先前請求的權杖的類型,資料傳輸有可能是IN方向,也有可能是OUT方向。傳輸資料的時候用DATA0和DATA1權杖攜帶著資料交替傳送。

第三部分是握手信號。如果資料是IN方向,握手信號應該是Host端發出,如果是OUT方向,握手信號應該是Device端發出。握手信號可以為ACK,表示正常回應,
也可以是NAK表示沒有正確傳送。STALL表示出現主機不可預知的錯誤。

在第二部分,即傳輸資料包的時候,資料傳送由DATA0和DATA1資料包交替發送。資料傳輸格式DATA1和DATA0,這兩個是重復資料,
確保在1資料丟失時0可以補上,不至於資料丟失。如下圖所示。

 


USB 批量傳輸的協議


中斷傳輸的協議

(3) 中斷傳輸
  與批量傳輸完全相同。可是,實際傳送上很大地不同,

對於批量傳輸一次發送接收大量的資料,在中斷傳送,以任意的定時發送和接收相對少量的資料。

在USB設備中,有種處理機制類似於PCI中斷的機制,這就是中斷事務。中斷事務的資料量很小,一般用於通知Host某個事件的來臨,
例如USB滑鼠,滑鼠移動或者滑鼠按一下等操作都會通過中斷管道來向Host傳送事件。

在中斷事務中,也分為三個階段,即權杖階段、資料傳輸階段、握手階段,如下圖所示



 

同步傳輸的協議

(4) 同步傳送

這個傳輸的情況,因為不管怎樣有錯誤,在一定時間以內因為回應想發送接收一定量的資料這樣的要求的東西,

協定圖非常變得簡單,回饋部分被省略。這樣就能確保高速的連續通信了。

USB設備中還有一種事務叫同步傳輸事務,這種事務能保證傳輸的同步性。例如,在USB攝像頭中傳輸視頻資料的時候會採用這種事務,這種事務能保證每秒有固定的傳輸量,但與Bulk傳輸不同,它允許有一定的誤碼率,這樣符合視訊會議等傳輸的需求,因為視訊會議首先要保證即時性,在一定條件下,允許有一定的誤碼率。同步傳輸事務有只有兩個階段,即權杖階段、資料階段,因為不關心資料的正確性,故沒有握手階段,如圖所示。

同步傳輸是不可靠的傳輸,所以它沒有握手包,也不支持 PID 翻轉。主機在排定事務傳輸時,同步傳輸有最高的優先順序。



同步傳輸的協議




連接的型態

USB是一種主從結構的系統,主機叫做Host,從機叫做Device。Device包括USB function和USB HUB。

USB匯流排基於分層的星狀拓撲結構,以HUB為中心,連接周圍設備。匯流排上最多可連接127個設備。Hub串聯數量最多5個。


連接的型態



連接處理的流程(通信的架構)


(1) 物理通信

首先,物理的通信Wire即實際的電纜連線(物理的通信戰)被進行。這個時候因為實際在實體層的通信,成為USB控制器的作用,從使用的一方完全不知道關於物理的通信USB變得可能。由於在這一根電纜上進行通信,所以在瞬間只能發送、接收一個資料,但是通過分時觀看,可以使用多條通信線連接起來的方式。

(2) 系統層通信
 在下一個級別中,主機系統軟體(Windows的設備驅動程式層)的通信,這是必須的通信,因此主機和設備之間準備了“預設管道”的通信邏輯連接。並且使用這個默認管子進行的通信稱為「控制傳送」通過該控制傳輸,當復位初始化時,可以初始化系統設定,或者連接到USB線纜時,可以進行各種設定控制的通信。即,使用此控制項傳輸,進行“配置”,在主機和設備之間交換設備使用方法的設定資訊。主機向設備請求此處使用的管道數量、傳送模式等設定資訊,並根據此來設定主機設備的使用條件。


(3) 應用層通信
 下一個級別是應用程式級別,在此期間的邏輯通信線路被稱為“管道”,可以根據需要設定多個管道。這個管道終究是邏輯性的通信線,實際的通信在1個USB的線上時分被進行。使用了這個管子的通信,成為從主機發送的「OUT」和,從設備側發送的「IN」的哪邊只單方向的通信。與此相對,進行控制傳輸的默認管道是雙向通信。

連接處理的流程 (通信的架構)

連接處理的流程(端點與管)

USB的邏輯通信是用端點和管道的概念來表示的

用圖表示的話如上圖。

也就是說,在設備側被稱作“端點”的“FIFO緩衝器”成為通信的實體,主機側也準備了同樣的緩衝器,該緩衝器之間通過“管道”連接,發送和接收資料。

首先,設備連接到USB之後的狀態,配置前的狀態,作為預設管道的控制傳輸能通信狀態。與此相對應的是“端點0(FIFO0)”,使用該控制傳輸執行配置,
在設定了設備使用方法之後,除了控制傳輸以外,還追加了新的端點,如下側,管道被打開。配置。這個管子只能單向通信。此端點的編號可以由主機指定。

IN/OUT的方向主要考慮主機,對主機的輸入IN,來自主機的輸出定義為OUT。另外,管子的號碼和端點的號碼是獨立的,
可以由主機決定
管道,是主機軟體(數據緩衝區)和USB設備的各個端點之間的資料傳輸連結,它是兩者之間通信流的抽象。
然而,實際的資料傳輸是由USB匯流排界面層來完成的。管道和USB設備中的端點一一對應,並且各個管道的資料傳輸是相互獨立的。

管道有兩種類型:流管道和消息管道。其中最為重要的消息管道是“缺省控制管道”,這個管道在設備開始上電後就存在了,它用於提供設備的配置與狀態等資訊。
主機與設備之間的聯絡就是通過消息管道實現的。

連接處理的流程 (端點與管)


USB 的描述符

一個USB設備只有一個設備描述符。

設備描述符裡決定了該設備有多少種配置,每種配置有一個配置描述符;

而在每個配置描述符中又定義了該配置裡有多少個介面,每個介面都有一個介面描述符;

在介面描述符裡又定義了該介面有多少個端點,每個端點都有一個端點描述符;

端點描述符定義了端點的大小、類型等。如果有類特殊描述符,它跟在相應的介面描述符之後。

在主機獲取描述符時,首先獲取設備描述符,接著再獲取配置描述符,然後根據配置描述符中的配置集合的總長度,
一次將配置描述符、介面描述符、類介面描述符(如果有)、端點描述符一次讀回。對於字串描述符,是單獨獲取的。
主機通過發送獲取字串描述符的請求以及描述符的索引號、語言ID來獲取相對應的字串描述符。

設備有一個設備位址,USB主機依靠這個設備位址來訪問設備。而在設備內部還會分的更細,它會分出一些端點出來等。
就是說,如果USB主機要和USB設備通信,光有設備位址是不夠的,還需要一個端點位址。有了設備位址和端點位址,就能準確地對端點發送和讀取資料了。
而配置和介面,是為了更方便地管理端點而抽象出來的概念。

一個設備可以有多個設備,但是同一時間只能有一個配置有效,每個下又可以有多個介面。當我們需要不同的功能時,只要選擇不同的配置即可。同一個端點號不能出現在同一配置下的兩個或多個不同的介面中。同一個端點號可用在不同的配置中

USB 的描述符


USB 描述符的表列

USB 描述符的表列

上表資料引自以下網站: https://www.usb.org/defined-class-codes2016年5月

本文內容參考維基百科網站及臺灣東芝電子零組件股份有限公司 官方培訓資料。
特致感謝!!

★博文內容參考自 網站,與平台無關,如有違法或侵權,請與網站管理員聯繫。

★博文作者未開放評論功能