USB協議詳解
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包:由主機發給裝置
第二個是資料包:由主機發給裝置,無資料
第三個包是裝置給主機的應答包
相關文章
- USB協議詳解第11講(USB描述符-總結)協議
- usb協議協議
- FTP協議詳解FTP協議
- raft協議詳解Raft協議
- TCP協議詳解TCP協議
- Kraft協議詳解Raft協議
- VxLAN協議詳解協議
- HTTPS協議詳解HTTP協議
- Gossip 協議詳解Go協議
- SPI協議詳解協議
- HTTP協議詳解HTTP協議
- QUIC協議詳解UI協議
- WebSocket 協議詳解Web協議
- UDP協議詳解UDP協議
- http協議/cookie詳解/session詳解HTTP協議CookieSession
- 網路通訊協議-ICMP協議詳解!協議
- 網路通訊協議-TCP協議詳解!協議TCP
- 網路通訊協議-HTTP協議詳解!協議HTTP
- 網路通訊協議-SMTP協議詳解!協議
- 一、USB PD協議簡介協議
- 組播協議詳解協議
- HTTP 3協議詳解HTTP協議
- tcp/ip協議和opc協議對比詳解TCP協議
- TCP傳輸協議詳解TCP協議
- IMAP協議之BODYSTRUCTURE詳解協議Struct
- V-By-One協議詳解協議
- python 多型 協議詳解Python多型協議
- OSPF 路由協議詳解(一)路由協議
- MQTT 協議 Keep Alive 詳解MQQT協議
- 網路協議之:socket協議詳解之Datagram Socket協議
- 常見協議埠號對應 + 重要協議詳解協議
- 網路協議之:socket協議詳解之Unix domain Socket協議AI
- WiFi協議技術詳解概述WiFi協議
- 常見開源協議詳解協議
- 詳解Tomcat核心配置、http協議TomcatHTTP協議
- 一文詳解 ARP 協議協議
- 網路協議之:socket協議詳解之Socket和Stream Socket協議
- USB之基本協議和資料波形1協議