電子產業(yè)一站式賦能平臺

PCB聯盟網

搜索
查看: 103|回復: 0
收起左側

新手都能看懂的 USB 通信協議

[復制鏈接]

531

主題

531

帖子

3817

積分

四級會員

Rank: 4

積分
3817
跳轉到指定樓層
樓主
發(fā)表于 2024-8-16 07:42:00 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
: }9 H  t- V- G: I
點擊上方名片關注了解更多# I  _; F9 W* B% i1 z3 _  a+ R& _
, J4 Q4 u; `  ^+ l& E+ B8 a
: _8 Z4 ?  f- A, I6 w) V: w5 L
USB接口隨處可見,手機、電腦、電視,以及各種電子產品充電口(雖然是USB-C,但它也是USB)都有USB的身影。$ S; g$ z% v* O" v$ S
USB應用非常廣泛,很多嵌入式設備也具有USB通信能力,這里給大家分享一下USB通信協議主要內容,新手都能看明白(當然,最好還是有一定通信協議基礎才行)。! N  m9 G, x$ n' ]* c
. t+ X8 J- V) u9 Z
   1、基本概念一個【傳輸】(控制、批量、中斷、等時):由多個【事務】組成;一個【事務】(IN、OUT、SETUP):由一多個【Packet】組成。USB數據在【主機軟件】與【USB設備特定的端點】間被傳輸!局鳈C軟件】與【USB設備特定的端點】間的關聯叫做【pipes】。一個USB設備可以有多個管道(pipes)。  2 、包(Packet)包(Packet)是USB系統中信息傳輸的基本單元,所有數據都是經過打包后在總線上傳輸的。數據在 USB總線上的傳輸以包為單位,包只能在幀內傳輸。高速USB 總線的幀周期為125us,全速以及低速 USB 總線的幀周期為 1ms。幀的起始由一個特定的包(SOF 包)表示,幀尾為 EOF。EOF不是一個包,而是一種電平狀態(tài),EOF期間不允許有數據傳輸。注意:雖然高速USB總線和全速/低速USB總線的幀周期不一樣,但是SOF包中幀編號的增加速度是一樣的,因為在高速USB系統中,SOF包中幀編號實際上取得是計數器的高11位,最低三位作為微幀編號沒有使用,因此其幀編號的增加周期也為 1mSUSB總線上的情形是怎樣的?
0 P! A/ W; K6 e- }5 ?" L8 \1 J- g* D7 B
  O! h( m- F0 }& A# \& V3 r

0 ~5 y/ j, l; p% [包是USB總線上數據傳輸的最小單位,不能被打斷或干擾,否則會引發(fā)錯誤。若干個數據包組成一次事務傳輸,一次事務傳輸也不能打斷,屬于一次事務傳輸的幾個包必須連續(xù),不能跨幀完成。一次傳輸由一次到多次事務傳輸構成,可以跨幀完成。# R& z5 [! \4 S
USB包由五部分組成,即同步字段(SYNC)、包標識符字段(PID)、數據字段、循環(huán)冗余校驗字段(CRC)和包結尾字段(EOP),包的基本格式如下圖:8 J; N2 G0 E! A  r: ]9 ~
/ \$ O, r; J5 M/ ^) `1 P4 P9 e1 ]
1.1 PID類型(即包類型). q" y& l* m' @8 B- x' q
7 a1 Q3 D: p+ d

