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 数据传输的说明示意图:

USB2.0协议笔记的更多相关文章

  1. USB2.0协议学习笔记---USB数据包结构

    USB包类型和传输过程  USB是一种串行总线,因此数据都是一位一位传输的,如同串口那样,但是USB在真实物理电路上却不是TTL电平,而是一种差分信号采用NRZI编码,就是用变化表示0,不变表示1,同 ...

  2. USB2.0协议学习笔记---基本概念

    概念  USB是一种串行通信总线(Universal Serial Bus),经历的版本有USB1.0,USB1.1.USB2.0等.USB是一种主从模式的结构,因此它无法在设备与设备.主机与主机之间 ...

  3. usb2.0 协议分析

    转:https://blog.csdn.net/u011594613/article/details/48291307 一.USB硬件介绍1.1.概述 一条USB传输线分别由地线.电源线.D+和D-四 ...

  4. USB2.0学习笔记连载(一):CY7C68013特性简介

    上一篇博客已经给出了整个视频板卡架构,那么对于USB接口部分需要着重理解和学习. 对于目前来说,若是利用FPGA去模拟USB2.0内核,难度还是挺大的,整个状态的收发都不好控制.现在目前都在使用桥接芯 ...

  5. USB2.0学习笔记连载(十九):EZ-USB TRM手册重要部分介绍

        TRM手册中给出了所有的寄存器配置,在 slave fifo模式或者 GPIF模式等,所以对于用到的各种寄存器配置需要查看此手册,当然还可以配合着应用手册<AN61345>.   ...

  6. USB2.0学习笔记连载(十七):keil实现寄存器的配置及相关函数讲解(一)

    首先要实现对寄存器的配置,可以参考手册<Development kit  User Guide>,如下图所示: 此文件包含在 文件中.上述的应用文档详细介绍了如何利用KEIL实现对固件程序 ...

  7. USB2.0学习笔记连载(六):USB2.0硬件设计需要注意事项

    笔者在设计USB2.0时找到了一个官方给的硬件设计正确设计指南,其中有些内容还挺nice的.不单单只是USB的设计,其中有些思想可以应用到其他的场合中. 对于USB2.0而言,全速状态下可以达到480 ...

  8. USB2.0学习笔记连载(三):通用USB驱动程序解析

    对于USB驱动的开发,读者可以使用Windows DDK.DriverStudio等多种开发工具来实现USB的驱动,但是驱动程序的开发过程都比较复杂,而且很容易致使USB主机内存泄露而死机.那么对于笔 ...

  9. USB2.0学习笔记连载(二):USB基础知识简介

    USB接口分为USB A型.USB B型.USBmini型.USBmicro型.USB3.0其中每种都有相应的插座和插头. 图1 图2 上图是USBA型接口,图1为插座,图2为插头.插座指向下行方向, ...

随机推荐

  1. 安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(二)转载自码农网

    7. 安装 PHP PHP 是用于 web 基础服务的服务器端脚本语言.它也经常被用作通用编程语言.在最小化安装的 CentOS 中安装 PHP: # yum install php 安装完 php ...

  2. 输入框提示文字js

    <input style="margin-right: 0px; padding-right: 0px;" class="text" required=& ...

  3. MySQL的优化技术总结

    MySQL的优化技术总结 如果Cache很大,把数据放入内存中的话,那么瓶颈可能是CPU瓶颈或者CPU和内存不匹配的瓶颈: seek定位的速度,read/write即读写速度: 硬件的提升是最有效的方 ...

  4. CodeForces 300C --数论

    A - A Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Submit Statu ...

  5. mvc-5视图和模版

    动态渲染视图 当待渲染的视图内容不多的时候,可以将视图元素放在控制器或者状态里 var views = document.getElementById("views"); view ...

  6. Json格式数据某一列。

    {title : '支付费率',elCls : 'center', dataIndex :'zfrate',width:100, renderer :function(value,obj){ if(o ...

  7. Google地图接口API之地图控件集(五)

    1.默认控件集 当使用一个标准的google地图,它的控件默认设置如下: (1). Zoom-显示一个滑动条来控制map的Zoom级别,如下所示:

  8. BZOJ2819 Nim(DFS序)

    题目:单点修改.树链查询. 可以直接用树链剖分做.. 修改是O(QlogN),查询是O(QlogNlogN),Q=N=500000: 听说会超时.. 这题也可以用DFS序来做. 先不看修改,单单查询: ...

  9. strerror

    #include<stdio.h> #include<string.h> #include<errno.h> void main(void ) { printf(& ...

  10. 【BZOJ】1877: [SDOI2009]晨跑(最小费用最大流)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1877 费用流做多了,此题就是一眼题. 拆点表示只能经过一次,容量为1,费用为0. 然后再连边即可,跑 ...