usb協議簡介

來源:互聯網
上載者:User

轉自http://blog.csdn.net/linuxshadow/archive/2008/08/27/2838510.aspx 

USB協議簡介

2009-08-30 10:11

 

    USB是一種協議匯流排,即主機與裝置之間的通訊需要遵循一系列約定。協議內容較多,這裡僅作一些簡單介紹,深入學習,可參看USB規範(WWW.usb.org)。

    為了理解協議中的名稱,先看圖10.32。該圖突出了主機上的客戶軟體和USB邏輯裝置(編程涉及的裝置)之間的通訊流(Communication Flow),該通訊流跨越了USB驅動程式USBD、主控制器驅動程式UHCD、主控制器等硬體介面及其串連。端點(Endpoints)是USB裝置的惟一可識別的部分,是主機和裝置之間通訊流的終點。每一個邏輯裝置有若干個獨立端點,每一個端點在設計時被分配一個惟一的由裝置確定的標識符,稱之為端點號。

    10.32所示,將用於通訊流流動的通道稱為管道(Pipe),這是忽略了許多中間環節的很形象的稱呼,對於理解USB系統中的資訊傳輸很有協助。圖中把3個端點看成了一個介面,關於介面的說明安排在後面。

1.包格式

包的概念在前面已經介紹了,包是幀的基本成分。常用的包有令牌包、資料包和握手包。對於高速傳輸,還定義了事務分割專用令牌包(事務分割開始令牌包和事務分割完成令牌包)。

1)令牌包格式

在USB系統中,所有的通訊都是由主機發出相應的令牌所引起的。令牌包格式圖

10.33所示。

    其中PID為包標識,ADDR為裝置地址,ENDP為端點號,CRC5是對ADDR和ENDP域進行校正的5位CRC校正碼,校正多項式為:G(X)=X5+X2+1。

2)資料包格式

資料包用於主機與裝置之間的資料轉送。資料包格式10.34所示。

其中PID為包標識,DATA為資料位元,最多為8 192個位,DATA應是位元組的整數倍。CRCl6是對DATA域進行校正的16位CRC校正碼,校正多項式為:G(X)=X16+X15+X2+1.

3)握手包格式

    握手包用來指示資料被成功接收、命令被接收或被拒絕等事務狀態。握手包格式10.35所示。

    握手包僅由PII)組成。有四種常用握手包(ACK、NAK、STALL和NYET)和一個專用握手包,握手包的類型是通過PID的編碼來體現的。

·ACK包表示接收器已成功接收資料。

·NAK包表示接收裝置不能接收資料或發送裝置不能發送資料。

·STALL包表示端點已終止或不支援控制管道請求。

·NYET包表示接收器還沒有任何響應。

    4)幀開始包SOF(Start Of Frame)

