分享

USB2.0协议笔记【1】

 rookie 2015-02-25
1.概述
    USB(Universal Serial Bus)具有传输速率快,可热插拔等显著特点,应用已经十分广泛,目前的相当多的设备已经支持最新的USB3.0协议。理论上USB1.1的传输速度可以达到12Mbps/秒,而USB2.0则可以达到速度480Mbps/秒,并且可以向下兼容USB1.1。USB2.0三种模式,分别为Low-Speed,Full-Speed和High_Speed,这三种模式的参数和应用场景如下:
USB2.0协议笔记【1】

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系统的总线拓扑结构如下:
USB2.0协议笔记【1】

可以看到,一个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接线如下:
USB2.0协议笔记【1】
(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数据流向如下:
USB2.0协议笔记【1】
一个有不同速率的USB设备的USB System的数据传输说明:
USB2.0协议笔记【1】
USB Host和Device之间数据传输的详细说明图如下:
USB2.0协议笔记【1】
对应应用软件来说,传输的模型可以简化如下:
USB2.0协议笔记【1】
可以把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:
USB2.0协议笔记【1】
Isochronous OUT High Bandwidth Endpoints:
USB2.0协议笔记【1】
对应于一个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信息传输的模型如下:
USB2.0协议笔记【1】

4.USB基本数据格式
规定的Byte/Bit Ordering为LSB first。
USB的packet的格式如下:
USB2.0协议笔记【1】
packet的各个Field:
(1)Sync
所有的packet都是由Sync开始的。在Low/Full-Speed中,Sync为8bits,在high-Speed中,Sync为32bits。
(2)Packet Identifier Field(PID)
USB2.0协议笔记【1】
PID Types:
USB2.0协议笔记【1】
(3)Address Field
USB2.0协议笔记【1】
(4)Endpoint Field
USB2.0协议笔记【1】
(5)Frame Number Field
每一个frame的基础上由Host加1,达到0x7FFF时翻转为0。
(6)Data Field
USB2.0协议笔记【1】
(7)CRC
用于校验,具体校验算法参考Spec。

5.各种Packet fromat
(1)Token Packets
只能由Host发起。格式如下:
USB2.0协议笔记【1】
(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:
USB2.0协议笔记【1】
Packets in a Complete-split Transaction:
USB2.0协议笔记【1】
split transaction的结果由Complete-split Transaction来返回。
一个Split transaction的例子:
USB2.0协议笔记【1】

Start-Split Transaction Token:
USB2.0协议笔记【1】
参数SC:为0代表start-split token。
参数Port指的是挂载在Hub下的Host要求传输的那个Port下的USB device:
USB2.0协议笔记【1】
参数S:0 – Full speed;1 – Low speed。
参数E:
USB2.0协议笔记【1】
参数ET(Endpoint Type):
USB2.0协议笔记【1】

Complete-Split Transaction Token的格式如下:
USB2.0协议笔记【1】

(3)Start-of-Frame Packets
USB2.0协议笔记【1】
每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。
示意图如下:
USB2.0协议笔记【1】

(4)Data Packets
USB2.0协议笔记【1】
有四种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。
USB2.0协议笔记【1】
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 数据传输的说明示意图:
USB2.0协议笔记【1】

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多