电子产业一站式赋能平台

PCB联盟网

搜索
查看: 275|回复: 0
收起左侧

新手都能看懂的 USB 通信协议

[复制链接]

856

主题

856

帖子

8459

积分

高级会员

Rank: 5Rank: 5

积分
8459
发表于 2024-8-16 07:42:00 | 显示全部楼层 |阅读模式

lknlkq2asii6402694429.gif

lknlkq2asii6402694429.gif
: H' I* Y7 G6 N3 D
点击上方名片关注了解更多' [" s! X0 x: x9 ]

; C6 k* y. G. N* H
/ X* r" M: k6 D8 ?7 p% G* W! nUSB接口随处可见,手机、电脑、电视,以及各种电子产品充电口(虽然是USB-C,但它也是USB)都有USB的身影。
! G4 T8 m' c# ~; C) S( |& l7 RUSB应用非常广泛,很多嵌入式设备也具有USB通信能力,这里给大家分享一下USB通信协议主要内容,新手都能看明白(当然,最好还是有一定通信协议基础才行)。0 ]! w4 w4 R' I
+ U, J! I: l1 {4 u. F
   1、基本概念一个【传输】(控制、批量、中断、等时):由多个【事务】组成;一个【事务】(IN、OUT、SETUP):由一多个【Packet】组成。USB数据在【主机软件】与【USB设备特定的端点】间被传输。【主机软件】与【USB设备特定的端点】间的关联叫做【pipes】。一个USB设备可以有多个管道(pipes)。  2 、包(Packet)包(Packet)是USB系统中信息传输的基本单元,所有数据都是经过打包后在总线上传输的。数据在 USB总线上的传输以包为单位,包只能在帧内传输。高速USB 总线的帧周期为125us,全速以及低速 USB 总线的帧周期为 1ms。帧的起始由一个特定的包(SOF 包)表示,帧尾为 EOF。EOF不是一个包,而是一种电平状态,EOF期间不允许有数据传输。注意:虽然高速USB总线和全速/低速USB总线的帧周期不一样,但是SOF包中帧编号的增加速度是一样的,因为在高速USB系统中,SOF包中帧编号实际上取得是计数器的高11位,最低三位作为微帧编号没有使用,因此其帧编号的增加周期也为 1mSUSB总线上的情形是怎样的?6 p  k: e* h- T/ l
$ G) S  y0 s  l( S1 R& Y

wmfpwzvpamg6402694529.png

wmfpwzvpamg6402694529.png
, Q. e/ F% Q$ U# c
包是USB总线上数据传输的最小单位,不能被打断或干扰,否则会引发错误。若干个数据包组成一次事务传输,一次事务传输也不能打断,属于一次事务传输的几个包必须连续,不能跨帧完成。一次传输由一次到多次事务传输构成,可以跨帧完成。
; ~+ E- e- K8 A/ AUSB包由五部分组成,即同步字段(SYNC)、包标识符字段(PID)、数据字段、循环冗余校验字段(CRC)和包结尾字段(EOP),包的基本格式如下图:. \, r# L" k" |

ybv0ogmo5e46402694629.png

ybv0ogmo5e46402694629.png
6 B- x" I8 u* z. x. b
1.1 PID类型(即包类型)
; @- G$ L9 x: r( D; f% w

cjngvowzqsp6402694729.png

cjngvowzqsp6402694729.png

  ~1 n) K7 D6 F$ Z* M2 O- T
* \, d) x7 Y" _/ I) Z! W

e0qcbaft0ax6402694829.png

e0qcbaft0ax6402694829.png
, [, }* g1 Z2 X$ n) @6 l
1.2 Token Packets
$ Z8 ]$ e) Q+ F* z! X# T

hs5pkzr4voc6402694929.png

hs5pkzr4voc6402694929.png

8 ^: P( s) e' K- h& ?# }" X- F此格式适用于IN、OUT、SETUP、PING。
7 i) ?0 U: a# n7 m& [% n9 R8 x8 M, UPID 数据传输方向IN Device->HostOUT Host->DeviceSETUP Host->DevicePING Device->Host1.3 Start-of-Frame(SOF) PacketsSOF包由Host发送给Device。对于full-speed总线,每隔1.00 ms ±0.0005 ms发送一次;
5 W( ?: j2 x- x. M/ o; F4 s5 N7 Y对于high-speed总线,每隔125 μs ±0.0625 μs发送一次;: T- D/ I1 S8 f) a2 s! j* _
[/ol]SOF包构成如下图所示' m+ _( M) F8 [( e& h1 k

g5ebznjokjw6402695029.png

g5ebznjokjw6402695029.png
& _6 M4 E4 Y! s
$ D$ z5 s# i( B1 K/ X5 }+ [' x

