接口與協議學習筆記-USB協議_USB2.0_USB3.0不一樣版本(三)

      USB(Universal Serial Bus)全稱通用串口總線,USB爲解決即插即用需求而誕生,支持熱插拔。USB協議版本有USB1.0、USB1.一、USB2.0、USB3.1等,USB2.0目前比較經常使用,USB是主從模式的結構,設備與設備之間、主機與主機之間不能互連,爲解決這個問題,擴大USB的應用範圍,出現了USB OTG,全拼 ON The Go。USB OTG 同一個設備,在不一樣的場合下可行在主機和從機之間切換。併發

    一、USB特色大數據

         USB1.0和USB1.1支持1.5Mb/s的低速模式和12Mb/bs的全速模式。在USB2.0以上支持480Mb/s的高速模式。 編碼

 二、  自供電設備:設備從外部電源獲取工做電壓 總線供電設備:設備從VBUS(5v) 取電 。對總線供電設備,區分低功耗和高功耗USB設備 spa

低功耗總線供電設備:最大功耗不超過100mA 
高功耗總線供電設備: 枚舉時最大功耗不超過100mA,枚舉完成配置結束後功耗不超過500mA 
設備在枚舉過程當中,經過設備的配置描述符向主機報告它的供電配置(自供電/總線供電)以及它的功耗要求視頻

三、 USB總線信號:
        USB使用的是差分傳輸模式,兩個數據線D+和D- 
        差分信號1:D+ > VOH(min) (2.8V) 且D- < VOL(max)(0.3V) 
        差分信號0:D- > VOH and D+ < VOL  blog

總有如下個狀態,接口

J狀態(高電平):D+ 高,D- 低
K狀態(低電平):D+低,D- 高
SEO狀態:D+ 低,D- 高
Reset信號:D+ and D- < VOL for >= 10ms 
主機在要和設備通訊以前會發送Reset信號來把設備設置到默認的未配置狀態。即主機拉低兩根信號線(SE0狀態)
並保持10ms 
Idle狀態:J狀態數據發、送先後總線的狀態 
Suspend狀態:3ms以上的J狀態 事務

                               SYNC: 3個KJ狀態切換,後跟隨2位時間的K狀態同步

Resume信號:20ms的K狀態+低速EOP 
主機在掛起設備後可經過翻轉數據線上的極性並保持20ms來喚醒設備,並以低速EOP信號結尾 
帶遠程喚醒功能的設備還可本身發起該喚醒信號;前提是設備已進入idle狀態至少5ms,而後發出喚醒K信號,維持1ms到15ms並由主機在1ms內接管來繼續驅動喚醒信號 
SOP:從IDLE狀態切換到K狀態 
EOP:持續2位時間的SE0信號,後跟隨1位時間的J狀態 
Keep alive即低速EOP信號效率

喚醒slave設備操做

四、USB插入檢測和速度檢測

     全速高速設備在D+接上拉1.5k電阻,低速設備在D-接上拉1.5K電阻。主機檢測到某一個數據線電平拉高並保持了一段時間,就認爲有設備連上來了, 先把高速設備檢測爲全速設備,而後再經過「Chirp序列」的總線握手機制來識別高速和全速設備。主機必需在驅動SE0狀態以復位設備以前,馬上採樣總線狀態來判斷設備的速度 。

    D+和D-數據線上的下拉電阻起做用,使得兩者都在低電平;主機端看來就是個SE0狀態;一樣地,當數據線上的SE0狀態持續一段時間了,就被主機認爲是斷開狀態。

五、USB傳輸

     一個傳輸有多個事務組成,一個事務由2到3個包組成。傳輸又分爲四種類型:批量傳輸、等時(同步)傳輸、中斷傳輸、控制傳輸。注意:USB傳輸數據先發數據低位再發高位數據。

   USB協議定義了四種傳輸類型: 
批量(大容量數據)傳輸(Bulk Transfers): 非週期性,突發  
大容量數據的通訊,數據能夠佔用任意帶寬,並容忍延遲 。如USB打印機、掃描儀、大容量儲存設備等 

低速 USB 設備不支持批量傳輸,高速批量端點的最大包長度爲 512,全速批量端點的最大包長度能夠爲 八、1六、3二、64。

      批量傳輸在訪問 USB 總線時,相對其餘傳輸類型具備最低的優先級,USB HOST 老是優先安排其餘類型的傳輸,當總線帶寬有富餘時才安排批量傳輸。

      高速的批量端點必須支持PING 操做,向主機報告端點的狀態,NYET 表示否認應答,沒有準備好接收下一個數據包,ACK 表示確定應答,已經準備好接收下一個數據包。