在全速或低速時,主機每隔1 ms±0.0005 ms發出一個幀開始包SOF,在高速時,每隔125 μs±0.0625μs發出一個SOF,以表示開始一個新幀。SOF包的格式10.36所示。

   

   

    其中FmmeNumber為幀編號,每發一幀後FrameNumber加l,當11位都為1(即3FFH)時再加1又回到0。在SOF包中對FrameNumber域進行CRC校正。

    2.PID域格式

    上面的幾種包的開始都是PID域。PID域的格式10.37所示。

 

    低4位用來標識不同的包,高4位分別為低4位的非。這樣安排是為了保證對PID可靠的解碼,從而也使得包的其他部分能得到正確解釋。表lO.20表示了PID編碼和對應的PID類型。其中第3列是PID的低4位,即PID編碼。

    表中有兩種資料包PID,都用於資料的傳輸,以它們開頭的兩種資料包除了包PID部分有一位(及與它對應的反向位)不同外,其他部分都相同。設定這兩種資料包是為了使發送方和接收方保持同步,這涉及到一些細節,將在10.3.6小節中介紹。在圖10.38~10.40中不妨將它們看成一種資料包。

    3.USB傳輸的處理過程

    前面已經提到USB系統中有四種傳輸:一個傳輸通常要分解成若干個事務;而一個事務的處理一般要經曆令牌包、資料包和握手包三個階段,但也有一些事務的處理沒有資料包階段或沒有握手包階段,還有一些事務只有令牌包階段。下面對這四種傳輸的處理過程分別作一些介紹。

    1)塊傳輸

    用於主機與USB裝置之間的批量資料轉送,通常一次塊傳輸需要分解成若干個塊傳輸事務。顯然,一次塊傳輸的方向是單一的,對主機而言,要麼是輸入,要麼是輸出。因此,一次塊傳輸是由若干個IN事務或由若干個OUT事務組成的。圖10.38所示是塊傳輸交易處理過程。圖中的PING包和NYET包僅用於高速傳輸裝置,初學者暫時可以不考慮。

    對於要進行輸入的塊傳輸,一般要執行若干個IN事務。每執行一個IN事務時,主機都首先發出IN令牌包。裝置端點收到後做出響應,一般是回送一個資料包。如果不能回送資料,則回送NAK包或STALL包。NAK表示裝置暫時不能回送資料;STALL表示端點一直停著或需要IJSB系統軟體進行幹預;如果主機收到合法資料包,則回以ACK握手包;如果主機在接收資料時發現有錯,則不給裝置任何迴音。

    對於要進行輸出的塊傳輸,一般要執行若干個OUT事務。每執行一個OUT事務時,主機都首先發出OUT令牌包,接著發出資料包。裝置在收到資料包後,根據情況回以握手包;回以ACK表示資料已接收無誤,並通知主機可開始下一個0UT事務,以便傳送下一個資料包;回以NAK表示資料已接收無誤,但是主機不要再送資料,因為裝置暫時不能接收(如緩衝區滿);如果端點已終止,則回以STALL,通知主機不要再重發資料,因為裝置出現了故障;如果接收時出現CRC校正錯,則不發任何握手包。

    需要指出,IN事務和OUT事務不僅在塊傳輸事務中用到,在其他幾種傳輸事務中也要用到,當然,處理的過程可能有所不同。

    2)中斷傳輸

    用於資料轉送量小,無周期性,但對回應時間敏感,要求馬上響應的資料轉送。中斷傳輸的名字暗示一個裝置可以引起一個硬體中斷,這個硬體中斷將使主機進行快速響應。但真實情況是中斷傳輸和所有其他USB傳輸一樣,只在主機訪問裝置時出現。之所以將其稱為中斷傳輸,是因為它可保證主機將在最短的延遲裡響應或發送資料。中斷傳輸的特別之處在於主機將按照特定的周期訪問可引起中斷的端點(稱為中斷端點),看是否有中斷情況發生。圖10.39所示為中斷傳輸事務的處理過程。

 

對於要進行輸入的中斷傳輸,主機按照特定的周期執行IN事務,如果沒有中斷髮生,中斷端點回以NAK包;如果有中斷情況發生,則回送中斷資料。主機收到資料後,發一個ACK包。

    對於要進行輸出的中斷傳輸,主機按照特定的周期執行OUT事務,在發送OUT令牌後,接著發送資料包。如果沒有中斷髮生,中斷端點回以NAK包或STALL包;如果有中斷情況發生且接收資料無誤,則回送ACK包。需要指出,在裝置沒有中斷髮生的情況下,主機一直會按照特定的周期執行OUT事務,並且所發送的資料保持不變。當有中斷髮生時,才修改資料指標,指向下一個資料區。

    一個中斷傳輸由一個或多個IN事務或者一個或多個OUT事務組成。一個中斷傳輸用以下兩種情況之一結束:當請求的資料量被傳送完時,或者當資料包的長度小於規定的最大值(包括0長度包)時。中斷傳輸的結束表示要傳送的資料已經到齊,接收方可以加以利用;而主機對中斷端點周期性的查詢還將繼續進行下去,以便在下一個中斷情況發生時,開始下一個中斷傳輸。

    3)等時傳輸

    用於有周期性、傳輸速率不變的資料轉送。等時傳輸在每幀中傳送的位元組數是一定的。一個等時傳輸由一個或多個連續幀裡每幀一個IN或一個OUT事務所組成。圖10.40表示了等時傳輸事務的處理過程。可以看出,等時傳輸的IN事務和OUT事務只包括令牌包和資料包兩個階段,沒有握手包階段,也不支援重試。

    4)控制傳輸

    控制傳輸提供了一種方法來配置USB裝置,並對它的操作的某些方面進行控制。每個裝置必須設定一個預設的控制端點(通常是O號端點)。控制端點用來配置裝置、控制裝置狀態以及裝置操作的某些方面。控制端點響應一些通過控制傳輸發送過來的USB特殊請求。例如,當系統檢測到裝置時,系統軟體必須讀取該裝置的描述符,以確定其類型和操作特性。

    控制傳輸至少由兩個階段組成,也可以是三個階段:

    ①SETUP階段:控制傳輸總是從SETUP階段開始,這個階段把資訊發送給目標裝置,定義對裝置的請求類型(例如,讀裝置描述符)。

    ②資料階段:這個階段僅僅是為需要資料轉送的請求定義的。例如,在資料階段,讀描述符請求把描述符的內容發送給主機。一些請求在SETUP階段之外不需要資料轉送。

    ③狀態階段:這個階段總是用來報告被請求的操作的結果。

    在SETUP階段,一個SETUP事務被用來向控制端點傳輸資訊。SETUP事務類似於

