USB通訊協議


 
首先要了解USB枚舉過程(自己百度) https://blog.csdn.net/MyArrow/article/details/8270029
USB通訊協議

0. 基本概念

       一個【傳輸】(控制、批量、中斷、等時):由多個【事務】組成;

       一個【事務】(IN、OUT、SETUP):由一多個【Packet】組成。

       USB數據在【主機軟件】與【USB設備特定的端點】間被傳輸。【主機軟件】與【USB設備特定的端點】間的關聯叫做【pipes】。一個USB設備可以有多個管道(pipes)。

1. 包(Packet)

        包(Packet)是USB系統中信息傳輸的基本單元,所有數據都是經過打包后在總線上傳輸的。數據在 USB總線上的傳輸以包為單位,包只能在幀內傳輸。高速USB 總線的幀周期為125us,全速以及低速 USB 總線的幀周期為 1ms。幀的起始由一個特定的包(SOF 包)表示,幀尾為 EOF。EOF不是一個包,而是一種電平狀態,EOF期間不允許有數據傳輸。 
       注意:雖然高速USB總線和全速/低速USB總線的幀周期不一樣,但是SOF包中幀編號的增加速度是一樣的,因為在高速USB系統中,SOF包中幀編號實際上取得是計數器的高11位,最低三位作為微幀編號沒有使用,因此其幀編號的增加周期也為 1mS。

      • USB總線上的情形是怎樣的?

      • 包是USB總線上數據傳輸的最小單位,不能被打斷或干擾,否則會引發錯誤。若干個數據包組成一次事務傳輸,一次事務傳輸也不能打斷,屬於一次事務傳輸的幾個包必須連續,不能跨幀完成。一次傳輸由一次到多次事務傳輸構成,可以跨幀完成。

 

        USB包由五部分組成,即同步字段(SYNC)、包標識符字段(PID)、數據字段、循環冗余校驗字段(CRC)和包結尾字段(EOP),包的基本格式如下圖:

 

 

1.1 PID類型(即包類型)

 1.2 Token Packets

     此格式適用於IN、OUT、SETUP、PING。

PID            數據傳輸方向

IN              Device->Host

OUT         Host->Device

SETUP    Host->Device

PING        Device->Host

1.3 Start-of-Frame(SOF) Packets

      SOF包由Host發送給Device。
    1) 對於full-speed總線,每隔1.00 ms ±0.0005 ms發送一次;
    2) 對於high-speed總線,每隔125 μs ±0.0625 μs發送一次;
    SOF包構成如下圖所示:

 

1.4 Data Packets 

     有四種類類型的數據包:DATA0, DATA1, DATA2,and MDATA,且由PID來區分。DATA0和DATA1被定義為支持數據切換同步(data toggle synchronization)。

1.5 Handshake Packets

• ACK: 對於IN事務,它將由host發出;對於OUT、SETUP和PING事務,它將由device發出。

• NAK: 在數據階段,對於IN事務,它將由device發出;在握手階段,對於OUT和PING事務,它也將由device發出;host從不發送NAK包。

2. 事務(Transaction)

       在USB上數據信息的一次接收或發送的處理過程稱為事務處理(Transaction)即:The delivery of service to an endpoint。一個事務由一系統packet組成,具體由哪些packet組成,它取決於具體的事務。可能由如下包組成:

       • 一個token packet

       • 可選的data pcket

       • 可選的handshake packet

       • 可選的special packet

2.1 輸入(IN)事務處理

     輸入事務處理:表示USB主機從總線上的某個USB設備接收一個數據包的過程。

        •【正常】的輸入事務處理


    

      •【設備忙】時的輸入事務處理    


     •【設備出錯】時的輸入事務處理

  

2.2. 輸出(OUT)事務處理

        輸出事務處理:表示USB主機把一個數據包輸出到總線上的某個USB設備接收的過程。

    •【正常】的輸出事務處理
   

 

    •【設備忙時】的輸出事務處理

 

    •【設備出錯】的輸出事務處理

 

2.3 設置(SETUP)事務處理  

   •【正常】的設置事務處理

 

 
   •【設備忙時】的設置事務處理

 


   •【設備出錯】的設置事務處理

 