# r$ n# i/ ^6 y  A; z3 Z- B ' {7 B6 S. G5 f; s
1.2 Token Packets) B3 @: x" m1 M; X3 ]
: B% e6 r8 D  k" _" y
此格式適用于IN、OUT、SETUP、PING。
( u! D' t, L: ^) j3 ~PID 數據傳輸方向IN Device->HostOUT Host->DeviceSETUP Host->DevicePING Device->Host1.3 Start-of-Frame(SOF) PacketsSOF包由Host發(fā)送給Device。對于full-speed總線,每隔1.00 ms ±0.0005 ms發(fā)送一次;/ l+ o  J- O( ?
對于high-speed總線,每隔125 μs ±0.0625 μs發(fā)送一次;
% ]- C0 e* K$ S( n7 {- S[/ol]SOF包構成如下圖所示
0 ?( \* ?7 p1 U7 N& F
% y& E( i' Q( U6 p2 K
- _# ?3 R, y$ e4 q9 I+ k - W2 s8 f# _4 i4 i3 {5 d# \
1.4 Data Packets* F& ^0 Z- s! D+ ?2 [

6 l+ y2 ^3 w% ?  }4 P有四種類類型的數據包:DATA0, DATA1, DATA2,and MDATA,且由PID來區(qū)分。DATA0和DATA1被定義為支持數據切換同步(data toggle synchronization)。
8 g7 b! e, L. s& d% x, F; y1.5 Handshake Packets  }6 h9 |5 P" ^. e6 G) R6 [

0 f/ W4 J& I5 {$ C3 h0 B& hACK: 對于IN事務,它將由host發(fā)出;對于OUT、SETUP和PING事務,它將由device發(fā)出。7 C# z- U, f8 m4 O+ y% n
NAK: 在數據階段,對于IN事務,它將由device發(fā)出;在握手階段,對于OUT和PING事務,它也將由device發(fā)出;host從不發(fā)送NAK包。
   2、事務(Transaction)在USB上數據信息的一次接收或發(fā)送的處理過程稱為事務處理(Transaction)即:The delivery of service to an endpoint。一個事務由一系統packet組成,具體由哪些packet組成,它取決于具體的事務。可能由如下包組成:一個token packet可選的data pcket可選的handshake packet可選的special packet2.1 輸入(IN)事務處理輸入事務處理:表示USB主機從總線上的某個USB設備接收一個數據包的過程。【正!康妮斎胧聞仗幚+ ~! t, L! _; b' ^4 ^
+ b/ C) Y/ ~3 Z; F2 k( x4 ~# N$ a6 h/ K6 J
/ C4 h9 r5 o, u1 M
【設備忙】時的輸入事務處理% U: |; ~  l: N; r- R+ O  M
2 C" l: Z* b% ~, W" _4 G: L

2 K( S2 t" @% S0 N【設備出錯】時的輸入事務處理( D( A8 k) Y) P3 ~. X
) ~1 E: {2 H+ f, P. Y: m
7 |4 U; A/ V! C5 I- f+ l7 Y
2.2. 輸出(OUT)事務處理輸出事務處理:表示USB主機把一個數據包輸出到總線上的某個USB設備接收的過程。【正!康妮敵鍪聞仗幚
( c1 T% e5 v8 k$ }; \- F

2 O/ u* w  ~5 ~) _- u" Q2 P5 n& L) H
5 ~0 R( w* A$ X  M- y  j【設備忙時】的輸出事務處理
! A% a3 t) x5 D3 Q+ q* q

( h& ?% E, d6 ]
) l% {- m2 o$ {0 p【設備出錯】的輸出事務處理/ G* ~2 \. I. s
/ J4 W1 [1 F" S) f8 c/ A6 S

7 |& S9 n/ @- e- H; {2.3 設置(SETUP)事務處理【正!康脑O置事務處理& d5 _5 L/ V% a) y  B+ @7 {
2 O& T# O2 L3 \
  _+ n0 [, v) O$ f
【設備忙時】的設置事務處理4 d& P, M4 R" W. C

, q" U' F# B; h3 I. M6 W9 b4 r 9 e, s: h, p; d
【設備出錯】的設置事務處理
& g3 W- D+ C3 m0 _: a, i% \

2 n+ s9 [  Q! ^* |2 J2 { * L! @9 W/ R# A' Z: k- C
   3、USB傳輸類型 在USB的傳輸中,定義了4種傳輸類型:控制傳輸 (Control Transfer)
  E$ q" _; W% H' f" r( J7 r4 n中斷傳輸 (Interrupt Transfer)
+ x$ @8 W9 B/ e6 j+ T" N" I批量傳輸 (Bulk Transfer)
7 u! x/ j, e+ Z同步傳輸 (Isochronous)2 D& W1 b+ x$ {0 B
3.1 控制傳輸 (Control Transfer)控制傳輸由2~3個階段組成:建立階段(Setup)
* d* ]5 o7 H. b1 {數據階段(無數據控制沒有此階段)(DATA)3 i# R  M, ]1 d- B- J" A
狀態(tài)階段(Status)
7 w' }; D( J9 G7 S; S[/ol]每個階段都由一次或多次(數據階段)事務傳輸組成(Transaction)?刂茢祿蒛SB系統軟件用于配置設備(在枚舉時),其它的驅動軟件可以選擇使用control transfer實現具體的功能,數據傳輸是不可丟失的。3.1.1 建立階段主機從USB設備獲取配置信息,并設置設備的配置值。建立階段的數據交換包含了SETUP令牌封包、緊隨其后的DATA0數據封包以及ACK握手封包。它的作用是執(zhí)行一個設置(概念含糊)的數據交換,并定義此控制傳輸的內容(即:在Data Stage中IN或OUT的data包個數,及發(fā)送方向,在Setup Stage已經被設定)。" R$ x1 b7 f% Z9 ]

2 }6 M+ K: ?6 X* T# b( g6 [3.1.2 數據階段根據數據階段的數據傳輸的方向,控制傳輸又可分為3種類型:控制讀。ㄗx取USB描述符)# R6 [8 j! [3 w+ v0 B4 D( A8 ^& h
控制寫入(配置USB設備)
% v9 D( \+ @/ F" d5 o6 M無數據控制
/ f* N) a& r" K, {1 P[/ol]數據傳輸階段:用來傳輸主機與設備之間的數據。控制讀取
% J' d0 D" A' n
是將數據從設備讀到主機上,讀取的數據USB設備描述符。該過程如下圖的【Control Read】所示。對每一個數據信息包而言,首先,主機會發(fā)送一個IN令牌信息包,表示要讀數據進來。然后,設備將數據通過DATA1/DATA0數據信息包回傳給主機。最后,主機將以下列的方式加以響應:當數據已經正確接收時,主機送出ACK令牌信息包;當主機正在忙碌時,發(fā)出NAK握手信息包;當發(fā)生了錯誤時,主機發(fā)出STALL握手信息包。控制寫入: t! P  u2 d7 B" W3 s
是將數據從主機傳到設備上,所傳的數據即為對USB設備的配置信息,該過程如下的圖【Control Wirte】所示。對每一個數據信息包而言,主機將會送出一個OUT令牌信息包,表示數據要送出去。緊接著,主機將數據通過DATA1/DATA0數據信息包傳遞至設備。最后,設備將以下列方式加以響應:當數據已經正確接收時,設備送出ACK令牌信息包;當設備正在忙碌時,設備發(fā)出NAK握手信息包;當發(fā)生了錯誤時,設備發(fā)出STALL握手信息包。+ X' Z# e2 N# f; X: c9 X' e5 h; M

' k2 N  H. k! m* I& {3.1.3 狀態(tài)階段狀態(tài)階段:用來表示整個傳輸的過程已完全結束。狀態(tài)階段傳輸的方向必須與數據階段的方向相反,即原來是IN令牌封包,這個階段應為OUT令牌封包;反之,原來是OUT令牌封包,這個階段應為IN令牌封包。對于【控制讀取】而言,主機會送出OUT令牌封包,其后再跟著0長度的DATA1封包。而此時,設備也會做出相對應的動作,送ACK握手封包、NAK握手封包或STALL握手封包。相對地對于【控制寫入】傳輸,主機會送出IN令牌封包,然后設備送出表示完成狀態(tài)階段的0長度的DATA1封包,主機再做出相對應的動作:送ACK握手封包、NAK握手封包或STALL握手封包。3.2 批量傳輸 (Bulk Transfer)用于傳輸大量數據,要求傳輸不能出錯,但對時間沒有要求,適用于打印機、存儲設備等。批量傳輸是可靠的傳輸,需要握手包來表明傳輸的結果。若數據量比較大,將采用多次批量事務傳輸來完成全部數據的傳輸,傳輸過程中數據包的PID 按照 DATA0-DATA1-DATA0-…的方式翻轉,以保證發(fā)送端和接收端的同步。USB 允許連續(xù) 3次以下的傳輸錯誤,會重試該傳輸,若成功則將錯誤次數計數器清零,否則累加該計數器。超過三次后,HOST 認為該端點功能錯誤(STALL),放棄該端點的傳輸任務。一次批量傳輸(Transfer)由 1 次到多次批量事務傳輸(Transaction)組成。翻轉同步:發(fā)送端按照 DATA0-DATA1-DATA0-…的順序發(fā)送數據包,只有成功的事務傳輸才會導致 PID 翻轉,也就是說發(fā)送端只有在接收到 ACK 后才會翻轉 PID,發(fā)送下一個數據包,否則會重試本次事務傳輸。同樣,若在接收端發(fā)現接收到到的數據包不是按照此順序翻轉的,比如連續(xù)收到兩個 DATA0,那么接收端認為第二個 DATA0 是前一個 DATA0 的重傳。它通過在硬件級執(zhí)行“錯誤檢測”和“重傳”來確保host與device之間“準確無誤”地傳輸數據,即可靠傳輸。它由三種包組成(即IN事務或OUT事務):token% K* J# F6 W: P2 V1 p& V
data
9 b, u. p  d/ t, m, v( P3 Uhandshake
7 s- h( I+ y9 f5 a* e[/ol]
! @; n2 Y) O/ K; e! t2 o' B. v, f4 X* N8 s' ~) K
For IN Token (即:IN Transaction)
" g5 z0 t4 y% A' R( }, z! c6 d[/ol]ACK: 表示host正確無誤地接收到數據
, G: E, O$ Y& }. y" lNAK: 指示設備暫時不能返回或接收數據 (如:設備忙)
, @/ \- j  d* g$ a4 sSTALL:指示設備永遠停止,需要host軟件的干預 (如:設備出錯)& @' l& s  Q3 c& H. ^/ H
For OUT Token (即:OUT Transaction)7 U7 I: T' N" U6 \' O8 O6 d
[/ol]如果接收到的數據包有誤,如:CRC錯誤,Device不發(fā)送任何handshake包ACK: Device已經正確無誤地接收到數據包,且通知Host可以按順序發(fā)送下一個數據包
# W" x2 h7 t7 Y- ?# rNAK: Device 已經正確無誤地接收到數據包,且通知Host重傳數據,由于Device臨時狀況(如buffer滿)
  M' D$ f. [1 u/ F6 h: Z: ?STALL: 指示Device endpoint已經停止,且通知Host不再重傳
* E+ R+ v- L0 o% }9 g* R2 |
Bulk讀寫序列2 a/ X( {5 D# a) g5 R- ]
[/ol]" N2 U7 v5 x' O$ J& F

3 c: {: `3 z) s1 q/ i% W) Z8 B! T即由一系統IN事務或OUT事務組成。3.3 中斷傳輸(Interrupt Transfer)中斷傳輸由IN或OUT事務組成。中斷傳輸在流程上除不支持PING 之外,其他的跟批量傳輸是一樣的。他們之間的區(qū)別也僅在于事務傳輸發(fā)生的端點不一樣、支持的最大包長度不一樣、優(yōu)先級不一樣等這樣一些對用戶來說透明的東西。主機在排定中斷傳輸任務時,會根據對應中斷端點描述符中指定的查詢間隔發(fā)起中斷傳輸。中斷傳輸有較高的優(yōu)先級,僅次于同步傳輸。同樣中斷傳輸也采用PID翻轉的機制來保證收發(fā)端數據同步。下圖為中斷傳輸的流程圖。中斷傳輸方式總是用于對設備的查詢,以確定是否有數據需要傳輸。因此中斷傳輸的方向總是從USB設備到主機。
. J" E' u' ?3 j% r" |6 V$ M1 k, Y2 m; n7 a) O( x
DATA0或DATA1中的包含的是中斷信息,而不是中斷數據。3.4 同步傳輸(Isochronous Transfer)它由兩種包組成:
. g0 F) a* B. n' qtoken+ m' Z: a, ]5 b" N7 O
data
; W4 p/ V+ C6 ^$ T% _[/ol]同步傳輸不支持“handshake”和“重傳能力”,所以它是不可靠傳輸。同步傳輸是不可靠的傳輸,所以它沒有握手包,也不支持PID翻轉。主機在排定事務傳輸時,同步傳輸有最高的優(yōu)先級。同步傳輸適用于必須以固定速率抵達或在指定時刻抵達,可以容忍偶爾錯誤的數據上。實時傳輸一般用于麥 克風、喇叭、UVC Camera等設備。實時傳輸只需令牌與數據兩個信息包階段,沒有握手包,故數據傳錯時不會重傳。
+ V$ m  v2 C. Z  M; Y% @7 E
2 e: v" B; N& z+ [3 N! N  q/ w/ ]# `/ E; Y

. T! h$ x6 T9 D8 S) m8 {9 o來源地址:https://blog.csdn.net/myarrow/article/details/8484113
! e( m2 L- G- n% N, a
+ I$ H* G* r4 J) d8 c* H5 {" I, f! N. T! ?* X

. j- g0 r$ h) \7 u' }, v聲明:; K+ P% O, V) \) C1 d
聲明:文章來源網絡,作者:Arrow。本號對所有原創(chuàng)、轉載文章的陳述與觀點均保持中立,推送文章僅供讀者學習和交流。文章、圖片等版權歸原作者享有,如有侵權,聯系刪除。投稿/招聘/推廣/宣傳 請加微信:woniu26a推薦閱讀▼3 J6 c, k1 K; \7 x5 Z% I, ^
電路設計-電路分析
5 h9 c' b  o3 C& P3 f1 v* h2 Z7 Temc相關文章
2 {$ o8 R% ?2 s/ r電子元器件; F& H( x8 p( c0 I: s, J! U; j( L
后臺回復“加群”,管理員拉你加入同行技術交流群。
回復

使用道具 舉報

發(fā)表回復

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則


聯系客服 關注微信 下載APP 返回頂部 返回列表