USB協議詳解

qq_20312079發表於2020-11-21

USB協議詳解

浩克博士 2019-03-13 14:58:11  4628  已收藏 37

文章標籤: USB協議

版權

本部落格整理自網路,僅供學習參考,如有侵權,聯絡刪除。郵箱:rom100@163.com

一個transfer(傳輸)由一個或多個transaction(事務)構成,一個transaction(事務)由一個或多個packet(包)構成,一個packet(包)由一個或多個sync(域)構成。

1.傳輸資料通訊

USB的資料通訊首先是基於傳輸(transfer)的,傳輸的型別有:中斷傳輸、批量傳輸、同步傳輸、控制傳輸。

2.事務資料通訊

一次傳輸由一個或多個事務(transaction)構成,事務可以分為:in事務、out事務、setup事務。

3.包資料通訊

一個事務由一個或多個包(packet)構成,包可分為:令牌包(setup)、資料包(data)、握手包(ack)、特殊包。

4.域資料通訊

一個包由多個域構成,域可分為:同步域(sync)、標識域(pid)、地址域(addr)、端點域(endp)、幀號域(fram)、資料域(data)、校驗域(crc)。

USB傳輸

傳輸分為四種型別:批量傳輸、等時(同步)傳輸、中斷傳輸、控制傳輸。

1、批量(大容量資料)傳輸(Bulk Transfers): 非週期性,突發 
大容量資料的通訊,資料可以佔用任意頻寬,並容忍延遲 。如USB印表機、掃描器、大容量儲存裝置等。

批量輸出事務:
(1)主機先發出一個OUT令牌包(包含裝置地址,端點號)。
(2)然後再傳送一個DATA包,這時地址和端點匹配的裝置就會收下這個資料包,主機切換到接收模式,等待裝置返回握手包。
(3)裝置解碼令牌包,資料包都準確無誤,並且有足夠的緩衝區來儲存資料後就會使用ACK/NYET握手包來應答主機(只有高速模式才有NYET握手包,他表示本次資料成功接收,但是沒有能力接收下一次傳輸),如果沒有足夠的緩衝區來儲存資料,就返回NAC,告訴主機目前沒有緩衝區可用,主機會在稍後時間重新該批量傳輸事務。如果裝置檢查到資料正確,但端點處於掛起狀態,返回STALL。如果檢測到有錯誤(如校驗錯誤,位填充錯誤),則不做任何響應,讓主機等待超時。
批量輸入事務:
(1)主機首先傳送一個IN令牌包(包含裝置地址,端點號)。
(2)主機切換到接收資料狀態等待裝置返回資料。如果裝置檢測到錯誤,不做任何響應,主機等待超時。如果此時有地址和端點匹配的裝置,並且沒有檢測到錯誤,則該裝置作出反應:裝置有資料需要返回,就將一個資料包放在匯流排上;如果沒有資料需要返回,裝置返回NAK響應主機;如果該端點處於掛起狀態,裝置返回STALL。如果主機收到裝置傳送的資料包並解碼正確後,使用ACK握手包應答裝置。如果主機檢測到錯誤,則不做任何響應,裝置會檢測到超時。注意:USB協議規定,不允許主機使用NAK來拒絕接收資料包。主機收到NAK,知道裝置暫時沒有資料返回,主機會在稍後時間重新該批量輸入事務。

2、中斷傳輸(Interrupt Transfers): 週期性,低頻率。
允許有限延遲的通訊 如人機介面裝置(HID)中的滑鼠、鍵盤、軌跡球等。
中斷傳輸是一種保證查詢頻率的傳輸。中斷端點在端點描述符中要報告它的查詢間隔,主機會保證在小於這個時間間隔的範圍內安排一次傳輸。

3、等時(同步)傳輸(Isochronous Transfers): 週期性 。
持續性的傳輸,用於傳輸與時效相關的資訊,並且在資料中儲存時間戳的資訊 ,如音訊視訊裝置。


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

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

