1. 程式人生 > >USB協通訊議--深入理解

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. ---------------------  作者:Arrow  來源:CSDN  原文:https://blog.csdn.net/MyArrow/article/details/8484113  版權宣告:本文為博主原創文章,轉載請附上博文連結!