电子产业一站式赋能平台

PCB联盟网

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

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

[复制链接]

856

主题

856

帖子

8459

积分

高级会员

Rank: 5Rank: 5

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

jxuyl1q40fc6405957915.gif

jxuyl1q40fc6405957915.gif

' D. h7 G6 y# o) p点击上方名片关注了解更多8 \8 v9 P# b" P) }9 n4 f
! D$ J# e: o6 s  S$ r( \' l0 i

* }9 j7 @- x% V' tUSB接口随处可见,手机、电脑、电视,以及各种电子产品充电口(虽然是USB-C,但它也是USB)都有USB的身影。7 V7 \( j4 e: z! R9 K/ o/ ?+ c
USB应用非常广泛,很多嵌入式设备也具有USB通信能力,这里给大家分享一下USB通信协议主要内容,新手都能看明白(当然,最好还是有一定通信协议基础才行)。
# X" r) w  G( g9 }) z0 W$ w
* n' Z9 g" w8 c- N6 a, |5 L( W& a   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总线上的情形是怎样的?
: G: a, y0 }. ^2 I

9 B- d# k% i) f9 g6 r  Y* }$ @

24nvtwqv4qq6405958015.png

24nvtwqv4qq6405958015.png

2 o0 y9 o7 H* z8 F包是USB总线上数据传输的最小单位,不能被打断或干扰,否则会引发错误。若干个数据包组成一次事务传输,一次事务传输也不能打断,属于一次事务传输的几个包必须连续,不能跨帧完成。一次传输由一次到多次事务传输构成,可以跨帧完成。3 R# |) _5 a& O; m# \7 d, P
USB包由五部分组成,即同步字段(SYNC)、包标识符字段(PID)、数据字段、循环冗余校验字段(CRC)和包结尾字段(EOP),包的基本格式如下图:% e1 _: J8 L- K  O1 j

fhepkor5tyc6405958115.png

fhepkor5tyc6405958115.png

% w9 N4 l7 ~: f* [% F6 I" @1 z, M1.1 PID类型(即包类型)
% c; a4 k3 @1 q, X; J) x! m, A3 _

h53oqr4vo2g6405958215.png

h53oqr4vo2g6405958215.png
8 j. Z, T  v) Y8 O

8 q3 V  d- Y5 \: C& ~1 x  C+ h

t54iaobbpi06405958315.png

t54iaobbpi06405958315.png

1 O+ d& V. h3 c. `1.2 Token Packets! h/ x; A6 i0 m4 a, X

usqptpmdpkc6405958415.png

usqptpmdpkc6405958415.png
. L9 q+ h. Q4 `/ M
此格式适用于IN、OUT、SETUP、PING。
, S9 J" x% d9 \% G3 rPID 数据传输方向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发送一次;3 n: h/ V2 b3 n- M1 c
对于high-speed总线,每隔125 μs ±0.0625 μs发送一次;8 p0 B) x( j0 L: L' y- W
[/ol]SOF包构成如下图所示
' i3 Q' c8 i8 \* F

efvxftozanh6405958515.png

efvxftozanh6405958515.png

" N- ~5 _- N' \2 Q( j& B4 {+ N; M
" J, z2 Q! R5 g/ d- h, ]. _( i8 S

2shaujunict6405958615.png

2shaujunict6405958615.png

5 ?0 J9 U3 d4 r* C" q2 w1 R! _: X) j1.4 Data Packets
0 g0 Z! B4 c) ^! [2 W/ Q

trdolwos0k56405958715.png

trdolwos0k56405958715.png

* L* y) O& \( N, O有四种类类型的数据包:DATA0, DATA1, DATA2,and MDATA,且由PID来区分。DATA0和DATA1被定义为支持数据切换同步(data toggle synchronization)。8 C( R8 B: E0 t" a, G
1.5 Handshake Packets5 i) \9 A. s  n- ?$ q

mzmdoypuxrw6405958815.png

mzmdoypuxrw6405958815.png

6 R; t( c' m3 N. X1 NACK: 对于IN事务,它将由host发出;对于OUT、SETUP和PING事务,它将由device发出。1 Y. X6 e% U! r7 r; d3 R
NAK: 在数据阶段,对于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设备接收一个数据包的过程。【正常】的输入事务处理
  D$ ?! `' `2 V* i
3 s. X3 U6 `; t5 Q9 z7 n

fedsmphm0px6405958915.png

fedsmphm0px6405958915.png
6 b9 k) F( I- @
【设备忙】时的输入事务处理' }; V  k) @4 Y+ Y- K. U
4 Z# W' l! O$ P

pdsznuzv2ih6405959016.png

pdsznuzv2ih6405959016.png

1 ~4 V, n) e0 E) a1 e【设备出错】时的输入事务处理
; X9 A' T  O4 Y1 \0 H' e# S; G+ V2 e
( S6 @9 n: K  @: s- y6 i

yl1smumjxw26405959116.png

yl1smumjxw26405959116.png
  j* q/ f. Y7 u4 K  A9 l/ d
2.2. 输出(OUT)事务处理输出事务处理:表示USB主机把一个数据包输出到总线上的某个USB设备接收的过程。【正常】的输出事务处理* B8 f; l5 e" k6 d
% e) s# x7 n& t0 P7 m9 g) f

klcbq3xa1rr6405959216.png

klcbq3xa1rr6405959216.png
) U: E7 ]; p0 P& M# [) R
【设备忙时】的输出事务处理6 G7 b1 g: a, ~. s( Q/ Y0 L
9 p* E0 @+ `: I: x

g4dxbj21akp6405959316.png

g4dxbj21akp6405959316.png

7 E; o! P1 c5 M: q: Z! v【设备出错】的输出事务处理. \2 \% b2 C3 o/ I3 V6 j

* X7 h# Q  H! m& \+ f

w3wl0rd3nfd6405959416.png

w3wl0rd3nfd6405959416.png

5 _3 E0 I* L4 R/ p* }0 T4 S0 w$ m* A, x2.3 设置(SETUP)事务处理【正常】的设置事务处理
3 a/ W7 D+ c( t( ]) W3 j+ K$ K
4 t  e5 y) E% g1 ~7 c+ ?# q+ ]7 ]7 N