djd3wbbxg2q6402695129.png

djd3wbbxg2q6402695129.png

& A, D% F$ G, A* n" G7 k1.4 Data Packets
5 a% K& ?/ W. a  _

owyafzmrsfx6402695229.png

owyafzmrsfx6402695229.png
- ?' D# I0 d8 f% b
有四种类类型的数据包:DATA0, DATA1, DATA2,and MDATA,且由PID来区分。DATA0和DATA1被定义为支持数据切换同步(data toggle synchronization)。) \+ p7 m. D" j# x
1.5 Handshake Packets& a. l/ w% b+ l% g  N4 Q

vq4q5jkycyy6402695330.png

vq4q5jkycyy6402695330.png
; H+ x0 T' [  f) c# Z: `0 Q, r
ACK: 对于IN事务,它将由host发出;对于OUT、SETUP和PING事务,它将由device发出。
" ?2 n2 ?6 F! F8 \2 U7 LNAK: 在数据阶段,对于IN事务,它将由device发出;在握手阶段,对于OUT和PING事务,它也将由device发出;host从不发送NAK包。
   2、事务(Transaction)在USB上数据信息的一次接收或发送的处理过程称为事务处理(Transaction)即:The delivery of service to an endpoint。一个事务由一系统packet组成,具体由哪些packet组成,它取决于具体的事务。可能由如下包组成:一个token packet可选的data pcket可选的handshake packet可选的special packet2.1 输入(IN)事务处理输入事务处理:表示USB主机从总线上的某个USB设备接收一个数据包的过程。【正常】的输入事务处理
( K+ f. ]  f( K) p2 T6 Q4 Y

9 n% o+ Z6 M# |; A

z0a1u0yzmwz6402695430.png

z0a1u0yzmwz6402695430.png

9 x5 ~7 G" d1 D; l0 i  S- q【设备忙】时的输入事务处理
2 M  x7 z' ~( k6 e- Z

8 `5 D7 D! E0 {4 n7 R' c

4a3zu4bhzth6402695530.png

4a3zu4bhzth6402695530.png
6 O, u3 G6 o2 ~. l. E% x6 r" h+ V
【设备出错】时的输入事务处理
/ N: a& Y! u* Q# T2 v; V
; Q# n- b+ G9 ?4 I" j5 [) j- H

c31zvfkbwv56402695630.png

c31zvfkbwv56402695630.png
& g5 j5 E4 _3 {3 o8 L$ R+ Z
2.2. 输出(OUT)事务处理输出事务处理:表示USB主机把一个数据包输出到总线上的某个USB设备接收的过程。【正常】的输出事务处理
3 ^. ?6 M$ l; Q. C, x  D

8 {% Y# z- j: M) a; j% Y7 c

y0i0nz5sm3y6402695730.png

y0i0nz5sm3y6402695730.png
# f$ _$ d1 w$ e0 E; W7 [9 p" |9 s
【设备忙时】的输出事务处理
; V( T( w6 l3 ?

9 Q: }: Z$ o" u0 q& V8 ^

0nn3of15w5b6402695830.png

0nn3of15w5b6402695830.png

; p9 ?4 H9 g6 i5 e7 U【设备出错】的输出事务处理
2 w! U  P& U4 |! G8 X

4 B/ i( r! J8 f

5ydmp0t4spk6402695930.png

5ydmp0t4spk6402695930.png

- ^& S7 _$ X6 H8 J2 ]7 B1 a$ G2 G/ q2.3 设置(SETUP)事务处理【正常】的设置事务处理$ g" j8 Y4 X) P  Q  u1 |& _* q
3 x2 S0 }" d" ?  V1 b

212qszquaaw6402696030.png

212qszquaaw6402696030.png
( @* k- ?7 Q- W; w- e4 A
【设备忙时】的设置事务处理
  o$ Q* v# f8 |  i) f4 M
' K5 M# B. S% P( Z4 _; m8 E- X# X

235jnktjw1h6402696130.png

235jnktjw1h6402696130.png

) N7 C  Y" l% B4 P$ I【设备出错】的设置事务处理
* x5 Z2 K. }, `8 ^1 o
4 \$ w5 ~: m9 K

sefssy0fx2p6402696230.png

sefssy0fx2p6402696230.png