一個OUT事務,只是包標識PID是SETUP,而不是OUT。圖10.41所示為SETUP事務的執行過程。SETUP事務的資料階段總是利用DATA0 PID。如果接收正確,控制端點則回以ACK包;如果接收不正確或資料丟失,則不回送任何握手包。

    控制傳輸的資料階段不是必需的。如果需要有這個階段,則它由一個或多個IN事務或者一個或多個OUT事務組成。資料階段的所有事務的方向必須是一致的,即都是IN事務或都是OUT事務。資料階段傳送的資料量及方向是在SETUP階段規定的。如果資料量超過了預先確定的資料包規模,則資料的發送需要多個能攜帶最大包的事務(IN或OUT),剩下的部分(不足最大包規模)再安排一個事務。

    控制傳輸的狀態階段是該傳輸的最後一個階段,它只需要一個事務。狀態階段的資料流方嚮應該與前面的階段不同,並且總是利用DATAl PID.例如,如果資料階段執行的是OUT事務,則狀態階段就是一個IN事務。如果一個控制傳輸沒有資料階段,則狀態階段由一個IN事務組成。圖10.42所示為控制讀傳輸、控制寫傳輸以及沒有資料階段的控制傳輸的事務排列順序、觸發位的值(在括弧內)及資料PID的類型。

    上面介紹的傳輸及傳輸事務的處理過程反映了USB系統中資料轉送的過程。注意到一幀(或微幀)中包括了四種傳輸事務,所以實際的傳輸過程要比這裡所講的複雜。

4.資料觸發技術

    在USB系統中採用了資料觸發技術。資料觸發是一種機制,用來確保資料轉送的發送方和接收方之間保持同步,對於需要大量事務的一次長傳輸過程尤為重要。資料觸發機制可以使握手包出錯情況下發送方和接收方之間能重新同步。

    資料觸發僅僅支援中斷傳輸、塊傳輸和控制傳輸。支援資料觸發機制的發送方和接收方在每一次資料轉送時都必須具有觸發位。當雙方都認為資料轉送已經正確完成以後,都會把自己的觸發位轉換為和原來相反的狀態。兩種類型的資料包(DATAO和DATAl)被交替傳送,並且包的接收方將會把它和觸發位作比較,以確定接收的包是否正確。發送方使用的資料包類型和它的觸發位目前狀態保持一致(例如,如果觸發位為0,則資料包用DATA0)。下面僅以OUT事務為例來理解資料觸發機制。

    例10.1 圖10.43所示為無錯誤的OUT事務的處理過程和觸發位的變化情況。假定發送方和接收方的觸發位開始都是0。傳輸的過程

如下:

    交易處理l:

①主機向目標裝置發送一個OUT令牌。

②目標裝置無錯誤地收到該令牌包。

③主機向目標裝置發送一個DATA0資料包(和它的觸發位保持一致)。

④目標裝置收到資料包DATA0,它和觸發位一致。

⑤目標裝置成功收到資料包DATA0,觸發位轉變為1。

⑥目標裝置向主機發送一個ACK握手包,通知主機資料已經被無錯誤接收。

⑦主機無錯誤地收到ACK包。

⑧成功地收到ACK包,主機把觸發位轉變為l。

交易處理2:

①主機向目標裝置發送一個新的OUT令牌,開始下一個交易處理過程。

②目標裝置無錯誤地收到該令牌包。

③主機向目標裝置發送一個DAl、A1資料包(和它的觸發位保持一致)。

④目標裝置收到資料包DATAl,它和觸發位一致。

⑤目標裝置成功收到資料包DATAl,觸發位轉變為0。

