1. 程式人生 > >USB2.0概述及協議基礎

USB2.0概述及協議基礎

目錄

Ⅰ USB匯流排介面
1 USB介面標準
2 USB匯流排訊號
3 USB資料編解碼和位填充
4 USB拓撲結構
5 USB邏輯部件

Ⅱ USB裝置
1 USB裝置供電方式
2 USB裝置插入檢測機制
3 USB裝置狀態
4 USB裝置列舉過程
5 USB描述符

Ⅲ USB傳輸
1 USB傳輸格式  
2 包packet  
3 事務transaction
4 傳輸transfer

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

USB應用範圍

ⅠUSB匯流排介面

1 USB介面標準

標準的USB聯結器有A型、B型和Mini B型,每個型號又分為插頭和插座。

USB介面標準2 USB匯流排訊號

USB使用差分傳輸模式,兩根資料線D+和D-。

差分訊號1:D+>2.8VD-<0.3V;
差分訊號0:D->2.8VD+<0.3V
  • J狀態和K狀態
    低速下:D+為“0”,D-為“1”是為“J”狀態,“K”狀態相反;
    全速下:D+為“1”,D-為“0”是為“J”狀態,“K”狀態相反;
    高速同全速。
  • SE0狀態
    D+為“0”,D-為“0”
  • IDLE狀態
    低速下空閒狀態為“K”狀態;
    全速下空閒狀態為“J”狀態;
    高速下空閒狀態為“SE0”狀態。

針對全速模式,有以下幾個重要訊號:

  • Reset訊號
    主機在要和裝置通訊之前會發送Reset訊號來把裝置配置到預設的未配置狀態。即SE0狀態保持10ms。
  • Resume訊號
    20ms的K狀態+低速EOP
  • Suspend訊號
    3ms以上的J狀態
  • SOP訊號
    從IDLE狀態切換到K狀態
  • EOP訊號
    持續2位時間的SE0訊號,後跟隨1位時間的J狀態
  • SYNC訊號
    3個重複的K、J狀態切換,後跟隨2位時間的K狀態
suspend、resume訊號SYNC訊號

3 USB資料編解碼和位填充

USB採用NRZI(非歸零編碼)對傳送的資料包進行編碼。即:
輸入資料0,編碼成“電平翻轉”;輸入資料1,編碼成“電平不變”

NRZI編碼

位填充是為了保證傳送的資料序列中有足夠多的電平變化。填充的物件時輸入資料,即先填充後編碼。資料流中每6個連續的“1”,就要插入1個“0”。
接收方解碼NRZI碼流,然後識別出填充位,並丟棄它們。

位填充

4 USB拓撲結構

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

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

USB拓撲結構USB體系結構

5 USB邏輯部件

USB邏輯部件

Ⅱ USB裝置

1 USB裝置供電方式

USB裝置有兩種供電方式:
1)自供電裝置:裝置從外部電源獲取工作電壓
2)匯流排供電裝置: 裝置從VBUS(5v)取點

對匯流排供電裝置,區分低功耗和高功耗USB裝置。
低功耗裝置是最大功耗不超過100mA。
高功耗裝置是列舉時最大功耗不超過100mA,列舉完成配置結束後功耗不超過500mA。

裝置在列舉工程中,通過配置描述符來向主機報告它的供電方式和功耗要求的。

2 USB裝置插入檢測機制


沒有裝置連上主機時,主機的D+和D-都在低電平(SE0狀態),當SE0狀態 持續一段時間了,就被主機認為是斷開狀態。
當裝置連上主機時,主機檢測到某一資料線電平拉高並持續一段時間,就認為有裝置連上來了。主機必須在復位裝置前,立即取樣匯流排狀態來判斷裝置的速度。

3 USB裝置狀態

USB裝置有插入、供電、初始化、分配地址、配置和掛起六中狀態,其狀態轉移圖如下。

USB裝置狀態

