USB匯流排-USB協議簡介(一)
1.簡介
USB是通用序列匯流排(Universal Serial Bus)的縮寫。在USB匯流排出現之前,計算機與鍵盤、滑鼠、掃描器、印表機都使用專用的介面連線,不同裝置的介面不能互用,擴充套件性很差,每次插拔裝置都要關閉計算機,不支援熱插拔,且通訊速率很低。為了解決上述問題,USB匯流排誕生了。USB匯流排就好像一條管道,管道里流過的東西只要符合USB協議,至於具體流的是什麼東西,USB匯流排並不關心,可以是自來水,可以是汙水,可以是天然氣,也可以是石油。對應具體的裝置上,只要是支援USB協議的裝置,都可以連線計算機,如USB鍵盤、USB滑鼠、USB攝像頭、USB音箱等。USB的出現簡化了計算機與外圍裝置的連線,增強了擴充套件性,支援熱插拔,且通訊速度很快。
2.USB協議版本
從USB協議誕生至今,出現了多個USB協議版本,如USB1.0、USB1.1、USB2.0、USB3.0、USB3.1、USB3.2。最新的是USB4.0協議,可直連CPU的PCIe匯流排,最大速度可達40Gbps,使用Type-C介面,相容DP視訊協議、PD快充協議等,最高支援100W供電。
USB協議版本 | 速率稱號 | 最大速率 | 電源 | 型別 | 推出時間 |
---|---|---|---|---|---|
USB1.0 | 低速(Low-Speed) | 1.5Mbps | 5V/500mA | 半雙工 | 1996年1月 |
USB1.1 | 全速(Full-Speed) | 12Mbps | 5V/500mA | 半雙工 | 1998年9月 |
USB2.0 | 高速(High-Speed) | 480Mbps | 5V/500mA | 半雙工 | 2000年4月 |
USB3.0(USB3.2 Gen1) | 超高速(SuperSpeed USB) | 5Gbps | 5V/900mA | 全雙工 | 2008年月11月 |
USB3.1(USB3.2 Gen2) | SuperSpeed USB 10Gbps | 10Gbps | 20V/5A | 全雙工 | 2013年月7月 |
USB3.2(USB3.2 Gen2×2) | SuperSpeed USB 20Gps | 20Gbps | 20V/5A | dual-lane | 2017年月9月 |
USB4.0(Gen3×2) | ---- | 40Gb s | 100 | single-lane或dual-lane,相容Thunderbolt | 2019年月8月 |
注:USB3.2推出時,USB-IF公佈了新的命名規範,將USB3.0改名為USB3.2 Gen1,USB3.1改名為USB3.2 Gen2,而將能夠使用兩個USB Type-C Rx/Tx針腳的USB3.2改名為USB3.2 Gen2×2。
下圖(未找到此圖的源出處)是各個版本USB協議使用的標誌及介面,USB3.2以後,只使用Type-C介面,包括圖中未畫出的USB4.0和Thunderbolt3。
下圖是USB3.2協議使用的標誌,此標誌是USB-IF網站上最新的。
下圖是USB4.0協議使用的標誌,USB4.0使用Gen3 lane,single-lane可達到20Gps,dual-lane為40Gps。USB4™ 20Gbps使用single-lane,USB4™ 40Gbps使用dual-lane。
3.USB匯流排特點
3.1.主從模式
USB是主從模式的匯流排,主機稱為Host,從機(也稱為裝置)稱為Device。從機與從機之間、主機與主機之間(不包括USB4.0),不能互聯。每次通訊都是由主機發起,從機不能主動發起通訊,只能被動的應答主機的請求。USB3.0及以後的USB協議,主機也可以和集線器(Hub)通訊。為了增加靈活性,又出現了USB OTG(On The Go),USB OTG支援主從切換,同一個裝置,在不同場合下,可以在主機和從機之間切換。USB OTG線中增加了一根USB ID線,當USB ID線上拉時,處於從機(裝置)模式,當USB ID線接地時,處於主機模式。
3.2.匯流排結構
如下圖所示,USB匯流排呈現出樹狀的拓撲結構。樹的根節點是USB Host控制器,連線在USB Host控制器上的是USB根集線器(Root Hub)。USB集線器(Hub)可以將一個USB介面擴充套件成多個USB介面,擴展出的USB介面又可以通過USB集線器(Hub)擴充套件,每個USB介面都可以接USB裝置。集線器只能擴展出更多的USB介面,而不能擴展出更多的頻寬,所有USB裝置共享USB Host控制器的頻寬,當有多個USB裝置需要較大頻寬時,可以考慮將他們接到不同USB Host控制器上的根集線器上,以避免頻寬不足。
3.3.電氣特性
下圖是USB3.2線纜的示意圖,同時相容USB2.0。USB使用差分訊號傳輸資料,下圖中的D+和D-是一對差分線,SSTX+和SSTX-是一對差分線,SSRX+和SSRX-是一對差分線。USB2.0只有一對差分線,即下圖中的D+、D-,因此USB2.0是半雙工的,不能同時收發資料。USB3.2擁有兩對差分線,即SSTX+和SSTX及SSRX+和SSRX,因此USB3.2是全雙工的,可同時收發資料。USB3.2和USB2.0使用不同的差分線傳輸資料,兩者互不干擾,可同時工作。USB3.2線纜中保留了USB2.0的資料傳輸通道,實現了對USB2.0的相容。USB主機可通過VBUS線向裝置供電,最大可輸出20V/5A。GND是地線。
下圖是USB3.2線纜的橫截面示意圖。紅色Power線是VBUS,綠色和灰色UTP是D+和D-,青色的兩對差分線是SSRX+、SSRX、SSTX+、SSTX。黑色是GND。除此之外,還有一些編織層和遮蔽層。
4.USB傳輸基礎
4.1.傳輸型別
控制傳輸(Control Transaction)
控制傳輸用於配置裝置、獲取裝置資訊、傳送命令到裝置、獲取裝置的狀態。每個USB裝置都有端點0的控制端點,當USB裝置插入到USB主機拓撲網路中時,USB主機就通過端點0與USB裝置通訊,對USB裝置進行配置,便於後續的資料傳輸。USB協議保證控制傳輸有足夠的頻寬。控制傳輸可靠,時間有保證,但傳輸的資料量不大。如USB裝置的列舉過程就採用的是控制傳輸。
中斷傳輸(Interrupt Transaction)
當USB主機請求USB裝置傳輸資料時,中斷傳輸以一個固定的速率傳送少量的資料。中斷端點的資料傳輸方式為中斷傳輸,資料傳輸可靠,實時性高,這裡的中斷並不是USB裝置產生中斷,而是USB主機每隔一個固定的時間主動查詢USB裝置是否有資料要傳輸,以輪詢的方式提高實時性。如USB滑鼠採用的是中斷傳輸。
批量傳輸(Bulk Transaction)
批量傳輸用於傳輸大量資料。USB協議不保證這些資料傳輸可以在特定的時間內完成,但保證資料的準確性。如果總線上的頻寬不足以傳送整個批量包,則將資料拆分為多個包傳輸。批量傳輸資料可靠,但實時性較低。如USB硬碟、印表機等裝置就採用的是批量傳輸方式。
等時傳輸(Isochronous Transaction)
等時傳輸也可以傳輸大量資料,但資料的可靠性無法保證。採用等時傳輸的USB裝置更加註重保持一個恆定的資料傳輸速度,對資料的可靠性要求不高。如USB攝像頭就使用的是等時傳輸方式。
4.2.傳輸要素
USB2.0主機控制器通過把時間在低速、全速模式下分成1毫秒寬的幀(frame),在高速模式下分成125微妙寬的微幀(microfranme),以此來管理傳輸。主機控制器將每個幀或微幀的一部分分配給各個傳輸。每個幀(或微幀)以帶有時序參考的幀(Start-of-Frame,SOF)開始。超高速匯流排不使用SOF,但主機控制器仍可以在125微妙的匯流排時間內安排超高速傳輸。
USB傳輸可以安排在1個或多個幀或微幀中,每個傳輸包含多個事務,每個事務又進一步含有多個資訊包(packets)。資訊包必須在一個幀或微幀中傳輸完畢,不能跨幀或微幀。資訊包分為4類,令牌類資訊包確認事務型別,資料類資訊包攜帶資料和狀態程式碼,握手類資訊包攜帶狀態程式碼,最後一種是特殊類資訊包。
USB傳輸由一個或多個事務(transaction)組成,這些事務可將資料載入端點或從端點取出。USB2.0事務開始於主機在總線上傳送的令牌資訊包(token packet)。令牌資訊包含有目標端點號和方向。IN令牌資訊包表示向端點請求資料資訊包。OUT令牌資訊包則是主機派發資料資訊包的先行資訊。除了資料,每個資料包還含有錯誤檢查位和一個帶有資料順序值的資訊包ID(PID)。許多事務還擁有握手資訊包(handshake packet),資料的接收端用它來報告事務成功或失敗。對於超高速傳輸事務,資訊包型別和協議有所不同,但卻含有相同的地址、錯誤檢查和與資料相配合的資料順序值。
資訊包型別 | PID名字 | 取值(二進位制) | 傳輸型別 | 來源 | 說明 |
---|---|---|---|---|---|
令牌 | OUT | 0001 | 全部 | 主機 | IN事務中需要的裝置和端點地址 |
令牌 | IN | 1001 | 全部 | 主機 | IN事務中需要的裝置和端點地址 |
令牌 | SOF | 0101 | 幀開始 | 主機 | SOF識別符號和幀號 |
令牌 | SETUP | 1101 | 控制 | 主機 | 用於Setup事務的裝置和端點地址 |
資料 | DATA0 | 0011 | 全部 | 主機、裝置 | 資料交替或資料PID序列 |
資料 | DATA1 | 1011 | 全部 | 主機、裝置 | 資料交替或資料PID序列 |
資料 | DATA2 | 0111 | 等時 | 主機、裝置 | 資料PID序列 |
資料 | MDATA | 1111 | 等時、分割事務 | 主機、裝置 | 資料PID序列 |
握手 | ACK | 0010 | 控制、批量、中斷 | 主機、裝置 | 接收端接收到正確的資料資訊包 |
握手 | NAK | 1010 | 控制、批量、中斷 | 裝置 | 接收端不能接收資料,或者傳送端無法傳送資料或無資料要傳送 |
握手 | STALL | 1110 | 控制、批量、中斷 | 裝置 | 控制請求不被支援或端點被停止 |
握手 | NYET | 0110 | 控制寫、批量、OUT、分割事務 | 裝置 | 正確的接收了資料資訊包,但還沒準備好接收下一個,或集線器還沒有將資料資訊包分割完成 |
特殊 | PRE | 1100 | 控制、中斷 | 主機 | 主機發出的先行訊號 |
特殊 | ERR | 1100 | 全部 | 集線器 | 由集線器返回的錯誤 |
特殊 | SPLIT | 1000 | 全部 | 主機 | 分割事務 |
特殊 | PING 0100 | 控制寫、批量、OUT | 主機 | PING測試 | |
特殊 | EXT | 0000 | 無 | 主機 | 擴充套件,未使用 |
4.2.區別
在框架上,超高速是向後相容USB2.0的,但是二者在協議上還是有一些重大的不同,主要區別如下:
- USB2.0的資訊包分為令牌、資料和握手,超高速也是這三種類型,但是用法不同;超高速令牌包整合在頭包和DPH中,各種型別的握手包都是TP包形式;對於OUT事務,令牌被合併在資料包中;對於IN事務,令牌被握手包代替
- USB2.0不支援突發(bursting)傳輸,超高速支援持續突發傳輸,一個微幀內最多可以傳輸16個資訊包
- USB2.0是半雙工(half-duplex)匯流排,超高速是全雙工(dual-simplex)匯流排,支援同時收發資料
- USB2.0使用輪詢模式,超高速使用非同步通知方式
- USB2.0不支援流能力,超高速支援批量(bulk)端點的流(Stream)方式
- USB2.0在同步傳輸(isochronous)間隔中沒有進入低功耗狀態的機制,超高速則允許同步傳輸服務間隔中自動進入低功耗狀態(不服務的時間段進入低功耗狀態);超高速主機控制器在服務間隔前傳送一個PING包到裝置,以使裝置在傳輸之前轉變成活動狀態
- USB2.0裝置無法通知主機控制器自己在進入低耗電狀態前可容忍的延遲時間(裝置通知主機自己進入低功耗狀態的最長延遲時間),超高速裝置則提供可容忍的延遲時間(Latency Tolerance)訊息
- USB2.0以固定的1ms(全速)/125us(高速)間隔傳輸幀/微幀。超高速裝置可以傳送間隔調整(Interval Adjustment)訊息給主機,以調整幀間隔
- USB2.0電源管理總是主機導向(主機初始化)的;超高速鏈路兩端都支援電源管理,因此不管何時需要空閒,需要退出,需要通訊,每個鏈路能獨立的進入低功耗狀態
- USB2.0的資訊包是廣播方式,每個連線的裝置解析每個資訊包的地址、端點、方向資訊來決定自己是否應該響應;超高速資訊包有路由資訊,HUB決定資訊包要送達那個裝置,只有一個例外,等時時間戳包(Isochronous Timestamp Packet,ITP)廣播到每一個裝置