|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
目前了解了usb通信层面的一些基础知识如下。如果有空还要再了解hid报告描述符及协议的数据包波形。
- ~; Q. `' U6 N1 X \* k5 t
5 T; G5 l9 _; p- f) x$ w6 {: U一,USB的一些基本概念
# v& n4 a/ F# R" c# w3 U& c( a2 {- { P6 }8 n$ w& x
1. 管道(Pipe) 是主机和设备端点之间数据传输的模型,共有两种类型的管道:无格式的
$ ?* [% k, B- T$ e0 d
7 r* A- F4 [+ V) q1 ?$ j. ^流管道(Stream Pipe)和有格式的信息管道(Message Pipe)。任何USB 设备一旦上电就存在
( W2 v, g$ [ }/ r
0 R" e& V j9 D( e6 [一个信息管道,即默认的控制管道,USB 主机通过该管道来获取设备的描述、配置、状态,并
6 f" l- ?4 y8 b, H& r9 u- ^% c R9 S3 o7 s B! l
对设备进行配置。
/ A( V0 o0 Y4 ?& e. N8 _* X. m0 u2 Y2 L# P J3 C2 L! B
2. 端点(Endpoint)是USB 设备中的可以进行数据收发的最小单元,支持单向或者双向的数据传
1 [6 f- B- S' a5 Q' ?+ x7 G1 ]! e" m+ @% t/ o x4 u; x% P1 z
输。设备支持端点的数量是有限制的,除默认端点外低速设备最多支持2 组端点(2 个输入,2
, K' A6 z) ~) A# j- i3 B: N, J/ W- K5 u$ Z1 U* a$ _
个输出),高速和全速设备最多支持15 组端点。
[+ F" C. h# s) Q! W1 U# r% l9 W l+ O% g$ O
% E# }; N; B2 y+ F( l
, p6 ~* d9 N( F( G' [+ L3. 接口(InteRFace) 。应用软件通过和设备之间的数据交换来完成设备的控制和数据传输。通常
) @0 j# {/ I+ M5 d% S' m) d
( Y& w2 ^' l; s需要多个管道来完成数据交换,因为同一管道只支持一种类型的数据传输。用在一起来对设备进0 i+ T) O9 k: W+ u' I
7 K5 {+ y& p7 C+ u
行控制的若干管道称为设备的接口。* _) C5 t6 @" i: v6 N5 Y$ @
! F* f7 t4 y$ L0 W. A* Y3 p* z; a
4. 设备和端点之间关系: 一个USB 设备可以包括若干个端点,不同的端点以端点编号和方向区分。
. z2 k8 e. W; k, @8 |
4 [# A$ \% \8 [* D, _" n+ g不同端点可以支持不同的传输类型、访问间隔以及最大数据包大小。除端点0 外,所有的端点只支
) J1 G6 A8 s% v0 Y* B8 @# r) E* S" F
持一个方向的数据传输。端点0 是一个特殊的端点,它支持双向的控制传输。管道和端点关联,和/ E+ }8 E% i0 B# d8 }4 o0 Y
" I \- I5 ?5 W& V关联的端点有相同的属性,如支持的传输类型、最大包长度、传输方向等。/ L. F0 a& i. C& B! T
. D1 U6 @) C7 ^5. 描述符(Descriptor) 描述设备的属性(Attributes)。 它本身是一个数据结构, 第一个字节表示
- k1 O8 P: r7 z9 D. d1 l+ `) V! Q7 K
描述符的大小(字节数), 第二个字节表示描述符的类型(Type)。 描述符的种类有:
- r3 D( R) ?1 n: N+ N6 X5 X2 s$ {) K x: ]: y& j6 m5 K
1) 设备描述符(Device), 描述一个设备的一般信息。0 W8 J% G- L6 }
6 _* {* c6 E/ r* U
2) 设备修饰描述符(Device_Qualifier), 描述一个高速设备在其它速度下该如何变化的信息。
' p1 Z6 T: J% k3 H( o, c$ u/ Z6 q% B. h& U) v
3) 配置描述符(Configuration), 描述一个特定的设备配置, 如接口的数目等。 一个USB设备有3 \- O9 }1 a2 Z' ^8 X3 v; g$ {
6 |- P2 O: p! v' f# Z一个或多个配置描述符。 每个配置有一个或多个接口并且每个接口有0个或多个端点。# [. K8 G% l# h( |; L' f3 ~
3 k1 w- F2 m+ m
4) 其它速度配置描述符(Other_speed_configuration), 描述高速设备在其它可能的速度下的
" M9 {/ z. ~/ |4 A
. Y* `3 ~, `/ h一个配置。0 P. M$ Q9 y) d! ` t ]* e! P
* v1 b' m+ C3 T, O5) 接口描述符(Interface), 描述一种配置中的一个特定的接口。
5 R3 |/ {5 o7 l& S& X G" n% l& r0 |$ k: g% a
6) 端点描述符(Endpoint), 描述主机需要的去决定端点所需带宽的信息。 这个描述符只能附加
% L' E1 X/ }$ y, Q5 B _. O
5 G$ k1 {7 C! Y' C+ Z# y# K% f9 G8 N: p9 u在GetDescriptor()或GetDescriptor()请求中传送, 不能单独传送。 端点0没有此描述符。 Z! _$ b. O- E/ W
7 S2 u: P6 b. W1 Y/ V7) 字符串描述符(String), 第0个字符串描述符指定设备支持的语言, 其它的描述符则各包含- y% \# u) [5 |! \
8 k+ _+ {) |+ s. \! E" S$ p一个UNICODE字符串。 设备描述符, 配置描述符 和 接口描述符可能会包含字符串描述符。
/ V+ K% v0 W0 z( n: L% ~/ }% T4 t) a0 g. {8 C2 O
6. USB设备请求(USB Device Request) 请求是从主机通过控制管道发送到设备。
: W5 {4 {5 F2 x6 n% d( l; m
4 S i9 C& }; r# d0 {2 c标准的设备请求有:
. J# a- K5 A0 ^; R. _- f$ l
2 u- }) d) g0 p# @* @) q+ f- R1) Clear Feature* c" p7 q) s! V: T1 W8 {
: i& `# B& h5 R6 @! n% L5 z2) Get Configuration) |% \6 B- [& u' @9 Y( q* i
* a+ Z, Z# U1 ^/ G Z, ^3) Get Descriptor" m/ x- }- {' \& `( q5 t! j+ y
& k6 g% h* B3 W8 w2 M4) Get Interface
+ J5 G$ Y$ ?$ O9 B+ W) o3 f6 R3 f8 l9 M J/ z. G$ r0 m
5) Get Status8 K$ u5 e( v) f
8 [# E% e7 g" f8 l5 A/ j2 N: Q6) Set Address
" C. U$ S' ]- v9 @ w/ e5 w m" p) F& E l
7) Set Configuration
* W5 l9 d2 b5 A: h2 ?6 C1 p; o/ b, ^
6 W2 D5 R' y3 K/ |: }+ a0 i4 E4 f8) Set Descriptor L6 t! ]) W a/ c7 r" H+ M1 {
" z6 W- U: \4 _5 X1 \; G6 K0 r# I9) Set Feature5 z1 [3 A6 b6 }* a( X5 M* N
^$ E" y3 a+ G* l- S! C10) Set Interface
' V& k) }2 @5 W! ~( t7 R! E+ V" {- [" T$ F
11) Synch Frame
8 h( ?! C5 ]& n3 _
/ x. n; i( ~; o% L' \二,协议层
' v; r5 g4 ~7 D- _
( N: {5 U- a+ E# C+ S4 y5 J9 W1 K从字段(Field)和包(Packet)的定义开始,从底向上地展示USB(Univeral Serial Bus)协议。有:同步字段,包字段格式,包标识符字段,地址字段,端口字段,数据字段等等。
0 X: z) {( S* B! h
5 j9 q2 B4 D+ h2 B# A三,包字段格式
7 q% J' N- L6 K) K2 ~& {( W/ K9 l6 r* Q) r8 b7 j
描述标记,数据和握手包的字段格式。包中位的定义是以未编码的数据格式给出。为了清楚起见,在此不考虑NRZI编码和位填充(Bit Stuffing)的影响。所有的包都分别有包开始(Start-of-Packet)和包结束(End-of-Packet)分隔符。包开始(SOP)分隔符是同步字段的一部分,而包结束(EOP)分隔符在第7章有所描述。* k- i) t* y. _3 w5 B4 N" \& B& I
1 Q5 n2 M& D$ F! W四,usb协议的大致过程如下:# s4 k& @# D7 M& {9 ?
. P( B" X8 R/ Z4 H' a- d& v
当USB设备接上或从USB设备移开的时候,主机启动一个被称作总线标识(bus enumeration)的进程,来标识并管理设备状态的改变,当USB设备接上一个加电端口时,系统当采取以下操作:2 e$ u$ |' S5 K
# _8 |' |" Z1 { q) c1.USB设备所连的集线器通过其通向主机的状态改变通道向主机,汇报本USB设备已连接上。(参照11.13.3节)。此时,USB设备处于加电状态,它所连接的端口是无效的。. Z, }. {: p, L4 ~0 I" I2 G
+ e) i; [2 v5 z8 J2.主机通过寻问集线器决定此次状态改变的确切含义。
4 T! v" f% `& m; {" J |6 Y# L* ^- j" f6 F: _
3.主机一旦得知新设备已连上以后,它至少等待100ms以使得插入操作的完成以及设备电源稳定工作。然后主机发出端口使能及复位命令给那个端口。具体这些事件发生的顺序及时间判定请参看7.1.7.1节及图7-19。' i; l7 i) G% [" x3 H
' C: k, _' ]* Y. I- U+ U/ Q/ G4.集线器将发向端口的复位信号持续10ms(见11.5.15节)。当复位信号撤消后,端口已经有效了。这时USB设备处于缺省状态,并且可从VBUS汲取小于100mA的电能,所有设备寄存器及状态已经被复位,设备可对缺省地址产生响应。; u1 y* \2 Z# H' @+ y
# e* v( K \* R. h5.主机给设备分配一个唯一的地址,设备转向编址状态。(Address state)。- G" R$ s) V/ F$ m' o
) |1 }. i4 a6 U N$ Z
6.在USB设备接受设备地址之前,它的缺省控制通道(Default Control Pipe)在缺省地址处自然是可寻址的,主机通过读取设备描述表,判决设备缺省通道的实际净数据负载。, t r9 r3 A$ Y
2 s1 E) E3 J. @ n7.主机从设备读取配置信息要从配置0读到配置n-1,其中n为配置个数,此操作须花费几个毫秒。
" [0 ? L# o3 t% T3 u/ Z; ~! R+ }% a# s7 f, a4 o9 i/ o$ P
8.基于从设备取来的配置信息及设备如何被使用的信息,主机给设备一个配置值,此刻,设备就处于配置状态(Configured state)并此配置有关的所有端节点,都按照配置各就各位,USB设备现在可以从VBUS得到描述中所要求的电量了。从设备的角度来讲,它已经准备就绪了。6 K8 @% J- `& c" n1 A$ W
' }4 K- l) R% y0 H0 n) i3 A
当UBS设备被取走时,集线器同样会通知主机,断开一个设备连接会使得设备所连接的端口无效,一收到断开通知后,主机就会更新的拓扑信息。6 p/ A% g) J9 }, E
* h# P% L6 A4 I( Q7 d- } |
|