4 USB裝置列舉過程

對應USB裝置的狀態,host對USB裝置會有以下活動:


在列舉過程中,都是使用控制傳輸。

  • 復位階段
    USB主機檢測到USB裝置插入後,就會對裝置復位。USB裝置在匯流排復位後其地址為0,這樣主機就可以通過地址0和那些剛剛插入的裝置通訊。USB主機往地址為0的裝置的端點0傳送獲取裝置描述符的標準請求。裝置會將裝置描述符返回給主機,主機在成功獲取到資料包後,就會返回一個確認資料包給裝置,從而進入接下來的分配地址階段。
  • 分配地址階段
    主機對裝置又一次復位,就進入到分配地址階段。主機往地址為0的裝置的端點0傳送一個設定地址的請求,新的裝置地址就包含在建立過程的資料包中。具體的地址由主機負責管理,主機會分配一個唯一的地址給剛接入的裝置。裝置在收到這個建立過程後,就會進入到狀態過程。裝置等待主機請求狀態返回,收到狀態請求後,裝置就返回0長度的狀態資料包。如果主機確認該狀態包已經正確收到,就會發送應答包ACK給裝置,裝置在收到這個ACK之後,就要啟用新的裝置地址了。這樣裝置就分配到了一個唯一的裝置地址。
  • 獲取描述符階段
    獲取描述符可以形象地表述如下:

Host:你是什麼裝置?

Device:12 01 0100....Device Descriptor
Host:你有幾種功能?
Device:09 02 09....Configuration Descriptor
Host:每個功能有幾個介面?
Device:09 04 00....Interface Descriptor
Host:每個介面使用哪幾個端點?
Device:06 05 82....Endpoint Descriptor
Host:好了,我知道你是誰了,開始傳輸裝置吧!
Device:OK,Read Go!

5 USB描述符

USB描述符有以下11類:

每種描述符的第一個位元組描述該描述符包含的位元組數目,第二個節描述該描述的型別。

  • Device Descriptor

  • Configuration Descriptor

  • Interface Descriptor

  • Endpoint Descriptor

  • String Descriptor

Ⅲ USB傳輸

1 USB傳輸格式

USB總線上傳輸資料是以包(packet)為基本單位的,必須把不同的包組織成事務(transaction)才能傳輸資料。
USB協議規定了四種傳輸(transfer)型別:批量傳輸、同步傳輸、中斷傳輸和控制傳輸。其中,批量傳輸、同步傳輸和中斷傳輸每傳輸一次資料都是一個事務,控制傳輸包括三個過程,建立過程和狀態過程分別是一個事務,資料過程則可能包含多個事務。

2 包packet

一個包被分為不同域,根據不同型別的包,所包含的域是不一樣的。但都要以同步域SYNC開始,緊跟一個包識別符號PID,最終以包結束符EOP來結束這個包。

packet的組成
  • PID域
    PID是用來標識一個包的型別的。它共有8位,只使用4位(PID0PID3),另外4位是PID0PID3的取反,用來校驗PID。

    PID
    PID規定了四類包:令牌包、資料包、握手包和特殊包。同類的包又各分為具體的四種包。包型別
    僅在幀首傳輸一次SOF包。
  • 地址域
    地址共佔11位,其中低7位是裝置地址,高4位是端點地址。

    地址
  • 幀號域
    幀號佔11位,主機每發出一個幀,幀號都會自加1,當幀號達到0x7FF時,將歸零重新開始計數。

  • 資料域
    根據傳輸型別的不同,資料域的資料長度從0到1024位元組不等。

    資料長度
  • CRC域

    CRC校驗
A. 令牌包

令牌包有四種:

  • OUT: 通知裝置將要輸出一個數據包
  • IN: 通知裝置返回一個數據包
  • SETUP: 只用在控制傳輸中,也是通知裝置將要輸出一個數據包,與OUT令牌的區別是:只使用DATA0資料包,且只能發到device的控制端點
  • SOF: 在每幀開始時以廣播的形式傳送,針對USB全速裝置,主機每1ms產生一個幀,USB主機會對當前幀號進行統計,每次幀開始時通過SOF包傳送幀號。

