usb2.0介紹-1、概述


 日常生活中我們經常接觸usb設備,比如鍵盤、鼠標、u盤等等,都是通過usb接口連接主機。
Usb規范的版本現在有3.0 2.0 1.0 等,不同版本的區別主要在於傳輸速率不同,usb2.0支持高速、全速、低速模式,接下來的介紹都是基於usb2.0規范。

  • 主機和設備

按照職能,usb分為兩種角色,主機和設備。
usb協議的特性是,建立連接之后,主機和設備之間的通信,都是由主機主動發起的,設備只能接收和響應主機的請求。
而按照速度划分,usb主機又分為:高速主機和全速主機。usb設備分為:高速、全速和低速的設備。

  • 接口信號和總線狀態

Usb2.0接口只用到了4根信號,從上到下是電源線,DP/DM,地線。
電源線適用於主機給usb設備供電。
而DP/DM是一組差分信號線,它們的大小相等但是極性相反,目的是防止數據傳輸時受到干擾,這兩根線主要用於數據傳輸。

不同速度模式的設備不僅在傳輸速率上有不同,對總線上狀態的定義也有一些不同。

比如在低速模式下,差分信號1表示總線狀態k,但是在全速和高速模式下,這種狀態被定義為總線狀態J。 協議定義了這一些總線狀態,有助於我們去理解一些更加抽象的設備行為。
接下來,就以高速主機和高速設備的連接為例,介紹和梳理一下協議的主要內容。

  • 建立連接

現在假設一個usb設備插入了主機,這時,設備與主機之間會先確認設備的連接:
設備插入后,主機會通過Vbus給設備供電。
設備檢測到Vbus上的變化后,會拉高DP信號讓總線產生狀態J。
主機從而檢測到DP/DM的變化,確定有設備接入,隨即向設備發出reset信號,現象是使總線處於SE0的狀態,至少保持10ms。
設備檢測到總線SE0狀態后開始復位。

  • 高速握手

 建立連接的過程中,如果設備屬於高速設備,設備會進一步嘗試進行高速握手。
高速設備在檢測到主機發出的reset(總線SE0狀態)后,會在不少於2.5μs且不超過3ms時間內發起握手。
設備發起握手的標志是驅動總線到Chirp k狀態,保持至少1ms,並在reset7ms內結束。
主機檢測到chirp k狀態保持超過2.5us后,認為chirp k狀態有效,隨后主機主動開始發出交替的chirp k/j信號。
設備如果檢測到3對chirpk/j后,認為握手成功,進入hs狀態。
而主機會在復位結束之前,繼續發送chirp k/j對,來保持總線活躍,不進入suspend狀態。
(chirp j/k是一種電壓差的狀態,他們比普通的j/k狀態有更高的電壓差。)

  •  枚舉過程

  如圖是一個設備的狀態轉移圖,可以看到設備在連接、復位結束之后,會處於一個default狀態。這時雖然設備與主機已經建立了鏈接,但還需要經過枚舉來了解設備的信息,進而給設備合適的配置。
介紹枚舉過程前,需要先了解usb傳輸數據的方式。

    • 數據傳輸——包

usb接口雖然只有DPDM用於數據傳輸,但是在usb內部的控制器間,會使用UTMI接口並行地傳輸數據。

usb之間的數據傳輸,最小的單位是包,不同的包組成事務,不同的事務組成不同的傳輸。
每種包都包含PID字段,表示具體的功能。
包按照功能類型,可以分為三種:令牌包、數據包、握手包。


令牌包的組成如圖所示,它由主機發送,包含特殊的指令信息。IN包是通知設備返回一些數據,out包是通知設備接收一些數據,SOF是幀起始包,在每幀開始的時候廣播發送,SETUP建立包只在控制傳輸中,它發出后,主機隨后會發出一個data0數據包,指示更加詳細的請求。


常用的令牌包根據結構如下,SOF包括PID和幀編號,其他如IN包、out包SETUP包則包括了pid、目的地址、目的EP號。

 

 

數據包的組成如中間圖所示,既可以由主機用來發送設置信息,也可以由設備發送描述符等信息給主機,結構上都是由PID和若干個字節數據組成。

 

最后是握手包,如右圖所示,主機設備都能發送,用於反饋數據包的接收狀態。結構上只由pid組成。

    • 數據傳輸 —— 事務

 事務可以分成三類 :
Setup transaction:主機用來向設備發送控制命令
Data IN transaction:主機用來從設備讀取數據
Data OUT transaction:主機用來向設備發送數據
每次事務一般由:令牌包、數據包、可選的握手包組成。

In事務是主機用來向設備請求數據的事務
正常的In事務有三個階段:PID=In Token – Data – handshake

第一個階段由主機發送一個In包,第二個階段設備返回一組數據,第三個階段就是主機確認收到返回ack。
不正常的In事務有兩個階段:

 首先主機發送一個In包通知設備發送數據,但由於設備沒有數據返回或者處於停滯狀態,設備就會直接返回NAK或者STALL握手包。

 

