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.8V,D-<0.3V;
差分信號0:D->2.8V,D+<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包。

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


控制傳輸

參考資料

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容