2tna1iss3wl6405959516.png

2tna1iss3wl6405959516.png

& P$ U  f5 O% A4 }/ z) J: _9 f5 O+ N1 ~【设备忙时】的设置事务处理
! f, Y8 Z+ \. M, R
) \0 _- I! y+ b& O# U2 G+ R/ O

uygarutcv356405959616.png

uygarutcv356405959616.png
* x1 o( Y% F8 C$ f: g1 X
【设备出错】的设置事务处理1 {5 B4 Y& N% W2 e# D
) i7 M  a$ o% H) s1 o

4jrljnsc2wh6405959716.png

4jrljnsc2wh6405959716.png
: J) ^; P: F! z' _; W0 E
   3、USB传输类型 在USB的传输中,定义了4种传输类型:控制传输 (Control Transfer)
2 K, O# Q" r$ [0 q中断传输 (Interrupt Transfer)3 ^5 _( k% W, T" x
批量传输 (Bulk Transfer)
9 w" ~2 E3 K+ }% x: B( y# a! c: A0 T同步传输 (Isochronous)- `! }) ~4 H  E  R( h* P0 I- `1 {
3.1 控制传输 (Control Transfer)控制传输由2~3个阶段组成:建立阶段(Setup)
( d! i5 d+ n9 p, u; x' f. B数据阶段(无数据控制没有此阶段)(DATA)7 r7 G" e" F+ g( }+ c/ d4 a4 u
状态阶段(Status)
7 b6 |% o$ ?1 Y- h[/ol]每个阶段都由一次或多次(数据阶段)事务传输组成(Transaction)。控制数据由USB系统软件用于配置设备(在枚举时),其它的驱动软件可以选择使用control transfer实现具体的功能,数据传输是不可丢失的。3.1.1 建立阶段主机从USB设备获取配置信息,并设置设备的配置值。建立阶段的数据交换包含了SETUP令牌封包、紧随其后的DATA0数据封包以及ACK握手封包。它的作用是执行一个设置(概念含糊)的数据交换,并定义此控制传输的内容(即:在Data Stage中IN或OUT的data包个数,及发送方向,在Setup Stage已经被设定)。
7 v( W0 z0 d5 |8 x% X/ e

oc4fc2q2iac6405959816.png

oc4fc2q2iac6405959816.png
( R2 f7 V, m+ x8 m8 j
3.1.2 数据阶段根据数据阶段的数据传输的方向,控制传输又可分为3种类型:控制读取(读取USB描述符)
. @# \" w( M, @! g6 `- N控制写入(配置USB设备)1 }( @+ F  w$ p/ [0 e* }: z$ E$ X
无数据控制: j# F0 @4 \. e' N
[/ol]数据传输阶段:用来传输主机与设备之间的数据。控制读取" b9 I0 T, E: R' t) M
是将数据从设备读到主机上,读取的数据USB设备描述符。该过程如下图的【Control Read】所示。对每一个数据信息包而言,首先,主机会发送一个IN令牌信息包,表示要读数据进来。然后,设备将数据通过DATA1/DATA0数据信息包回传给主机。最后,主机将以下列的方式加以响应:当数据已经正确接收时,主机送出ACK令牌信息包;当主机正在忙碌时,发出NAK握手信息包;当发生了错误时,主机发出STALL握手信息包。控制写入' c* ^- l2 s9 f8 l* j" [/ J
是将数据从主机传到设备上,所传的数据即为对USB设备的配置信息,该过程如下的图【Control Wirte】所示。对每一个数据信息包而言,主机将会送出一个OUT令牌信息包,表示数据要送出去。紧接着,主机将数据通过DATA1/DATA0数据信息包传递至设备。最后,设备将以下列方式加以响应:当数据已经正确接收时,设备送出ACK令牌信息包;当设备正在忙碌时,设备发出NAK握手信息包;当发生了错误时,设备发出STALL握手信息包。
# O; O0 Z1 A4 R
: J" f: J9 e( L& _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
0 J3 @. W$ z3 w8 l( F5 edata
0 q- Z: B& C  G" k0 M, y0 e& fhandshake
$ |1 |7 r# V7 C/ A$ F[/ol]
& {+ @3 Q/ F' [( k1 I+ b7 S7 u! i0 R
For IN Token (即:IN Transaction): @6 h( _+ U9 |
[/ol]ACK: 表示host正确无误地接收到数据. b: q2 s" g6 c
NAK: 指示设备暂时不能返回或接收数据 (如:设备忙)) n: r- W; v0 @
STALL:指示设备永远停止,需要host软件的干预 (如:设备出错)6 L! z: X* T. T0 B4 I0 T$ X
For OUT Token (即:OUT Transaction)
6 n0 S1 @. ?. |( s" H$ |[/ol]如果接收到的数据包有误,如:CRC错误,Device不发送任何handshake包ACK: Device已经正确无误地接收到数据包,且通知Host可以按顺序发送下一个数据包
) c- ~/ \, f0 W* bNAK: Device 已经正确无误地接收到数据包,且通知Host重传数据,由于Device临时状况(如buffer满)' X- ~* z2 n1 f* j4 N8 _( A# s
STALL: 指示Device endpoint已经停止,且通知Host不再重传
' A6 x3 q7 z* \1 I
Bulk读写序列* O- D8 u- O5 j  n9 e4 z' K
[/ol]) t8 }2 \$ N3 w9 `
! R' p* A0 a& E2 |. f/ P% K' E
即由一系统IN事务或OUT事务组成。3.3 中断传输(Interrupt Transfer)中断传输由IN或OUT事务组成。中断传输在流程上除不支持PING 之外,其他的跟批量传输是一样的。他们之间的区别也仅在于事务传输发生的端点不一样、支持的最大包长度不一样、优先级不一样等这样一些对用户来说透明的东西。主机在排定中断传输任务时,会根据对应中断端点描述符中指定的查询间隔发起中断传输。中断传输有较高的优先级,仅次于同步传输。同样中断传输也采用PID翻转的机制来保证收发端数据同步。下图为中断传输的流程图。中断传输方式总是用于对设备的查询,以确定是否有数据需要传输。因此中断传输的方向总是从USB设备到主机。
& J1 ]" g0 o& H+ r
! \) p: K: W/ @5 a2 y; P; ^0 XDATA0或DATA1中的包含的是中断信息,而不是中断数据。3.4 同步传输(Isochronous Transfer)它由两种包组成:
# F! Z# l, s) X( otoken
/ S0 b8 d& n2 y6 m/ t" Y7 }data& J8 B/ [9 N) T8 x% Q: w( y, L
[/ol]同步传输不支持“handshake”和“重传能力”,所以它是不可靠传输。同步传输是不可靠的传输,所以它没有握手包,也不支持PID翻转。主机在排定事务传输时,同步传输有最高的优先级。同步传输适用于必须以固定速率抵达或在指定时刻抵达,可以容忍偶尔错误的数据上。实时传输一般用于麦 克风、喇叭、UVC Camera等设备。实时传输只需令牌与数据两个信息包阶段,没有握手包,故数据传错时不会重传。8 s  j% T! j! i, ^
+ R1 q$ j6 \+ G" s& H% v& t

3 S# t+ k8 c" W' w; D2 E! c
$ y, ^4 A4 O4 y: I' L# ?1 b来源地址:https://blog.csdn.net/myarrow/article/details/84841136 H5 s- t/ `+ @: \9 d, E* A
4 w0 w' J" c" _1 D* v5 P

+ }% P8 A. p2 t, \% w! h
( }7 X4 `5 w( E$ ]8 U! u声明:
. X4 ?% t5 u3 d$ C+ Y声明:文章来源网络,作者:Arrow。本号对所有原创、转载文章的陈述与观点均保持中立,推送文章仅供读者学习和交流。文章、图片等版权归原作者享有,如有侵权,联系删除。投稿/招聘/推广/宣传 请加微信:woniu26a推荐阅读▼, O" Y4 ^; x3 {, ]: o
电路设计-电路分析
5 B5 w$ |; U) o# N$ gemc相关文章9 }7 Z  ^- O! M, l9 n
电子元器件
7 i0 @: f4 r# s' ]+ e
后台回复“加群”,管理员拉你加入同行技术交流群。
回复

使用道具 举报

发表回复

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

本版积分规则


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