type
date
slug
category
icon
password
USB 是一种支持热插拔的高速串行传输总线,它使用差分信号来传输数据,最高速度可达480Mb/S。
USB 支持“总线供电”和“自供电”两种供电模式。在总线供电模式下,设备最多可以获得500mA 的电流。
USB2.0 被设计成为向下兼容的模式,当有全速(USB 1.1)或者低速(USB 1.0)设备连接到高速(USB 2.0)主机时,主机可以通过分离传输来支持它们。一条USB 总线上,可达到的最高传输速度等级由该总线上最慢的“设备”决定,该设备包括主机、HUB 以及USB 功能设备。
USB 体系包括“主机”、“设备”以及“物理连接”三个部分。其中主机是一个提供USB接口及接口管理能力的硬件、软件及固件的复合体,可以是PC,也可以是OTG 设备。一个USB 系统中仅有一个USB 主机;设备包括USB 功能设备和USB HUB,最多支持127 个设备;物理连接即指的是USB 的传输线。在USB 2.0 系统中,要求使用屏蔽的双绞线。
重要概念
数据包:USB 总线上数据传输的最小单位,包括SYNC、数据及EOP 三个部分。其中数据的格式针对不同的包有不同的格式。但都以8 位的PID 开始。PID 指定了数据包的类型(共16 种)。令牌包即指PID 为IN/OUT/SETUP 的包。
端点(Endpoint):是USB 设备中的可以进行数据收发的最小单元,支持单向或者双向的数据传输。设备支持端点的数量是有限制的,除默认端点外低速设备最多支持2 组端点(2 个输入,2 个输出),高速和全速设备最多支持15 组端点。
管道(Pipe):是主机和设备端点之间数据传输的模型,共有两种类型的管道:无格式的流管道(Stream Pipe)和有格式的信息管道(Message Pipe)。任何USB 设备一旦上电就存在一个信息管道,即默认的控制管道,USB 主机通过该管道来获取设备的描述、配置、状态,并对设备进行配置。
枚举:是USB 体系中一个很重要的活动,由一系列标准请求组成(若设备属于某个子类,还包含该子类定义的特殊请求)。通过枚举HOST 可以获得设备的基本描述信息,如支持的USB 版本、PID、VID、设备分类(Class)、供电方式、最大消耗电流、配置数量、各种类型端点的数量及传输能力(最大包长度)。HOST 根据 PID 和 VID 加载设备驱动程序,并对设备进行合适的配置。只有经过枚举的设备才能正常使用。对于总线供电设备,在枚举完成前最多可从总线获取 100mA 的电流。
数据传输机制
- USB 采用轮询的广播机制传输数据,所有的传输都由主机发起,任何时刻整个USB 体系内仅允许一个数据包的传输,即不同物理传输线上看到的数据包都是同一被广播的数据包。
- USB 采用“令牌包”-“数据包”-“握手包”的传输机制,在令牌包中指定数据包去向或者来源的设备地址和端点(Endpoint),从而保证了只有一个设备对被广播的数据包/令牌包作出响应。握手包表示了传输的成功与否。
设备连接和识别
- USB 设备通过管道和HOST 通信,在默认控制管道上接受并处理以下三种类型的请求:
- 标准请求:一共有11 个标准请求,如得到设备描述、设置地址、得到配置描述等。所有USB 设备均应支持这些请求。HOST 通过标准请求来识别和配置设备。
- 类(class)请求:USB 还定义了若干个子类,如HUB 类、大容量存储器类等。不同的类又定义了若干类请求,该类设备应该支持这些类请求。设备所属类在设备描述符中可以得到。
- 厂商请求:这部分请求并不是USB 规范定义的,而是设备生产商为了实现一定的功能而自己定义的请求。
- USB 设备连接到HOST 时,HOST 必须通过默认的控制管道对其进行枚举,完成获得其设备描述、进行地址分配、获得其配置描述、进行配置等操作方可正常使用。USB 设备的即插即用特性即依赖于此。
USB HUB
- USB HUB 提供了一种低成本、低复杂度的USB 接口扩展方法。
- HUB 的上行 PORT 面向HOST,下行PORT 面向设备(HUB 或功能设备)。
- 在下行PORT 上,HUB 提供了设备连接检测和设备移除检测的能力,并给各下行PORT 供电。
- HUB 可以单独使能各下行PORT,不同PORT 可以工作在不同的速度等级(高速/全速/低速)。
- HUB 必须支持连接行为、电源管理、设备连接/移除检测、总线错误检测和恢复、高/全/低速设备支持。地址分配不在其范围内。
2 USB数据流模型
在HOSTT端,应用软件(Client SW)不能直接访问USB 总线,而必须通过USB系统软件和USB主机控制器来访问USB 总线,在 USB总线上 和 USB 设备进行通讯。
从逻辑上可以分为功能层、设备层和总线接口层三个层次。其中:
- 功能层完成功能级的描述、定义和行为;
- 设备级则完成从功能级到传输级的转换,把一次功能级的行为转换为一次一次的基本传输;
- USB 总线接口层则处理总线上的 Bit 流,完成数据传输的物理层实现和总线管理。途中黑色箭头代表真实的数据流,灰色箭头代表逻辑上的通讯。

3 USB协议层规范
数据包