out事務是主機向設備發送數據的事務
out事務也有三個階段:Out Token – Data – handshake

 

第一個階段主機發送一個Out令牌包,第二個階段主機會向設備發送一組數據包,第三個階段中,如果設備正確接收數據則返回ack。如果設備停止或者無法接收數據,則返回NAK或STALL。

 

Setup事務等同於控制傳輸,它一般發生在設備連接之初,用於獲取設備描述符、配置描述符等特殊請求操作。是帶有控制命令的傳輸。
setup事務會由setup階段、可選的data階段(可選)、status階段組成
在setup階段中,主機先發送一個setup令牌包,緊接着發送一個8字節長度的data0包,這個data0包中會包括一個特殊請求信息(req)。設備必須接受並返回一個握手包。

這個8字節的data0包結構如下圖,第一個字節是reqtype,包含數據方向、接收結構等信息。第2個字節是request,不同的值對應不同的請求,請求包括獲取、設置描述符、獲取、設置端口狀態等等。具體請求對應的值,可以在協議中找到。第3-6個字節會根據請求的不同,做不同的解釋。第7-8個字節,表示下一個階段即data階段將傳輸數據的長度,長度為0,即表示不需要數據階段。

 然后如果這次的控制傳輸是不需要數據交換的,那在setup階段結束后,會直接進入status階段,由一個數據長度為0的In事務作為傳輸的結束。

而如果這次的傳輸需要數據階段,則數據階段會是一個或多個的IN事務(或者Out事務)。
再在status階段,如果有數據階段且數據階段都是In事務,則status事務由一個數據長度為0的Out事務作為結束。
如果有數據階段且數據階段都是out事務,則status事務會由一個數據長度為0的In事務作為結束.

 

 

    •  數據傳輸 —— 傳輸

不同的事務組成不同的傳輸:控制傳輸(SETUP事務)、中斷傳輸、同步傳輸、批量傳輸。
控制傳輸:即之前介紹的SETUP事務,用於完成特定的請求,特別是枚舉過程,全部都由控制傳輸完成
批量傳輸:用於傳輸數據量大、要求傳輸不出錯,但對實時性沒有要求的數據,適用於打印機、存儲設備等。
中斷傳輸:一般用於傳輸數據量小、具有周期性且要求響應速度較快的數據,和批量傳輸的區別僅在於事務傳輸發生的端點不一樣、支持的最大包長度不一樣、優先級不一樣等,組成上是一樣的。
同步傳輸:沒有握手機制的傳輸,在傳輸數據時不考慮數據出錯的情況,沒有錯誤重傳機制,適用於周期性、低延時性但不需要保證傳輸質量的數據,比如麥克風、喇叭等音頻視頻數據。

    • 枚舉過程

知道了數據的傳輸方法,枚舉就可以簡單理解為一些特定請求的控制傳輸的集合。
主機對設備進行枚舉,主要目的是獲取設備描述符,掌握設備信息,然后對設備進行一些基本的配置。所以枚舉的一般過程就是:
1.獲取設備描述符
2.設置地址
3.獲取完整的設備描述符
4.獲取配置描述符
5.獲取字符描述符,如果有的話
6.設置配置描述符(描述符的值是根據配置描述符得到的)
主機完成對設備的枚舉之后,就可以根據需要,進行各類數據傳輸了。

  • 掛起與喚醒

為了降低usb設備的功耗,協議規定了掛起和喚醒兩種事件。
和設備連接時類似,掛起和喚醒事件也需要判斷總線狀態情況。
當總線上保持空閑狀態超過3ms時,設備就會將其視為一個掛起信號。
掛起的情況又分為兩種:全局總線掛起和部分總線掛起
全局總線掛起是指,主機停止總線上的所有傳輸,每個設備在收到掛起信號后,各自進入掛起狀態
部分總線掛起,則是主機向對應hub發送SetPortFeature(PORT_SUSPEND)請求(通過控制傳輸),使端口停止轉發數據,下行端口總線即進入空閑狀態,下面的設備就會進入掛起狀態了

設備處於掛起狀態時,任何總線上的活動(非空閑狀態)都可以把設備喚醒/恢復,從而退出掛起狀態。對於全局掛起事件,主機可以主動發出恢復信號將設備喚醒;對於部分掛起事件,主機可以向對應端口發送ClearPortFeature(PORT_SUSPEND)將其喚醒。當然,具備遠程喚醒功能的主機和設備還可以通過設備驅動總線產生恢復信號的方法,主動進行喚醒。

  • 總結

usb規范中對於DMDP信號及它們的變化定義了很多總線狀態。
在處理與電源管理、速度配置相關的事件時,需要清楚地掌握這些狀態及它們在特定時間內的變化,有很多細節上的內容需要注意。(這也是自己還沒有了解全面的地方)
另一方面USB規范也定義的各種事務及傳輸,在處理數據交換、枚舉、端點停止等事件的時候,需要掌握這些事務和傳輸的特點。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM