1.概述
USB(Universal Serial
Bus)具有传输速率快,可热插拔等显著特点,应用已经十分广泛,目前的相当多的设备已经支持最新的USB3.0协议。理论上USB1.1的传输速度可以达到12Mbps/秒,而USB2.0则可以达到速度480Mbps/秒,并且可以向下兼容USB1.1。USB2.0三种模式,分别为Low-Speed,Full-Speed和High_Speed,这三种模式的参数和应用场景如下:
2.USB系统
USB系统由USB Host和USB
Device组成。每一个USB system只能存在一个USB Host。USB device分为USB
Hub和Functions两种。其中USB Hub下可以挂载Functions设备。有一种特殊的USB
device称为Compound
Device,这种设备是一个Hub下内部固定挂载了几个Function设备(例如USB摄像头)。
USB系统的总线拓扑结构如下:
可以看到,一个USB System只能有一个USB Host。一个USB
System最多只能有7层结构,且最下面一层只能挂载Function Device而不能挂载Hub
Device。特殊的Compound
Device占据两层(图中为6、7)。在一条通信路径上,Host和Device之间最多只能存在5个USB Hub
Device。
3.USB2.0的结构概述和一些概念
(1)电气方面。分为三种USB设备:Low-Speed(1.5Mb/s),Full-Speed(12Mb/s)和High-Speed(480Mb/s)。USB接线如下:

(2)Power
分为bus-powered devices和self-powered devices两种。bus-powered
devices依赖总线进行供电,self-powered devices有自己的电源。
(3)Bus Protocol
在USB System中,数据传输总是由Host发起。Host和Device的传输路径称为Pipe,分为Stream
pipe和Message pipe,Stream pipe 没有USB协议定义的数据结构,Message
pipe上传输的则是USB协议定义的数据结构。
(4)Data Flow Types
四种基本的Transfer:
Control Transfers:用于对USB
Deviece的Configuration和control。
Bulk Data Transfers:用于批量传输等实时性要求不高的操作。
Interrupt Data
Transfers:用于实时的可靠的数据传递,如鼠标、游戏手柄等。
Isochronous Data
Transfers:相当于流传输,不可靠,典型应用如语音传输。
4.USB Data Flow Model
简单的USB数据流向如下:

一个有不同速率的USB设备的USB System的数据传输说明:

USB Host和Device之间数据传输的详细说明图如下:

对应应用软件来说,传输的模型可以简化如下:

可以把USB Device抽象成一些Endpoint的集合,这些Endpoint来实现USB
Device的Interface。
下面讲述一些描述USB Data Flow的关键概念。
(1)Device Endpoints
是Host和Device之间的communication flow的端点。每一个USB Logical
Device就是由这些Endpoint组成的。每一个Endpoint都有唯一的endpoint
number和配置决定的数据传输方向,只支持单工传输。可以这样简单描述:Address+Endpoint+Direction。
当Endpoint Number为0时,这个Endpoit用来作为default
control,Host可以通过这个Endpoint来初始化USB设备,可以在这种Endpoint上建立Default Control
Pipe。
Endpoint number不为0的这些Endpoint必须在设备配置完成后才能使用。
(2)Pipes
Pipe指的是Host Software和USB
Device的endpoint之间建立的连接。主要有两种Pipe:
· Stream: Data moving through a pipe has no
USB-defined structure
· Message: Data moving through a pipe has some USB-defined
structure
----Stream Pipes:
支持bulk,isochronous 和interrupt
transfer这3中Transfer。
----Message Pipes:
在Message pipe上传输分为3个stage:
1.Request from host
2.Data transfer
3.Status stage
Default Control Pipe(Endpoint number为0)就是一种Control pipe。
(3)Frames and Microframes
在Low/Full-Speed总线上,USB建立了一个1ms长度的Frame,在High-Speed总线上则是125us的MicroFrame。一个Frame或者MicroFrame可以包含几个transactions。
(4)Transfer Types
上文已经叙述,有四种Transfer:
Control Transfers, Isochronous
Transfers, Interrupt Transfers和Bulk
Transfers。
----Control Transfer一般有三个transaction:Setup bus
transaction,Data transaction和Status transaction。Control Transfer只能在message pipes上传输。
8-, 16-, 32-, and 64-byte maximum data payload sizes for
full-speed control endpoints, only 8-byte maximum data payload
sizes for low-speed control endpoints, and only 64-byte maximum
data payload size for high-speed control endpoints。
----Isochronous
Transfers一般是单向的,可以建立两条pipe,一条输入,一条输出。
The USB limits the maximum data payload size to 1,023 bytes
for each full-speed isochronous endpoint. High-speed endpoints are
allowed up to 1024-byte data payloads。注意,Isochronous
Transfers针对出错的数据,不会retransmission。
----Interrupt
Transfers属于stream pipe,是单向的。
The maximum allowable interrupt data payload size is 64 bytes
or less for full-speed. High-speed endpointsare allowed maximum
data payload sizes up to 1024 bytes.
----Bulk
Transfers适合大批量的数据传输,且对实时性要求不高,比如,USB设备的数据拷贝。
属于stream pipe,需要建立两条Pipe来完成双向传输的任务。
The USB defines the allowable maximum bulk data payload sizes
to be only 8, 16, 32, or 64 bytes for full-speed endpoints and 512
bytes for high-speed endpoints.
low-speed device没有bulk endpoints,不支持Bulk Transfer。
(5)High Bandwidth Isochronous Endpoints
Isochronous IN High Bandwidth Endpoints:
Isochronous OUT High Bandwidth
Endpoints:

对应于一个Frame/MicroFrame内有1/2/3个transaction。
(6)Split Transactions
这是一个特殊的Transactions,在Host和Hub之间传输。它允许low-speed
device和full-speed device连接high-speed的hubs。
(7)Bus Access
USB信息传输的模型如下:
4.USB基本数据格式
规定的Byte/Bit Ordering为LSB first。
USB的packet的格式如下:
packet的各个Field:
(1)Sync
所有的packet都是由Sync开始的。在Low/Full-Speed中,Sync为8bits,在high-Speed中,Sync为32bits。
(2)Packet Identifier Field(PID)

PID Types:

(3)Address Field

(4)Endpoint Field

(5)Frame Number Field
每一个frame的基础上由Host加1,达到0x7FFF时翻转为0。
(6)Data Field

(7)CRC
用于校验,具体校验算法参考Spec。
5.各种Packet fromat
(1)Token Packets
只能由Host发起。格式如下:
(2)Split Transaction Special Token Packets:SPLIT
用来支持Host和Hub之间的Split transaction。有两种Split special tokens:a
start-split transaction (SSPLIT) and a complete-split transaction
(CSPLIT).
Packets in a Start-split Transaction:

Packets in a Complete-split Transaction :

split transaction的结果由Complete-split Transaction来返回。
一个Split transaction的例子:
Start-Split Transaction Token:

参数SC:为0代表start-split token。
参数Port指的是挂载在Hub下的Host要求传输的那个Port下的USB device:

参数S:0 – Full speed;1 – Low speed。
参数E:

参数ET(Endpoint Type):
Complete-Split Transaction Token的格式如下:
(3)Start-of-Frame Packets

每1ms或者125us由Host发起一次。
Frames and Microframes:USB defines a full-speed
1 ms frame time indicated by a Start Of Frame (SOF) packet each and
every 1ms period with defined jitter tolerances. USB also defines a
high speed microframe with a 125 μs frame time with related jitter
tolerances。
示意图如下:
(4)Data Packets

有四种Data packet:DATA0,DATA1,DATA2和MDATA。
DATA0 and DATA1用于数据翻转和同步;high bandwidth high-speed isochronous
endpoints使用这四种Data packet;split transactions使用三种Data
Packet(DATA0,DATA1和MDATA)。
(5)Handshake Packets
主要作用是报告data transaction的status。有四种handshake packet和一种special
handshake packet。
ACK:正确接收。ACK can be returned by the host for IN
transactions and by a function for OUT, SETUP, or PING
transactions.
NAK:function无法接收Host的Data或者function没有数据传输给Host。NAK
can only be returned by functions in the data phase of IN
transactions or the handshake phase of OUT or PING
transactions。Host是不能发NAK的。
STALL:表示functions无法接收湖综合传输数据,或者control
pipe的request不支持。Host任何时刻都不会返回STALL。
STALL:a high-speed only handshake。
ERR:high-speed only handshake。hub用来报告低速设备的错误,用在split
transaction中。
附录:USB 数据传输的说明示意图:
|