协议层规范
- 以数据包作为传输数据单元,数据包的位序是以 little endian 方式传输(LSB→MSB)采用NRZI 编码
- 若遇到连续的6 个1 要求进行为填充,即插入一个 0。
- 所有的 USB 包都由 SYNC 开始,高速包的 SYNC 宽度为32bit,全速/低速包的 SYNC 段度为8bit。实际接收到的 SYNC 产度由于 USB HUB 的关系,可能会小于该值。
传输流程分类
USB 体系定义了四种类型的传输,它们是:
- 控制传输:主要用于在设备连接时对设备进行枚举以及其他因设备而已的特定操作。
- 中断传输:用于对延迟要求严格、小量数据的可靠传输,如键盘、游戏手柄等。
- 批量传输:用于对延迟要求宽松,大量数据的可靠传输,如U 盘等。
- 同步传输:用于对可靠性要求不高的实时数据传输,如摄像头、USB 音响等。
注意:中断传输并不意味这传输过程中,设备会先中断HOST,继而通知HOST 启动传输。中断传输也是HOST 发起的传输,采用轮询的方式询问设备是否有数据发送,若有则传输数据,否则NAK 主机
1. 批量传输流程
- 批量传输一般用于批量的和非实时的数据传输,通俗的来说就是用于数据量大但对时间要求又不高的场合的一种传输方式,类似用于USB打印机和USB扫描仪等等。
- 批量传输的优先级相对其它传输优先级比较低。如果USB总线中有多余的总线带宽,批量传输会立即执行,但当带宽比较紧张时,批量传输会把带宽让给其它传输类型。
2. 控制传输流程
- 控制传输是一种可靠的双向传输,一次控制传输可分为三个阶段。
- 第一阶段为从HOST 到Device 的SETUP 事务传输,这个阶段指定了此次控制传输的请求类型;
- 第二阶段为数据阶段,也有些请求没有数据阶段;
- 第三阶段为状态阶段,通过一次IN/OUT 传输表明请求是否成功完成。
- 控制传输通过控制管道在应用软件和Device 的控制端点之间进行,控制传输过程中传输的数据是有格式定义的,USB 设备或主机可根据格式定义解析获得的数据含义。其他三种传输类型都没有格式定义。
- 控制传输对于最大包长度有固定的要求。对于高速设备该值为64Byte;对于低速设备该值为8;全速设备可以是8 或16 或32 或64。
- 高速端点的控制传输不能占用超过20%的微帧,全速和低速的则不能超过10%。
- 在一帧内如果有多余的未用时间,并且没有同步和中断传输,可以用来进行控制传输。
3. 中断传输流程
- 中断传输是一种轮询的传输方式,是一种单向的传输,HOST通过固定的间隔对中断端点进行查询,若有数据传输或可以接收数据则返回数据或发送数据,否则返回NAK,表示尚未准备好。
- 中断传输的延迟有保证,但并非实时传输,它是一种延迟有限的可靠传输,支持错误重传。
- 对于高速/全速/低速端点,最大包长度分别可以达到1024/64/8 Bytes。
- 高速中断传输不得占用超过80%的微帧时间,全速和低速不得超过90%。
- 中断端点的轮询间隔由在端点描述符中定义,全速端点的轮询间隔可以是1~255mS,低速端点为10~255mS,高速端点为(2interval-1)*125uS,其中interval 取1到16 之间的值。
- 除高速高带宽中断端点外,一个微帧内仅允许一次中断事务传输,高速高带宽端点最多可以在一个微帧内
进行三次中断事务传输
,传输高达3072 字节的数据。
所谓单向传输,并不是说该传输只支持一个方向的传输,而是指在某个端点上该传输仅支持一个方向,或输出,或输入。如果需要在两个方向上进行某种单向传输,需要占用两个端点,分别配置成不同的方向,可以拥有相同的端点编号。
4. 同步传输流程
- 同步传输是一种实时的、不可靠的传输,不支持错误重发机制。只有高速和全速端点支持同步传输,高速同步端点的最大包长度为1024,低速的为1023。
- 除高速高带宽同步端点外,一个微帧内仅允许一次同步事务传输,高速高带宽端点最多可以在一个微帧内进行三次同步事务传输,传输高达3072 字节的数据。
- 全速同步传输不得占用超过80%的帧时间,高速同步传输不得占用超过90%的微帧时间。
- 同步端点的访问也和中断端点一样,有固定的时间间隔限制。
- 在主机控制器和USB HUB 之间还有另外一种传输——分离传输(Split Transaction),它仅在主机控制器和HUB 之间执行,通过分离传输,可以允许全速/低速设备连接到高速主机。分离传输对于USB 设备来说是透明的、不可见的。
分离传输:顾名思义就是把一次完整的事务传输分成两个事务传输来完成。其出发点是高速传输和全速/低速传输的速度不相等,如果使用一次完整的事务来传输,势必会造成比较长的等待时间,从而降低了高速USB 总线的利用率。通过将一次传输分成两此,将令牌(和数据)的传输与响应数据(和握手)的传输分开,这样就可以在中间插入其他高速传输,从而提高总线的利用率。
参考文献
- Author:felixfixit
- URL:http://www.felixmicrospace.top/article/port_usb_examples
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!