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. D6 I

    I - I Time Limit:1000MS     Memory Limit:2048KB     64bit IO Format:%lld & %llu Submit Status Pr ...

  2. Redis String命令

        命令 解释 APPEND key value 如果 key 已经存在并且是一个字符串, APPEND 命令将 value 追加到 key 原来的值的末尾. 如果 key 不存在, APPEND ...

  3. HDU2841 Visible Trees(容斥原理)

    题目..大概就是有个m*n个点的矩形从(1,1)到(m,n),问从(0,0)出发直线看过去最多能看到几个点. 如果(0,0)->(x,y)和(0,0)->(x',y')两个向量平行,那后面 ...

  4. ural 1431. Diplomas

    1431. Diplomas Time limit: 1.0 secondMemory limit: 64 MB It might be interesting for you to learn th ...

  5. USACO 5.4 Character Recognition(DP)

    非常恶心的一题,卡了三个月,没什么动力做了,代码直接抄的别人的... 这题主要思路就是预处理出几个数组,再预处理出几个数组,最后DP,输出一下路径... 写起来挺非常麻烦,代码不贴了,丢人... 把U ...

  6. 解决 PermGen space Tomcat内存设置

    转自:http://qwzhl100.blog.163.com/blog/static/2133124200932813148637/ 在 使用Java程序从数据库中查询大量的数据或是应用服务器(如t ...

  7. Struts2之自定义类型转换器

    Struts2自定义类型转换器分为局部类型转换器和全局类型转换器 (1)局部类型转换器 如果页面传来一个参数reg.action?birthday=2010-11-12到后台action,然后属性用d ...

  8. Java 利用Apache Commons Net 实现 FTP文件上传下载

    package woxingwosu; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import ...

  9. 给iOS工程增加Daily Build

    给iOS工程增加Daily Build  前言 Daily Build 是一件非常有意义的事情,也是敏捷开发中关于 "持续集成" 的一个实践.Daily Build 对于开发来说有 ...

  10. FXK Javascript

    Javascript是一门神奇的语言,很不爽的一门语言,很纠结的一门语言. 以下内容,专业人士请不要看,只供像我一样的菜鸟参考. (1)Javascript找不到函数.明明已经引用了JS文件,却提示找 ...