1、一个USB HOST 最多可以同时支持128 个地址,地址0 作为默认地址,只在设备枚举期间临时使
用,而不能被分配给任何一个设备,因此一个USB HOST 最多可以同时支持127 个地址,如果一个设
备只占用一个地址,那么可最多支持127 个USB 设备。在实际的USB 体系中,如果要连接127 个
USB 设备,必须要使用USB HUB,而USB HUB 也是需要占用地址的,所以实际可支持的USB 功能
设备 的数量将小于127。

2、“复合设备(Compound Device)”可以占用多个地址。所谓复合设备其实就是把多个功能设备
通过内置的USB HUB 组合而成的设备,比如带录音话筒的USB 摄像头等。

3、USB 采用轮询的广播机制传输数据,所有的传输都由主机发起,任何时刻整个USB
体系内仅允许一个数据包的传输,即不同物理传输线上看到的数据包都是同一被广播的
数据包。

4、端点(Endpoint)是USB设备中的可以进行数据收发的最小单元,支持单向或者双向的数据传
输。设备支持端点的数量是有限制的,除默认端点外低速设备最多支持2 组端点(2 输入,2 输出),
高速和全速设备最多支持15 组端点。

5、管道(Pipe)是主机和设备端点之间数据传输的模型,共有两种类型的管道:无格式
的流管道(Stream Pipe)和有格式的信息管道(Message Pipe)。任何USB 设备一旦上电
就存在一个信息管道,即默认的控制管道,USB主机通过该管道来获取设备的描述、配
置、状态,并对设备进行配置。

6、USB系统中数据的传输,宏观的看来是在HOST 和USB 功能设备之间进行;微观的看是在应用软件的Buffer 和USB 功能设备的端点之间进行。一般来说端点都有Buffer,可以认为USB 通讯就是应用软件Buffer 和设备端点Buffer 之间的数据交换,交换的通道称为管道。应用软件通过和设备之间的数据交换来完成设备的控制和数据传输。通常需要多个管道来完成数据交换,因为同一管道只支持一种类型的数据传输。用在一起来对设备进行控制的若干管道称为设备的接口,这就是端点、管道和接口的关系。

7、usb传输有四种方式:控制传输、批量传输、中断传输、同步传输。

8、控制传输对于最大包长度有固定的要求。对于高速设备该值为64Byte;对于低速设备该值为8;全速设备可以是8 或16 或32 或64.

9、中断传输并不意味这传输过程中,设备会先中断HOST,继而通知HOST 启动传输。中断传输也是HOST 发起的传输,采用轮询的方式询问设备是否有数据发送,若有则传输数据,否则NAK 主机。

10、批量传输是一种可靠的单向传输,但延迟没有保证,它尽量利用可以利用的带宽来完成传输,适合数据量比较大的传输。低速USB 设备不支持批量传输,高速批量端点的最大包长度为512,全速批量端点的最大包长度可以为8、16、32、64。

11、同步传输是一种实时的、不可靠的传输,不支持错误重发机制。只有高速和全速端点支持同步传输,高速同步端点的最大包长度为 1024,低速的为 1023。

12、这里重点介绍下枚举的过程。当设备连接到主机时,按照以下顺序进行枚举:

    1. 连接了设备的HUB 在HOST 查询其状态改变端点时返回对应的bitmap,告知HOST 某个 PORT 状态发生了改变。
    2. 主机向HUB 查询该PORT 的状态,得知有设备连接,并知道了该设备的基本特性。
    3. 主机等待(至少100mS)设备上电稳定,然后向HUB 发送请求,复位并使能该PORT。
    4. HUB 执行PORT 复位操作,复位完成后该PORT 就使能了。现在设备进入到defalut状态,可以从 Vbus 获取不超过 100mA 的电流。  主机可以通过 0 地址与其通讯。
    5. 主机通过0 地址向该设备发送get_device_descriptor 标准请求,获取设备的描述符。
    6. 主机再次向HUB 发送请求,复位该PORT。
    7. 主机通过标准请求set_address 给设备分配地址。
    8. 主机通过新地址向设备发送get_device_descriptor 标准请求,获取设备的描述符。
    9. 主机通过新地址向设备发送其他get_configuration 请求,获取设备的配置描述符。
    10. 根据配置信息,主机选择合适配置,通过set_configuration 请求对设备而进行配置。这时设备方可正常使用。

