天天看点

USB规范2.0学习(一)

USB体系包括主机、设备以及物理连接三个部分。

复合设备(Compound Device)可以占用多个地址。

所谓复合设备其实就是把多个功能设备通过内置的USB HUB 组合而成

的设备。

USB采用轮询的广播机制传输数据,所有的传输都由主机发起。

USB采用令牌包---数据包---握手包的传输机制。

令牌包中指定数据包去向或者来源的设备地址和端点(Endpoint),从而保证了只有一个

设备对广播的数据包/令牌包做出响应。

数据包: USB总线上数据传输的最小单位,包括SYNC、数据及EOP三个部分。其中数据的

格式针对不同的包有不同的格式。单都以8位的PID开始。PID制定了数据包的类型(共16种)。

令牌即指PID为IN/OUT/SETUP的包。

#define USBD_VID         1155  0x483

#define USBD_PID_HS     0x5730  22320

端点(Endpoint): 是USB设备中的可以进行数据收发的最小单元,支持单向或者双向的数据

传输。设备支持端点的数量是有限制的,除默认端点外低速设备最多支持2组端点(2个输入,2个输出),

高速和全速设备最多支持15组端点。

管道(Pipe)是主机和设备端点之间数据传输的模型,共有两种类型的管道:无格式的流管道(Stream Pipe)

和有格式的信息管道(Message Pipe)。默认的控制管道,USB主机通过该管道来获取设备的描述、配置、状态,

并对设备进行配置。

USB体系定义了四种类型的传输:

控制传输:主要用于在设备连接时对设备进行枚举以及其他设备的特定操作。

中断传输:用于对延迟要求严格、小量数据的可靠传输,如键盘、游戏手柄等。

批量传输:用于对延迟要求宽松,大量数据的可靠传输,如U盘等。

同步传输:用于对可靠性要求不高的实时数据传输,如摄像头、USB音响等。

注意:中断传输并不意味着传输过程中,设备会先中断HOST,继而通知HOST启动传输。

中断传输也是HOST发起的传输,采用轮询的方式询问设备是否有数据发送,若有则传输数据,

否则NAK主机。

USB设备通过管道和HOST通信,在默认控制管道上接受并处理以下三种类型的请求:

1、标准请求 一种11个标准请求,所有USB设备均应支持这些请求。HOST通过标准请求

来识别和配置设备。

2、类(class)请求:USB还定义了若干个子类,如HUB类、大容量存储器类等。不同的类又定义了若干类请求,

该类设备应该支持这些类请求。设备所属类在设备描述符中可以得到。

3、厂商请求:这部分请求并不是USB规范定义的,而是设备生产商为了实现一定的功能而自己定义的请求。

HUB由HUB重发器(HUB Repeater)、转发器(Transaction Translator)以及HUB控制器

(HUB Controller)三部分组成。

HUB Repeater 是上行PORT和PORT之间的一个协议控制的开关,它负责高速数据包的重生和分发。

HUB控制器负责和HOST的通信,HOST通过HUB类请求和HUB控制器通信,获得关于HUB本身和下行PORT的HUB描述符,

进行HUB和下行PORT的监控和管理。

转发器提供了从高速和全速/低速通讯的转换能力,通过HUB可以在高速HOST和全速/低速

设备之间进行匹配。HUB在硬件上支持Reset、Resume、Suspend。

从逻辑上可以分为功能层、设别层和总线接口层三个层次。

USB系统中数据的传输,宏观的看来是在HOST和USB功能设备之间进行;宏观的看是在应用

软件的Buffer和SUB功能设备的端点之间进行。一般来说端点都有Buffer,可以认为USB

通讯就是应用软件Buffer和设备端点Buffer之间的数据交换,交换的通道称为管道。

应用软件通过和设备之间的数据交换,交换的通道称为管道。应用软件通过和设备之间

的数据交换来完成设备的控制和数据传输。

通常需要多个管道来完成数据交换,因为同一管道只支持一种类型的数据传输。

用在一起来对设备进行控制的若干管道称为设备的接口,这就是端点、管道和接口的关系。

一个USB设备可以包括若干个端点,不同的端点以端点编号和方向区分。不同端点可以支持不同的传输类型、访问

间隔以及最大数据包大小。除端点0外,所有的端点只支持一个方向的数据传输。端点0是一个特殊的端点,它支持

双向的控制传输。管道和端点关联,和关联的端点有相同的属性,如支持的传输类型、最大包长度、传输方向等。

中断端点的轮询间隔由在端点描述符中定义,全速端点的轮询间隔可以是1-255ms,低速

端点为10-255ms,高速端点为

USB