中斷傳輸(Interrupt Transfers): 週期性,低頻率
容許有限延遲的通訊 如人機接口設備(HID)中的鼠標、鍵盤、軌跡球等

中斷傳輸是一種保證查詢頻率的傳輸。中斷端點在端點描述符中要報告它的查詢間隔,主機會保證在小於
這個時間間隔的範圍內安排一次傳輸。

中斷傳輸是一種輪詢的傳輸方式,是一種單向的傳輸,HOST經過固定的間隔對中斷端點進行查詢,如有數據傳輸或能夠接收數據則返回數據或發送數據,不然返回NAK,表示還沒有準備好。

      中斷傳輸的延遲有保證,但並不是實時傳輸,它是一種延遲有限的可靠傳輸,支持錯誤重傳。 
      對於高速/全速/低速端點,最大包長度分別能夠達到1024/64/8 Bytes。

      高速中斷傳輸不得佔用超過 80%的微幀時間,全速和低速不得超過 90%。

      中斷端點的輪詢間隔由在端點描述符中定義,全速端點的輪詢間隔能夠是1~255mS,低速端點爲10~255mS,高速端點爲(2interval-1)*125uS,其中 interval取 1到 16之間的值。

      除高速高帶寬中斷端點外,一個微幀內僅容許一次中斷事務傳輸,高速高帶寬端點最多能夠在一個微幀內進行三次中斷事務傳輸,傳輸高達 3072 字節的數據。

      所謂單向傳輸,並非說該傳輸只支持一個方向的傳輸,而是指在某個端點上該傳輸僅支持一個方向,或輸出,或輸入。若是須要在兩個方向上進行某種單向傳輸,須要佔用兩個端點,

      分別配置成不一樣的方向,能夠擁有相同的端點編號。


等時(同步)傳輸(Isochronous Transfers): 週期性 
持續性的傳輸,用於傳輸與時效相關的信息,而且在數據中保存時間戳的信息 ,如音頻視頻設備

等時(同步)傳輸用在數據量大、對實時性要求高的場合,如音頻設備,視頻設備等,這些設備對數據的延遲很敏感。對於音頻或視頻設備數據的100%正確性要求不高,少許的數據錯誤是能夠容忍的,主要是保證數據不能停頓,因此等時傳輸是不保證數據100%正確的。當數據錯誤時,再也不重傳操做。所以等時傳輸沒有應答包,數據是否正確,由數據的CRC校驗來確認。


控制傳輸(Control Transfers): 非週期性,突發
用於命令和狀態的傳輸

                              控制傳輸可分爲三個過程:(1)創建過程 (2)數據過程(可選) (3)狀態過程
                              特性:  
                             每一個USB設備都必須有控制端點,支持控制傳輸來進行命令和狀態的傳輸。USB主機驅動將經過控制傳輸與USB設備的控制端點通訊,完成USB設備的枚舉和配置 
                             方向:  
                             控制傳輸是雙向的傳輸,必須有IN和OUT兩個方向上的特定端點號的控制端點來完成兩個方向上的控制傳輸

控制傳輸是一種可靠的雙向傳輸,一次控制傳輸可分爲三個階段。第一階段爲從HOST到Device的SETUP事務傳輸,這個階段指定了這次控制傳輸的請求類型;

      第二階段爲數據階段,也有些請求沒有數據階段;第三階段爲狀態階段,經過一次IN/OUT 傳輸代表請求是否成功完成。

      控制傳輸經過控制管道在應用軟件和 Device 的控制端點之間進行,控制傳輸過程當中傳輸的數據是有格式定義的,USB 設備或主機可根據格式定義解析得到的數據含義。

      其餘三種傳輸類型都沒有格式定義。

      控制傳輸對於最大包長度有固定的要求。對於高速設備該值爲 64Byte;對於低速設備該值爲 8;全速設備能夠是 8或 16或 32或 64。

      最大包長度 表徵了一個端點單次接收/發送數據的能力,實際上反應的是該端點對應的Buffer 的大小。Buffer 越大,單次可接收/發送的數據包越大,反之亦反。

      當經過一個端點進行數據傳輸時,  若數據的大小超過該端點的最大包長度時,須要將數據分紅若干個數據包傳輸,而且要求除最後一個包外,全部的包長度均等於該最大包長度。

      這也就是說若是一個端點收到/發送了一個長度小於最大包長度的包,即意味着數據傳輸結束。

      控制傳輸在訪問總線時也受到一些限制,如:

        a. 高速端點的控制傳輸不能佔用超過 20%的微幀,全速和低速的則不能超過 10%。 
        b. 在一幀內若是有多餘的未用時間,而且沒有同步和中斷傳輸,能夠用來進行控制傳輸。