& }- _5 c1 p- d* l/ G4 g7 a9 S5 c   3、USB传输类型 在USB的传输中,定义了4种传输类型:控制传输 (Control Transfer)  I; p, r0 `: g8 Z
中断传输 (Interrupt Transfer)
* _5 l  a- K6 `; ?9 D7 j批量传输 (Bulk Transfer)
1 e: U3 n' i# K# k  R/ G同步传输 (Isochronous)
. Z* Y7 |0 B+ H; F# C( y
3.1 控制传输 (Control Transfer)控制传输由2~3个阶段组成:建立阶段(Setup)8 s1 H& c7 ?4 K+ Z/ B; m' W
数据阶段(无数据控制没有此阶段)(DATA)
, Z6 [2 Z% v  B1 e8 X7 G状态阶段(Status)
* j7 C3 G: |# E! |: I1 v" u[/ol]每个阶段都由一次或多次(数据阶段)事务传输组成(Transaction)。控制数据由USB系统软件用于配置设备(在枚举时),其它的驱动软件可以选择使用control transfer实现具体的功能,数据传输是不可丢失的。3.1.1 建立阶段主机从USB设备获取配置信息,并设置设备的配置值。建立阶段的数据交换包含了SETUP令牌封包、紧随其后的DATA0数据封包以及ACK握手封包。它的作用是执行一个设置(概念含糊)的数据交换,并定义此控制传输的内容(即:在Data Stage中IN或OUT的data包个数,及发送方向,在Setup Stage已经被设定)。% |- L& f* _+ z  l9 a" _

eevuauomqxo6402696330.png

eevuauomqxo6402696330.png

- u8 i8 c3 M9 U" m( @3.1.2 数据阶段根据数据阶段的数据传输的方向,控制传输又可分为3种类型:控制读取(读取USB描述符)- {* n) \& K4 `7 ^
控制写入(配置USB设备)! Y( |5 B+ S% s( [
无数据控制4 q0 t# \: b8 O  U4 `
[/ol]数据传输阶段:用来传输主机与设备之间的数据。控制读取
8 C# |; z1 _% x. l
是将数据从设备读到主机上,读取的数据USB设备描述符。该过程如下图的【Control Read】所示。对每一个数据信息包而言,首先,主机会发送一个IN令牌信息包,表示要读数据进来。然后,设备将数据通过DATA1/DATA0数据信息包回传给主机。最后,主机将以下列的方式加以响应:当数据已经正确接收时,主机送出ACK令牌信息包;当主机正在忙碌时,发出NAK握手信息包;当发生了错误时,主机发出STALL握手信息包。控制写入5 _: h& [) ]" G
是将数据从主机传到设备上,所传的数据即为对USB设备的配置信息,该过程如下的图【Control Wirte】所示。对每一个数据信息包而言,主机将会送出一个OUT令牌信息包,表示数据要送出去。紧接着,主机将数据通过DATA1/DATA0数据信息包传递至设备。最后,设备将以下列方式加以响应:当数据已经正确接收时,设备送出ACK令牌信息包;当设备正在忙碌时,设备发出NAK握手信息包;当发生了错误时,设备发出STALL握手信息包。: O, A- g8 ~1 \( e. M
! Y& v2 R' [+ _5 @. p9 S
3.1.3 状态阶段状态阶段:用来表示整个传输的过程已完全结束。状态阶段传输的方向必须与数据阶段的方向相反,即原来是IN令牌封包,这个阶段应为OUT令牌封包;反之,原来是OUT令牌封包,这个阶段应为IN令牌封包。对于【控制读取】而言,主机会送出OUT令牌封包,其后再跟着0长度的DATA1封包。而此时,设备也会做出相对应的动作,送ACK握手封包、NAK握手封包或STALL握手封包。相对地对于【控制写入】传输,主机会送出IN令牌封包,然后设备送出表示完成状态阶段的0长度的DATA1封包,主机再做出相对应的动作:送ACK握手封包、NAK握手封包或STALL握手封包。3.2 批量传输 (Bulk Transfer)用于传输大量数据,要求传输不能出错,但对时间没有要求,适用于打印机、存储设备等。批量传输是可靠的传输,需要握手包来表明传输的结果。若数据量比较大,将采用多次批量事务传输来完成全部数据的传输,传输过程中数据包的PID 按照 DATA0-DATA1-DATA0-…的方式翻转,以保证发送端和接收端的同步。USB 允许连续 3次以下的传输错误,会重试该传输,若成功则将错误次数计数器清零,否则累加该计数器。超过三次后,HOST 认为该端点功能错误(STALL),放弃该端点的传输任务。一次批量传输(Transfer)由 1 次到多次批量事务传输(Transaction)组成。翻转同步:发送端按照 DATA0-DATA1-DATA0-…的顺序发送数据包,只有成功的事务传输才会导致 PID 翻转,也就是说发送端只有在接收到 ACK 后才会翻转 PID,发送下一个数据包,否则会重试本次事务传输。同样,若在接收端发现接收到到的数据包不是按照此顺序翻转的,比如连续收到两个 DATA0,那么接收端认为第二个 DATA0 是前一个 DATA0 的重传。它通过在硬件级执行“错误检测”和“重传”来确保host与device之间“准确无误”地传输数据,即可靠传输。它由三种包组成(即IN事务或OUT事务):token
9 F, K/ d$ u" q  J$ edata" l" {$ I" k4 n
handshake
0 u, A3 D1 w* \8 X, T4 w  [[/ol]
# C5 d$ H$ I- |# j- v8 m- [, \
7 g6 F! C' T) _" f& u3 EFor IN Token (即:IN Transaction)
- G* h/ z1 j" Q5 I/ o. t" M! g# H; c[/ol]ACK: 表示host正确无误地接收到数据
  Y4 T8 U' {( R/ W' z) B) RNAK: 指示设备暂时不能返回或接收数据 (如:设备忙)& `; y( q, k6 I4 g/ m# g9 u) b) J9 M
STALL:指示设备永远停止,需要host软件的干预 (如:设备出错)
: N7 \6 |3 _' j7 E% u
For OUT Token (即:OUT Transaction)# m/ {3 A% [* C8 U+ ?4 X1 S' [6 J
[/ol]如果接收到的数据包有误,如:CRC错误,Device不发送任何handshake包ACK: Device已经正确无误地接收到数据包,且通知Host可以按顺序发送下一个数据包
3 S- D2 s8 E: u8 t/ F- m4 NNAK: Device 已经正确无误地接收到数据包,且通知Host重传数据,由于Device临时状况(如buffer满)
! a: c7 ^6 W, A5 R8 N, ?! e, {STALL: 指示Device endpoint已经停止,且通知Host不再重传% Q# y8 u! t+ B/ o
Bulk读写序列
$ r: [4 X% R$ o- k# ^[/ol]
* \. M. l5 P" E! e% w2 |5 m+ t: Z  Q) @% g) I' @
即由一系统IN事务或OUT事务组成。3.3 中断传输(Interrupt Transfer)中断传输由IN或OUT事务组成。中断传输在流程上除不支持PING 之外,其他的跟批量传输是一样的。他们之间的区别也仅在于事务传输发生的端点不一样、支持的最大包长度不一样、优先级不一样等这样一些对用户来说透明的东西。主机在排定中断传输任务时,会根据对应中断端点描述符中指定的查询间隔发起中断传输。中断传输有较高的优先级,仅次于同步传输。同样中断传输也采用PID翻转的机制来保证收发端数据同步。下图为中断传输的流程图。中断传输方式总是用于对设备的查询,以确定是否有数据需要传输。因此中断传输的方向总是从USB设备到主机。
7 j+ f$ a' j& z* b: x/ C6 R! x0 K) e% x- k" z1 s
DATA0或DATA1中的包含的是中断信息,而不是中断数据。3.4 同步传输(Isochronous Transfer)它由两种包组成:
" Q- {( s! d% ktoken: M9 ?& ~: J- _7 x3 [8 N: M; f
data- q( w5 v, p+ T$ T1 c; ]) S, }
[/ol]同步传输不支持“handshake”和“重传能力”,所以它是不可靠传输。同步传输是不可靠的传输,所以它没有握手包,也不支持PID翻转。主机在排定事务传输时,同步传输有最高的优先级。同步传输适用于必须以固定速率抵达或在指定时刻抵达,可以容忍偶尔错误的数据上。实时传输一般用于麦 克风、喇叭、UVC Camera等设备。实时传输只需令牌与数据两个信息包阶段,没有握手包,故数据传错时不会重传。
) [0 `: [. [" I4 H) R5 F3 X& f2 l% c8 ?" ]% ?
& K/ G. o, c$ C( Z' A, r0 a
) l' W8 N- o# [* B8 S7 |: i
来源地址:https://blog.csdn.net/myarrow/article/details/8484113' x% f- G' a2 {# q; w
5 {8 N! f7 N% R# z

6 J$ Y1 @, Q6 S+ U$ P3 R# G. U' {0 b- i
声明:1 |% l% v1 |' Z" q2 _+ d
声明:文章来源网络,作者:Arrow。本号对所有原创、转载文章的陈述与观点均保持中立,推送文章仅供读者学习和交流。文章、图片等版权归原作者享有,如有侵权,联系删除。投稿/招聘/推广/宣传 请加微信:woniu26a推荐阅读▼
( L8 M4 K- s9 d0 T电路设计-电路分析- U5 _" s! J7 a9 o5 u9 I
emc相关文章
, R1 F4 R+ P+ @- f( F: l3 x电子元器件
9 o; R' Y' w7 P; B
后台回复“加群”,管理员拉你加入同行技术交流群。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


联系客服 关注微信 下载APP 返回顶部 返回列表