13、USB 设备的常用操作包括:设备连接、设备移除、设备配置、地址分配、数据传输、设备挂起、设备唤醒等。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协议学习笔记---描述符

     USB设备描述符 字段名 长  度(字节)  地址偏移 含           义 bLenth   1  0  描述符长度 bDescriptorType   1  1 描述符类型 (这里为 1) ...

  4. USB2.0协议学习笔记---USB工作过程(类的方法)

    前面学习了那么多的概念,这里需要记住一点分层概念即设备 ---> 配置 ---> 接口 ---> 端点,这种分层的概念结构 . 也可以理解为端点构成接口,接口组成配置,配置组成设备. ...

  5. 从零开始搭建.NET Core 2.0 API(学习笔记一)

    从零开始搭建.NET Core 2.0 API(学习笔记一) 一. VS 2017 新建一个项目 选择ASP.NET Core Web应用程序,再选择Web API,选择ASP.NET Core 2. ...

  6. USB2.0规范

    USB是一种支持热插拔的高速串行传输总线,它使用差分信号来传输数据,最高速度可达480Mb/S. USB支持“总线供电”和“自供电”两种供电模式.在总线供电模式下,设备最多可以获得500mA的电流.U ...

  7. Swift 2.0 字符串学习笔记(建议掌握OC字符串知识的翻阅)

    自己公司开现在使用OC语言在写,但Swift似乎是苹果更推荐使用的开发语言,估计也是未来开发的趋势,自己以前有接触swift,但又由于公司的项目赶,也没有时间去好好地学习这款开发语言.现在年底了,项目 ...

  8. Vue1.0基础学习笔记整理

    最近一直在使用Vue.js开发项目,现将在学习过程中遇到的一些学习小细节总结如下: 1.只处理单次插值,今后的数据变化就不会再引起插值更新了 <span>This will never c ...

  9. Spring 4.0.2 学习笔记(2) - 自动注入及properties文件的使用

    接上一篇继续, 学习了基本的注入使用后,可能有人会跟我一样觉得有点不爽,Programmer的每个Field,至少要有一个setter,这样spring配置文件中才能用<property> ...

随机推荐

  1. Android开发 Unity3D基础 Android Development

    开发环境 Window 7 Unity3D 3.3.0 MB525 defy Android 2.1-update1 本次学习: 1.认识Unity 2.Unity3D环境搭建与Android软件生成 ...

  2. KMP算法具体解释(转)

    作者:July. 出处:http://blog.csdn.net/v_JULY_v/. 引记 此前一天,一位MS的朋友邀我一起去与他讨论高速排序,红黑树,字典树,B树.后缀树,包含KMP算法,只有在解 ...

  3. LINUX CACHE IO THREAD

    http://www.penglixun.com/tech/system/linux_cache_discovery.html http://my.oschina.net/HardySimpson/b ...

  4. MHA 安装过程 原创

    root@monitor yum.repos.d]# cat CentOS-Base.repo [base]name=CentOS-$releasever - Basefailovermethod=p ...

  5. 你应该知道的基础 Git 命令

    我们在早先一篇文章中已经快速介绍过 Vi 速查表了.在这篇文章里,我们将会介绍开始使用 Git 时所需要的基础命令. Git Git 是一个分布式版本控制系统,它被用在大量开源项目中.它是在 2005 ...

  6. 如何为Linux安装Go语言

    导读 Go 语言又称为 golang, 是由 Google 最初开发的一种开源编程语言,其在设计时就遵循了简单.安全和速度的 3 大原则.Go 语言具有多种调试.测试.分析和代码审查工具,如今 Go ...

  7. 关于解决Permission is only granted to system apps

    一句话,clean一下这个Project!就OK了…… 不要被假象迷惑!

  8. A标签使用javascript:伪协议

    一.前言 今天,遇到一个别人挖的坑,问题是这样的. 做了一个列表页,可以筛选数据,有很多筛条件.主要是有input复选框和<a>标签两种.如图: 其中房价的筛选条件使用<a>标 ...

  9. C#之面向对象初步

    1.构造函数定义一个类时,C#默认会实现一个隐式的构造函数,默认的构造函数不接受参数,负责把新对象分配到内存中并确保所有字段数据都设置为正确的默认值.然而,一旦自定义了构造函数,默认构造函数就被自动从 ...

  10. 明风:分布式图计算的平台Spark GraphX 在淘宝的实践

    快刀初试:Spark GraphX在淘宝的实践 作者:明风 (本文由团队中梧苇和我一起撰写,并由团队中的林岳,岩岫,世仪等多人Review,发表于程序员的8月刊,由于篇幅原因,略作删减,本文为完整版) ...