六、USB的編碼方案

     USB採用不歸零取反來傳輸數據,當傳輸線上的差分數據輸入0時就取反,輸入1時就保持原值,爲了確保信號發送的準確性,當在USB總線上發送一個包時,傳輸設備就要進行位插入***做(即在數據流中每連續6個1後就插入一個0)。

七、USB的數據格式

   (一)域:是USB數據最小的單位,由若干位組成(至因而多少位由具體的域決定),域可分爲七個類型:

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

二、標識域(PID),由四位標識符+四位標識符反碼構成,代表包的類型和格式,這是一個很重要的部分,這裏能夠計算出,USB的標識碼有16種,具體分類請看問題五。

三、地址域(ADDR):七位地址,表明了設備在主機上的地址,地址000 0000被命名爲零地址,是任何一個設備第一次鏈接到主機時,在被主機配置、枚舉前的默認地址,由此能夠知道爲何一個USB主機只能接127個設備的緣由。

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

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

六、數據域(DATA):長度爲0~1023字節,在不一樣的傳輸類型中,數據域的長度各不相同,但必須爲整數個字節的長度

七、校驗域(CRC):對令牌包和數據包(對於包的分類請看下面)中非PID域進行校驗的一種方法,CRC校驗在通信中應用很泛,是一種很好的校驗方法,至於具體的校驗方法這裏就很少說,請查閱相關資料,只須注意CRC碼的除法是模2運算,不一樣於10進制中的除法。

(二)包:由域構成的包有四種類型,分別是令牌包、數據包、握手包和特殊包,前面三種是重要的包,不一樣的包的域結構不一樣,介紹以下

一、令牌包:可分爲輸入包、輸出包、設置包和幀起始包(注意這裏的輸入包是用於設置輸入命令的,輸出包是用來設置輸出命令的,而不是放據數的)

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

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

幀起始包的格式:

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

二、數據包:分爲DATA0包和DATA1包,當USB發送數據的時候,當一次發送的數據長度大於相應端點的容量時,就須要把數據包分爲好幾個包,分批發送,DATA0包和DATA1包交替發送,即若是第一個數據包是 DATA0,那第二個數據包就是DATA1。但也有例外狀況,在同步傳輸中(四類傳輸類型中之一),全部的數據包都是爲DATA0,格式以下:

SYNC+PID+0~1023字節+CRC16

三、握手包:結構最爲簡單的包,格式以下

SYNC+PID

八、USB 2.0 和USB 3.0 對比 

  1. USB 2.0基於半雙工二線制總線,兩根線的差分信號來傳輸數據,只能提供單向數據流傳輸;而USB 3.0採用了TxRx四線制差分信號線,相似於PCIe總線,故而支持雙向併發數據流傳輸。
  2.  USB3.0的最大數據傳輸速率爲5Gbps,與USB2.0的480Mbps相比,提高到了10倍以上。
  3.   USB3.0芯片大小目標與現有的USB2.0芯片至關,封裝尺寸爲6mm×6mm~7mm×7mm
  4.  USB3.0鏈接器爲了保證與現有標準的兼容性,USB3.0引入了新的鏈接器,包括兩種類型:標準規格和麪向便攜設備的Micro規格。標準規格又包含兩種類型:A型與B型。

    A型接口:USB2.0鏈接器在前,而USB3.0鏈接器在後

    B型接口:USB3.0鏈接器設置於USB2.0鏈接器的上方。

  5. 電源電流在一樣的5V電壓下,USB3.0的電源電流可達到900mA,而USB2.0的100mA。
  6. USB3.0將會智能管理USB設備,最大限度地杜絕空置的電能浪費,此舉對筆記本用戶會帶來必定的好處;USB3.0增大了供應電流。在以前的USB規範中,設備取電通常最大能夠獲得100毫安的電流,若是採用高電量的模式,則獲得的電流是500毫安,若是須要更大的電流,則只能藉助變壓器,然而USB3.0可供應的最大電流是900毫安。這意味着,對於MP三、手機充電來講,採用USB3.0傳輸的話,充電效率將成倍的提升,從而大大節約充電時間。據悉這是因爲USB3.0增長5個針腳形成的。
相關文章
相關標籤/搜索