USB協議詳解


一個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包:由主機發給設備

第二個是數據包:由主機發給設備,無數據

第三個包是設備給主機的應答包


免責聲明!

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



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