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


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

    1、USB特點

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

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

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

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

總有以下個狀態,

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設備操作

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

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

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

5、USB傳輸

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

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

低速 USB 設備不支持批量傳輸,高速批量端點的最大包長度為 512,全速批量端點的最大包長度可以為 8、16、32、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. 在一幀內如果有多余的未用時間,並且沒有同步和中斷傳輸,可以用來進行控制傳輸。

6、USB的編碼方案

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

7、USB的數據格式

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

1、同步域(SYNC),八位,值固定為0000 0001,用於本地時鍾與輸入同步

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

3、地址域(ADDR):七位地址,代表了設備在主機上的地址,地址000 0000被命名為零地址,是任何一個設備第一次連接到主機時,在被主機配置、枚舉前的默認地址,由此可以知道為什么一個USB主機只能接127個設備的原因。

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

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

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

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

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

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

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

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

幀起始包的格式:

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

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

SYNC+PID+0~1023字節+CRC16

3、握手包:結構最為簡單的包,格式如下

SYNC+PID

8、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毫安。這意味着,對於MP3、手機充電來說,采用USB3.0傳輸的話,充電效率將成倍的提高,從而大大節約充電時間。據悉這是由於USB3.0增加5個針腳造成的。

 


免責聲明!

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



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