⑥目標裝置向主機發送一個ACK握手包,通知主機資料已經被無錯誤接收。

    ⑦主機無錯誤地收到ACK包。

    ⑧成功地收到ACK包,主機把觸發位轉變為0。

    這個處理過程對每一個事務都是如此,直到整個傳輸完成。只要收到的資料包和觸發位相一致,並且發送方無錯誤地收到ACK握手包,那麼發送方和接收方就保持同步。

    上面是資料包和握手包都被正確傳輸的情況。下面分別看一下資料包傳輸出錯和握手包傳輸出錯時的情況。

    例l0.2 圖10.44所示為一個傳輸的第m個OUT。事務的處理過程,期間資料包傳輸出現了錯誤。主機和目標裝置所採取的行動如下:

    交易處理m:

    ①主機向目標裝置發送一個OUT令牌。

    ②目標裝置無錯誤地收到該令牌包。    ,

    ③主機向目標裝置發送一個DATA0資料包(和它的觸發位保持一致)。

    ④當目標裝置收到資料包DATAO時,發現有錯。

    ⑤因為檢測到資料包的錯誤,目標裝置將會忽略這個包。資料被丟棄,不向主機發握手包。因為資料包沒有正確接收,觸發位保持不變。

    ⑥主機等待握手包的返回,但是沒有響應。在匯流排逾時周期(16個位時間)到達後,主機檢測到沒有響應,於是它認為資料包的傳輸不成功,主機的觸發位保持不變。主機必須在以後重新進行該交易處理。

事務m重新進行:

①主機再向目標裝置發送OUT令牌。

②目標裝置無錯誤地收到該令牌包。

③主機向目標裝置發送一個DATAO資料包(和它的觸發位保持一致),這個資料包在上一次傳送時沒有成功。

    ④目標裝置成功地收到資料包DATA0,它和觸發位保持一致。

    ⑤因為正確收到資料包DATA0,所以目標裝置將觸發位轉變為1。

    ⑥目標裝置向主機發送一個ACK握手包,通知主機資料已經被無錯誤接收。

    ⑦主機無錯誤地收到ACK包。

    ⑧成功地收到了ACK包,主機把觸發位轉變為l。

    由上面的處理過程可以看出,儘管傳輸發生了錯誤,但是主機和目標裝置還是能夠保持同步。

    例10.3 圖10.45所示為一個傳輸的第n個OUT事務的處理過程,期間由於ACK包錯誤而失敗。對錯誤偵測和恢複的每一步列舉如下:

    交易處理n:

    ①主機向目標裝置發送一個OUT令牌。

    ②目標裝置無錯誤地收到該令牌包。

    ③然後主機向目標裝置發送一個DATA0資料包(和它的觸發位保持一致)。

    ④目標裝置收到資料包DATA0,它和觸發位一致。

    ⑤目標裝置成功收到資料包DATA0,觸發位轉變為1。

    ⑥目標裝置向主機發送一個ACK握手包,通知主機資料已經被無錯誤接收。

    ⑦主機收到的ACK包出現了錯誤。

    ⑧由於主機檢測到了錯誤,所以它不能確定目標裝置是否已經成功地接收到資料。因此,主機的觸發位沒有改變(還是0)。主機假定目標裝置沒有收到資料,因而會重新進行該交易處理。

    事務n重新進行:

    ①主機再向目標裝置發送OUT令牌。

    ②目標裝置無錯誤地收到該令牌包。

    ③主機重新向目標裝置發送DATA0資料包(和它的觸發位保持一致),這個資料包在上一次傳

送時不知道目標裝置是否已正確接收。

    ④目標裝置無錯誤地收到資料包DATA0,但是它和觸發位不一致。

    ⑤目標裝置認為其本身和主機不同步,因而丟棄資料,並且觸發位保持不變(1)。

    ⑥目標裝置向主機發送一個ACK握手包,通知主機資料已經被無錯誤接收,這是因為

主機明顯沒有收到上一次的ACK握手包。

    ⑦主機無錯誤地收到ACK握手包。

    ⑧成功地收到了ACK包,主機把觸發位轉變為1。現在主機和目標裝置就為下一次的交易處理做好了準備。

    通過該例可以看出,主機和目標裝置暫時在資料轉送是否完成的問題上沒有達成一致。然而,資料觸發機制保證了不同步的狀態能夠被檢測到,並且能夠重新實現同步。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.