控制傳輸可分為三個過程:(1)建立過程 (2)資料過程(可選) (3)狀態過程
特性:  
每個USB裝置都必須有控制端點,支援控制傳輸來進行命令和狀態的傳輸。USB主機驅動將通過控制傳輸與USB裝置的控制端點通訊,完成USB裝置的列舉和配置 。
方向:  
控制傳輸是雙向的傳輸,必須有IN和OUT兩個方向上的特定端點號的控制端點來完成兩個方向上的控制傳輸 。

USB事物


 

USB包

包的組成:

包的內容:

1、PID:

這裡只用(PID0~4),PID4~7是PID0~4的取反,用來校驗PID
PID1~0:01 令牌包、11 資料包、10 握手包、00 特殊包

2、地址:

3、幀號:

4、資料:

5、CRC:

Packet分四大類: 命令 (Token) 、Packet 幀首 (Start of Frame) 、Packet 資料 (Data) 、Packet 握手 (Handshake) Packet

不同型別包,以上的組成部件有所不同

1、四種Packet型別之令牌包(Token Packet):
令牌包用來啟動一次USB傳輸。
輸出(OUT)令牌包:用來通知裝置將要輸出一個資料包
輸入(IN)令牌包:用來通知裝置返回一個資料包
建立(SETUP)令牌包:只用在控制傳輸中,和輸出令牌包作用一樣,也是通知裝置將要輸出一個資料包,兩者區別在於:
SETUP令牌包後只使用DATA0資料包,且只能傳送到裝置的控制端點,並且裝置必須要接收,而OUT令牌包沒有這些限制

例子:

2、四種Packet型別之SOF Packet
幀起始包:在每幀(或微幀)開始時傳送,以廣播的形式傳送,所有USB全速裝置和高速裝置都可以接收到SOF包。

 

例子:

0xA5:1010 0101:對應上面PID表可知是幀起始包
3、四種Packet型別之Data Packet

例子:

4、四種Packet型別之Handshake Packet 

例子:

USB 裝置列舉及描述符介紹 
當一個USB裝置插入主機後,會有以下活動: 

 在USB裝置的邏輯組織中,包含裝置、配置、介面和端點4個層次。裝置通常有一個或多個配置,配置通常有一個或多個介面,介面通常有零個或多個端點。  

 

 

例程分析

我們插上滑鼠後後出現如下的資訊,我們先來分析第一個傳輸:

我們看到第一個是控制傳輸,它包含了4個事物,分別是:1個setup事務,3個in事務,1個out事務,我們先開啟setup事務:

 

我們看到這個事務裡包含了3個包

第一個包是令牌包,它由主控制器傳送給目標裝置的0號埠,用於設定目標裝置的地址和埠號,我們看到後面兩個包都預設了地址與埠號。在usb系統中,所有的通訊都是由主機發出相應的令牌所引起的。

第二個是資料包,由主控器傳送給目標裝置,其中資料的內容表示:

80:表示要求裝置向主機傳送資訊

06:表示GET_DESCRIPTOR,即裝置向主機傳送裝置描述符

00與01:Word-sized field that varies according to request

00與40:Word-sized field that varies according to request; typically used to pass an index or offset

00:Number of bytes to transfer if there is a:Data stage

總結一下第二個包就是向預設地址0 傳送GET_DESCRIPTOR 指令包,請求裝置傳送裝置描述符

第三個是應答包:裝置接收到主機傳送的資料後會給出應答

接著我們看第一個in事務

 

我們看到這個事務裡也有三個包

第一個是in包:由主機傳送給裝置,表示要裝置向主機傳送上面請求的裝置描述符

第二個是資料包:由裝置傳送給主機,當然是傳送裝置描述符,我們來分析一下:

12:表示接下來要求主機向裝置傳送資訊

01:CLEAR_FEATURE、

第三個是應答包,由主機傳送給裝置

接著我們來看第二個in事務

 

這個事務裡依舊是3個包

第一個是in包:由主機傳送給裝置,表示需要輸入

第二個是資料包:由裝置傳送給主機,我們來解析一下:

6D:表示要求主機發給裝置資料

04:Reserved for future use

第三個是主機給裝置的應答包

最後來看out事務

第一個是out包:由主機發給裝置

第二個是資料包:由主機發給裝置,無資料

第三個包是裝置給主機的應答包

相關文章