3. USB傳輸類型

       在USB的傳輸中,定義了4種傳輸類型:

       • 控制傳輸 (Control Transfer)

       • 中斷傳輸 (Interrupt Transfer)

       • 批量傳輸 (Bulk Transfer)

       • 同步傳輸 (Isochronous)

3.1 控制傳輸 (Control Transfer)

      控制傳輸由2~3個階段組成:

      1) 建立階段(Setup)

      2) 數據階段(無數據控制沒有此階段)(DATA)

      3) 狀態階段(Status)

     •每個階段都由一次或多次(數據階段)事務傳輸組成(Transaction)。

      控制數據由USB系統軟件用於配置設備(在枚舉時),其它的驅動軟件可以選擇使用control transfer實現具體的功能,數據傳輸是不可丟失的。

3.1.1 建立階段

     主機從USB設備獲取配置信息,並設置設備的配置值。建立階段的數據交換包含了SETUP令牌封包、緊隨其后的DATA0數據封包以及ACK握手封包。它的作用是執行一個設置(概念含糊)的數據交換,並定義此控制傳輸的內容(即:在Data Stage中IN或OUT的data包個數,及發送方向,在Setup Stage已經被設定)。

 

3.1.2 數據階段

     根據數據階段的數據傳輸的方向,控制傳輸又可分為3種類型:

     1) 控制讀取(讀取USB描述符)

     2) 控制寫入(配置USB設備)

     3) 無數據控制

 

     數據傳輸階段:用來傳輸主機與設備之間的數據。

     • 控制讀取

     是將數據從設備讀到主機上,讀取的數據USB設備描述符。該過程如下圖的【Control Read】所示。對每一個數據信息包而言,首先,主機會發送一個IN令牌信息包,表示要讀數據進來。然后,設備將數據通過DATA1/DATA0數據信息包回傳給主機。最后,主機將以下列的方式加以響應:當數據已經正確接收時,主機送出ACK令牌信息包;當主機正在忙碌時,發出NAK握手信息包;當發生了錯誤時,主機發出STALL握手信息包。

     • 控制寫入

       是將數據從主機傳到設備上,所傳的數據即為對USB設備的配置信息,該過程如下的圖【Control Wirte】所示。對每一個數據信息包而言,主機將會送出一個OUT令牌信息包,表示數據要送出去。緊接着,主機將數據通過DATA1/DATA0數據信息包傳遞至設備。最后,設備將以下列方式加以響應:當數據已經正確接收時,設備送出ACK令牌信息包;當設備正在忙碌時,設備發出NAK握手信息包;當發生了錯誤時,設備發出STALL握手信息包。

 

3.1.3 狀態階段

       狀態階段:用來表示整個傳輸的過程已完全結束。
       狀態階段傳輸的方向必須與數據階段的方向相反,即原來是IN令牌封包,這個階段應為OUT令牌封包;反之,原來是OUT令牌封包,這個階段應為IN令牌封包。

       對於【控制讀取】而言,主機會送出OUT令牌封包,其后再跟着0長度的DATA1封包。而此時,設備也會做出相對應的動作,送ACK握手封包、NAK握手封包或STALL握手封包。

      相對地對於【控制寫入】傳輸,主機會送出IN令牌封包,然后設備送出表示完成狀態階段的0長度的DATA1封包,主機再做出相對應的動作:送ACK握手封包、NAK握手封包或STALL握手封包。
 

 3.2 批量傳輸 (Bulk Transfer)

      •用於傳輸大量數據,要求傳輸不能出錯,但對時間沒有要求,適用於打印機、存儲設備等。

      •批量傳輸是可靠的傳輸,需要握手包來表明傳輸的結果。若數據量比較大,將采用多次批量事務傳輸來完成全部數據的傳輸,傳輸過程中數據包的PID 按照 DATA0-DATA1-DATA0-…的方式翻轉,以保證發送端和接收端的同步。
      • USB 允許連續 3次以下的傳輸錯誤,會重試該傳輸,若成功則將錯誤次數計數器清零,否則累加該計數器。超過三次后,HOST 認為該端點功能錯誤(STALL),放棄該端點的傳輸任務。
      • 一次批量傳輸(Transfer)由 1 次到多次批量事務傳輸(Transaction)組成。
      • 翻轉同步:發送端按照 DATA0-DATA1-DATA0-…的順序發送數據包,只有成功的事務傳輸才會導致 PID 翻轉,也就是說發送端只有在接收到 ACK 后才會翻轉 PID,發送下一個數據包,否則會重試本次事務傳輸。同樣,若在接收端發現接收到到的數據包不是按照此順序翻轉的,比如連續收到兩個 DATA0,那么接收端認為第二個 DATA0 是前一個 DATA0 的重傳。

      它通過在硬件級執行“錯誤檢測”和“重傳”來確保host與device之間“准確無誤”地傳輸數據,即可靠傳輸。它由三種包組成(即IN事務或OUT事務):

        1) token

        2) data

        3) handshake