OUT/IN/SETUP令牌包沒有幀號域和資料域。

OUT/IN/SETUP令牌包結構

SOF令牌包沒有地址域和資料域。

SOF令牌包結構
B.資料包

資料包沒有地址域和幀號域。根據transfer的型別不同,資料包最大長度有所不同。

資料包結構
C.握手包

握手包有四種可選:

  • ACK: 傳輸正確完成
  • NAK: 裝置暫時沒有準備好接收資料,或沒有準備好傳送資料
  • STALL: 裝置不能用於傳輸
  • NYET/ERR: 僅用於高速傳輸,裝置沒有準備好或出錯

握手包僅有PID域。

握手包結構

3 事務transaction

事務可以分成三類

  • setup事務:主機用來向裝置傳送控制命令
  • 資料輸入事務:主機用來從裝置讀取資料
  • 資料輸出事務:主機用來向裝置傳送資料

事務組成:Token packet + Data packet + 可選的Handshake packet

4 傳輸transfer

USB協議定義了四種傳輸型別:控制傳輸(Control transfer)、大容量資料傳輸(Bulk transfer)、同步傳輸(Isochronous transfer)和中斷傳輸(Interrupt transfer)。

傳輸型別特點應用場景
控制傳輸非週期性,突發命令和狀態的傳輸
大容量傳輸非週期性,突發資料可以佔用任意頻寬,容忍延遲
同步傳輸週期性持續性傳輸,傳輸與時效相關的資訊,並且在資料中儲存時間戳的資訊
同步傳輸週期性,低頻率允許有延遲的通訊
A.大容量傳輸 bulk transfer
bulk transfer流程圖

圖中一個方框表示一個 Packet,灰色的包表示主機發出的包,白色的包表示Device 發出的包。批量傳輸是可靠的傳輸,需要握手包來表明傳輸的結果。若資料量比較大,將採用多次批量事務傳輸來完成全部資料的傳輸,傳輸過程中資料包的PID 按照 DATA0-DATA1-DATA0-…的方式翻轉,以保證傳送端和接收端的同步。
一次批量傳輸( Transfer)由 1 次到多次批量事務傳輸( Transaction)組成。

bulk transfer
B.中斷傳輸 interrupt transfer
interrupt transfer流程圖

中斷傳輸在流程上除不支援 PING 之外,其他的跟批量傳輸是一樣的。他們之間的區別也僅在於事務傳輸發生的端點不一樣、支援的最大包長度不一樣、優先順序不一樣等這樣一些對使用者來說透明的東西。
這裡所說的中斷,跟硬體上的中斷是不一樣的,它不是由裝置主動發出一箇中斷請求,而是由主機保證在不大於某個時間間隔內安排一次傳輸。
主機在排定中斷傳輸任務時,會根據對應中斷端點描述符中指定的查詢間隔發起中斷傳輸。中斷傳輸有較高的優先順序,僅次於同步傳輸。

中斷傳輸
C.同步傳輸 Isochronous transfer
Isochronous transfer流程圖

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

同步傳輸
D.控制傳輸 Control transfer

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

  • 建立過程 setup stage
    使用一個建立事務,如下:control transfer的setup stage流程圖
  • 資料過程 data stage
    資料過程是可選的。一個數據過程包含一筆或者多筆資料事務。資料過程的第一個資料包必須是DATA1包,然後每次正確傳輸一個數據包就在DATA0和DATA1之間交替。
  • 狀態過程 status stage
    狀態過程也是一筆批量事務。狀態過程只使用DATA1包。

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

控制傳輸

參考資料

連結:https://www.jianshu.com/p/331d51b2c9dd