usb2.0 规范学习笔记
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 规范学习笔记的更多相关文章
- USB2.0协议学习笔记---USB数据包结构
USB包类型和传输过程 USB是一种串行总线,因此数据都是一位一位传输的,如同串口那样,但是USB在真实物理电路上却不是TTL电平,而是一种差分信号采用NRZI编码,就是用变化表示0,不变表示1,同 ...
- USB2.0协议学习笔记---基本概念
概念 USB是一种串行通信总线(Universal Serial Bus),经历的版本有USB1.0,USB1.1.USB2.0等.USB是一种主从模式的结构,因此它无法在设备与设备.主机与主机之间 ...
- USB2.0协议学习笔记---描述符
USB设备描述符 字段名 长 度(字节) 地址偏移 含 义 bLenth 1 0 描述符长度 bDescriptorType 1 1 描述符类型 (这里为 1) ...
- USB2.0协议学习笔记---USB工作过程(类的方法)
前面学习了那么多的概念,这里需要记住一点分层概念即设备 ---> 配置 ---> 接口 ---> 端点,这种分层的概念结构 . 也可以理解为端点构成接口,接口组成配置,配置组成设备. ...
- 从零开始搭建.NET Core 2.0 API(学习笔记一)
从零开始搭建.NET Core 2.0 API(学习笔记一) 一. VS 2017 新建一个项目 选择ASP.NET Core Web应用程序,再选择Web API,选择ASP.NET Core 2. ...
- USB2.0规范
USB是一种支持热插拔的高速串行传输总线,它使用差分信号来传输数据,最高速度可达480Mb/S. USB支持“总线供电”和“自供电”两种供电模式.在总线供电模式下,设备最多可以获得500mA的电流.U ...
- Swift 2.0 字符串学习笔记(建议掌握OC字符串知识的翻阅)
自己公司开现在使用OC语言在写,但Swift似乎是苹果更推荐使用的开发语言,估计也是未来开发的趋势,自己以前有接触swift,但又由于公司的项目赶,也没有时间去好好地学习这款开发语言.现在年底了,项目 ...
- Vue1.0基础学习笔记整理
最近一直在使用Vue.js开发项目,现将在学习过程中遇到的一些学习小细节总结如下: 1.只处理单次插值,今后的数据变化就不会再引起插值更新了 <span>This will never c ...
- Spring 4.0.2 学习笔记(2) - 自动注入及properties文件的使用
接上一篇继续, 学习了基本的注入使用后,可能有人会跟我一样觉得有点不爽,Programmer的每个Field,至少要有一个setter,这样spring配置文件中才能用<property> ...
随机推荐
- oracle db打one-off-patch 一例
由于EBS form界面有一个报错,是一个小bug,以下打一个小patch修补一下. [以下的过程没有停库] 解压p8496830_111070_Linux-x86-64.zip cd 8496830 ...
- install root certificate failed, Please run as administrator/root/sudo
在钥匙窜中导入 证书就可以了
- MySQL中部分系统变量介绍
have_symlink DISABLED YES 用以支持在表定义中指 ...
- 第十二天--Property List和NSUserDefaults
转自:http://appleparty.diandian.com/post/2012-05-24/9098104219 Property List (属性表) 定义:Property List文件 ...
- C#中String和string有什么区别
在C#中,string 是 System.String 的别名,所以基本上在使用时是没有差别的. 习惯上,我们把字符串当作对象时(有值的对象实体),我们用string.而我们把它当类时(需要字符串类中 ...
- 标准库 - fmt/format.go 解读
// Copyright 2009 The Go Authors. All rights reserved. // Use of this source code is governed by a B ...
- 关于Android(Java)创建匿名线程
Java中创建匿名线程主要集中就三中方式:Thread,Runnable,Handler去实现,下面分别介绍之- 一.通过Thread来创建 new Thread() { public void ru ...
- 解析 iOS 动画原理与实现
这篇文章不会教大家如何实现一个具体的动画效果,我会从动画的本质出发,来说说 iOS 动画的原理与实现方式. 什么是动画 动画,顾名思义,就是能“动”的画.人的眼睛对图像有短暂的记忆效应,所以当眼睛看到 ...
- 完整HttpHelper类
[代码] [C#]代码 using System; using System.Collections.Generic; using System.Text; using System.Net; usi ...
- C#基础--struct(结构体)
结构体和类有点类似 我们定义一个类的时候 是class 类名 定义结构体的时候是 struct 结构体名 结构体的写法 struct Point { // public int ...