1) For IN Token (即:IN Transaction)

     • ACK: 表示host正確無誤地接收到數據

     • NAK: 指示設備暫時不能返回或接收數據  (如:設備忙)

     • STALL:指示設備永遠停止,需要host軟件的干預 (如:設備出錯) 

2) For OUT Token (即:OUT Transaction)

     如果接收到的數據包有誤,如:CRC錯誤,Device不發送任何handshake包

     • ACK: Device已經正確無誤地接收到數據包,且通知Host可以按順序發送下一個數據包

        • NAK: Device 已經正確無誤地接收到數據包,且通知Host重傳數據,由於Device臨時狀況(如buffer滿)

        • STALL: 指示Device endpoint已經停止,且通知Host不再重傳

3) Bulk讀寫序列

      即由一系統IN事務或OUT事務組成。

3.3 中斷傳輸(Interrupt Transfer)

    中斷傳輸由IN或OUT事務組成。 

    中斷傳輸在流程上除不支持PING 之外,其他的跟批量傳輸是一樣的。他們之間的區別也僅在於事務傳輸發生的端點不一樣、支持的最大包長度不一樣、優先級不一樣等這樣一些對用戶來說透明的東西。
     主機在排定中斷傳輸任務時,會根據對應中斷端點描述符中指定的查詢間隔發起中斷傳輸。中斷傳輸有較高的優先級,僅次於同步傳輸。
     同樣中斷傳輸也采用PID翻轉的機制來保證收發端數據同步。下圖為中斷傳輸的流程圖。

     中斷傳輸方式總是用於對設備的查詢,以確定是否有數據需要傳輸。因此中斷傳輸的方向總是從USB設備到主機。

    

     DATA0或DATA1中的包含的是中斷信息,而不是中斷數據。

3.4 同步傳輸(Isochronous Transfer)

1) 它由兩種包組成:

        1) token

        2) data

       同步傳輸不支持“handshake”和“重傳能力”,所以它是不可靠傳輸。

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

      同步傳輸適用於必須以固定速率抵達或在指定時刻抵達,可以容忍偶爾錯誤的數據上。實時傳輸一般用於麥
克風、喇叭、UVC Camera等設備。實時傳輸只需令牌與數據兩個信息包階段,沒有握手包,故數據傳錯時不會重傳。

 

Isochronous data is continuous and real-time in creation, delivery, and consumption. Timing-relatedinformation is implied by the steady rate at which isochronous data is received and transferred. Isochronousdata must be delivered at the rate received to maintain its timing. In addition to delivery rate, isochronousdata may also be sensitive to delivery delays. For isochronous pipes, the bandwidth required is typicallybased upon the sampling characteristics of the associated function. The latency required is related to thebuffering available at each endpoint.

A typical example of isochronous data is voice. If the delivery rate of these data streams is not maintained,drop-outs in the data stream will occur due to buffer or frame underruns or overruns. Even if data isdelivered at the appropriate rate by USB hardware, delivery delays introduced by software may degrade applications requiring real-time turn-around, such as telephony-based audio conferencing.

The timely delivery of isochronous data is ensured at the expense of potential transient losses in the data stream. In other words, any error in electrical transmission is not corrected by hardware mechanisms such as retries. In practice, the core bit error rate of the USB is expected to be small enough not to be an issue.  USB isochronous data streams are allocated a dedicated portion of USB bandwidth to ensure that data can be delivered at the desired rate. The USB is also designed for minimal delay of isochronous data transfers.

 


免責聲明!

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



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