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 协议分析

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

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

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

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

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

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

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

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

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

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

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

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

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

  8. USB2.0学习笔记连载(十四):USB驱动安装及固件程序的编写

    在之前的博客中已经讲过,驱动程序最核心的两个文件,一个是xxx.sys文件,一个是xxx.inf文件,主机是寻找xxx.inf文件. 在下面的文件中有相关关于USB驱动的说明.对于用户来说,xxx.s ...

  9. USB2.0学习笔记连载(五):EZ-USB重要寄存器的配置

    本篇博客主要讲解EZ-USB一些重要寄存器的配置,首先对于本篇博客所讲的内容,读者应该到官网上去下载相关的手册,其中包括<EZ-USB Technical Reference Manual> ...

随机推荐

  1. kindeditor多图片上传找不到action原来是private File upload成员变量惹得祸

    kindeditor多图片上传找不到action原来是private File upload成员变量惹得祸

  2. jetty 最后版本类库树, 基本上大多数应用都够了

    d:\jetty-distribution-8.1.17.v20150415\lib\annotations\javax.annotation-1.1.0.v201108011116.jarjavax ...

  3. [Cocos2d-JS] 安卓机器的几个按钮

    cc.eventManager.addListener({ event:cc.EventListener.KEYBOARD, onKeyPressed:function(keycode,event){ ...

  4. 第八讲:I/O虚拟化

    一.I/O虚拟化的产生 服务器单个千兆以太网端口肯定能够支持单个应用,但是当被分割为10个.15个或者更多的服务器负载时(这其中包括网络.存储以及服务器之间的流量)可能就不够用了. 当遇到I/O瓶颈时 ...

  5. swust oj 987

    输出用先序遍历创建的二叉树是否为完全二叉树的判定结果 1000(ms) 10000(kb) 2553 / 5268 利用先序递归遍历算法创建二叉树并判断该二叉树是否为完全二叉树.完全二叉树只能是同深度 ...

  6. Android_ FragmentTabHost切换Fragment时避免重复加载UI

    使用FragmentTabHost时,Fragment之间切换时每次都会调用onCreateView方法,导致每次Fragment的布局都重绘,无法保持Fragment原有状态. 解决办法:在Frag ...

  7. HTTP lab01 做一个简单的测试用 web页面

      做一个简单的测试用 web页面     1.安装httpd服务   yum install httpd   安装完httpd服务后,系统就自动生成了/var/www/html目录     创建一个 ...

  8. hadoop datanode 启动出错

    FATAL org.apache.hadoop.hdfs.server.datanode.DataNode: Initialization failed for block pool Block po ...

  9. java插件之Lombok

    使用注释来减少Java中的重复代码 @NonNull - 或者:我怎么学会停止担心和喜欢上了NullPointerException. @Cleanup - 自动资源管理:安全地调用您的close() ...

  10. Windows环境下Git配置及使用

    Windows环境下Git配置及使用 一.安装包位置 Git下载地址https://git-scm.com/download/win TortoiseGit下载地址https://tortoisegi ...