|
1bydqljjf4y64078231.gif (1.67 KB, 下載次數: 0)
下載附件
保存到相冊
1bydqljjf4y64078231.gif
2024-8-19 12:23 上傳
: }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
opjkfvdiib164078331.png (23.61 KB, 下載次數: 0)
下載附件
保存到相冊
opjkfvdiib164078331.png
2024-8-19 12:23 上傳
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 ~
01gr0c2eo4d64078431.png (27.38 KB, 下載次數: 0)
下載附件
保存到相冊
01gr0c2eo4d64078431.png
2024-8-19 12:23 上傳
/ \$ O, r; J5 M/ ^) `1 P4 P9 e1 ]
1.1 PID類型(即包類型). q" y& l* m' @8 B- x' q
1pklyhoeoks64078531.png (56.36 KB, 下載次數: 0)
下載附件
保存到相冊
1pklyhoeoks64078531.png
2024-8-19 12:23 上傳
7 a1 Q3 D: p+ d
# r$ n# i/ ^6 y A; z3 Z- B
kxpmkxludm064078631.png (55.32 KB, 下載次數: 0)
下載附件
保存到相冊
kxpmkxludm064078631.png
2024-8-19 12:23 上傳
' {7 B6 S. G5 f; s
1.2 Token Packets) B3 @: x" m1 M; X3 ]
hleb0a3vdac64078731.png (10.87 KB, 下載次數: 0)
下載附件
保存到相冊
hleb0a3vdac64078731.png
2024-8-19 12:23 上傳
: 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
sp3ej04vliq64078831.png (11.4 KB, 下載次數: 0)
下載附件
保存到相冊
sp3ej04vliq64078831.png
2024-8-19 12:23 上傳
% y& E( i' Q( U6 p2 K
- _# ?3 R, y$ e4 q9 I+ k
5vdybx5mxxx64078931.png (36.3 KB, 下載次數: 0)
下載附件
保存到相冊
5vdybx5mxxx64078931.png
2024-8-19 12:23 上傳
- W2 s8 f# _4 i4 i3 {5 d# \
1.4 Data Packets* F& ^0 Z- s! D+ ?2 [
dhai3aabr0z64079031.png (12.03 KB, 下載次數: 0)
下載附件
保存到相冊
dhai3aabr0z64079031.png
2024-8-19 12:23 上傳
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 [
4fmdgwr1aee64079131.png (5.26 KB, 下載次數: 0)
下載附件
保存到相冊
4fmdgwr1aee64079131.png
2024-8-19 12:23 上傳
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
2cl3dbu03pd64079231.png (6.42 KB, 下載次數: 0)
下載附件
保存到相冊
2cl3dbu03pd64079231.png
2024-8-19 12:23 上傳
/ C4 h9 r5 o, u1 M
【設備忙】時的輸入事務處理% U: |; ~ l: N; r- R+ O M
2 C" l: Z* b% ~, W" _4 G: L
lmmn53jowkm64079331.png (5.05 KB, 下載次數: 0)
下載附件
保存到相冊
lmmn53jowkm64079331.png
2024-8-19 12:23 上傳
2 K( S2 t" @% S0 N【設備出錯】時的輸入事務處理( D( A8 k) Y) P3 ~. X
) ~1 E: {2 H+ f, P. Y: m
ccucuo2dlwo64079431.png (3.77 KB, 下載次數: 0)
下載附件
保存到相冊
ccucuo2dlwo64079431.png
2024-8-19 12:23 上傳
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
tj53ayenevq64079531.png (5.41 KB, 下載次數: 0)
下載附件
保存到相冊
tj53ayenevq64079531.png
2024-8-19 12:23 上傳
5 ~0 R( w* A$ X M- y j【設備忙時】的輸出事務處理
! A% a3 t) x5 D3 Q+ q* q
( h& ?% E, d6 ]
nrilgfx3un364079631.png (3.01 KB, 下載次數: 0)
下載附件
保存到相冊
nrilgfx3un364079631.png
2024-8-19 12:23 上傳
) l% {- m2 o$ {0 p【設備出錯】的輸出事務處理/ G* ~2 \. I. s
/ J4 W1 [1 F" S) f8 c/ A6 S
dk1rsrqswkv64079731.png (3.04 KB, 下載次數: 0)
下載附件
保存到相冊
dk1rsrqswkv64079731.png
2024-8-19 12:23 上傳
7 |& S9 n/ @- e- H; {2.3 設置(SETUP)事務處理【正!康脑O置事務處理& d5 _5 L/ V% a) y B+ @7 {
2 O& T# O2 L3 \
pplhmxkgftf64079831.png (5.06 KB, 下載次數: 0)
下載附件
保存到相冊
pplhmxkgftf64079831.png
2024-8-19 12:23 上傳
_+ n0 [, v) O$ f
【設備忙時】的設置事務處理4 d& P, M4 R" W. C
, q" U' F# B; h3 I. M6 W9 b4 r
o51wtuzohsx64079931.png (4.37 KB, 下載次數: 0)
下載附件
保存到相冊
o51wtuzohsx64079931.png
2024-8-19 12:23 上傳
9 e, s: h, p; d
【設備出錯】的設置事務處理
& g3 W- D+ C3 m0 _: a, i% \
2 n+ s9 [ Q! ^* |2 J2 {
irkujbf34hv64080031.png (3.16 KB, 下載次數: 0)
下載附件
保存到相冊
irkujbf34hv64080031.png
2024-8-19 12:23 上傳
* 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 ]
yvyhbyotvan64080131.png (16.36 KB, 下載次數: 0)
下載附件
保存到相冊
yvyhbyotvan64080131.png
2024-8-19 12:23 上傳
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
后臺回復“加群”,管理員拉你加入同行技術交流群。 |
|