一、传输交互概述
1、每次高层控制/状态信息(或者)以及应用信息的传递称为一次“传输”。因信息类型的不同分为四种类型:控制、中断、等时、块(块设备、同步、中断传输只含一种交互类型,控制传输分三种交互类型)。
2、每次传输由一次或数次交互构成。
3、每次交互分为三个信包(同步传输为两个信包,信包类型:令牌、数据、握手、SOF(单位时间帧分隔)、低俗设备前缀。
a、信包大小:全速设备(控制类型)最大传输为64字节,低速设备最大传输为8字节,同步传输可达1023字节。)。
b、 每次交互是不可分割的整体,必须在规定的单位时间帧内完成(单位时间粒度:1毫秒)。
二、枚举过程(控制传输):
1、描述符表定义
1.1、 设备描述符表
设备描述表给出了 USB 设备的一般信息。这包括对设备及所有设备配置起全程作用的信息。一个 USB 设备只能有一个设备描述表。所有的 USB 设备都有缺省控制通道。缺省控制通道的最大包长在设备描述表中得到了说明。一个配置的端节点与接口定义在配置描述表中,一个配置和它的接口不包括节点描述表。除最大包长外,缺少通道的特性由本说明定义,并且对所有的 USB 设备都一样。bNumberConfiguration s 域表明此设备支持的配置数。
表 1-1 为标准设备描述表。
偏移量 | 域 | 大 小 | 值 | 描述 |
0 | bLength | 1 | 数字 | 此描述表的字节数 |
1 | bDecriptorType | 1 | 常量 | 描述表种类为设备 |
2 | bcdUSB | 2 | BCD 码 | 此设备与描述表兼容的 USB 设备说明版本号(BCD 码) |
4 | bDeviceClass | 1 | 类 | 设备类码 如果此域的值为0 则一个设置下每个接口指出 它自己的类,并个接口各自独立工作。 如果此域的值处于 1~FEH 之间,则设备在不 同的接口上支持不同的类。并这些接口可能不能独 立工作。此值指出了,这些接口集体的类定义。 如果此域设为 FFH,则此设备的类由厂商定 义。 |
5 | bDeviceSubClass | 1 | 子类 | 子类码 这些码值的具体含义根据 bDeviceClass 域 来看。 如 bDeviceClass 域为零,此域也须为零 如 bDeviceClass 域为 FFH, 此域的所有值保留。 |
6 | bDevicePortocol | 1 | 协议 | 协议码 这些码的值视 bDeviceClass 和 bDeviceSubClass 的值而定。 如果设备支持设备基础上的类相关的协议, 此码标志了设备类说明上的值。 如果此域的值为零,则此设备不在设备基础 上支持设备类相关的协议。然而,它可能在接口基 础上支持设备类相关的协议。 如果此域的值为 FFH,此设备使用厂商定义的 协议。 |
7 | bMaxPacketSize0 | 1 | 数字 | 端点 0 的最大包大小(仅 8,16,32,64 为合法值) |
8 | idVendor | 2 | ID | 厂商标志(由 USB 标准付值) |
10 | idProduct | 2 | ID | 产品标志(由厂商付值) |
12 | bcdDevice | 2 | BCD 码 | 设备发行号(BCD 码) |
14 | iManufacturer | 1 | 索引 | 描述厂商信息的字串的索引。 |
15 | iProduct | 1 | 索引 | 描述产品信息的字串的索引。 |
16 | iSerialNumber | 1 | 索引 | 描述设备序列号信息的字串的索引。 |
17 | bNumConfigurations | 1 | 数字 | 可能的设置数 |
1.2 配置描述符表
配置描述表给出了一设备配置的信息,描述表包括一个 b ConfigurationValue 域,在 SetConfiguration( )请时被用作参数来设置所需配置。此描述表给出了此配置下的接口数量,每个接口可能独立操作。比如, 一个 ISDN设备可能配置有两个接口,每个都提供 64KB/S 的有独立数据源与数据接收者的双向通道在另一个配置下 ISDN 可能表现为单个接口,将两个通道合成一个 128KB/S的双向通道。当主机发出请求要得配置描述表时,所有相关接口与端节点的描述表都被返回。
一个 USB 设备有一个或多个配置。每个配置只有一个或多个接口。而每个接口又有 0 个或多个端节点。在一个配置下,一个端节不会在接口之间共享,除非端节点被同一个接口的不同设置使用。在不同配置端节点,可无此限制。一个配置好后,设备可支持对配置的有限调整,如果一个接口有备选设置,在配置好后可选择不同设置。
每个配置描述块是作为一个整体由函数usb_get_descriptor读入缓冲区的。配置描述块包含着若干个“接口描述块”,而每个接口描述块中,又可以包含若干个“端点描述块”,各种层次描述块的数量则因具体的配置而异,所以配置描述块的大小并非常数。同时,这些描述块中又可以包含一些由具体设备的制造商或行业协会自行定义的层次描述块。所以,每读入一个配置描述块以后,都要通过usb_parse_configuration加以分析辨认,从配置描述块中分解出各个层次描述块,并为这些描述块建立相应的数据结构,以形成对目标设各个层次的描述。
表 1-2 是标准配置描述表。
偏移量 | 域 | 大小 | 值 | 描述 |
0 | bLength | 1 | 数字 | 此描述表的字节数。 |
1 | bDescriptorType | 1 | 常量 | 配置描述表类型 |
2 | wTotalLength | 2 | 数字 | 此配置信息的总长(包括配置,接口,端 点和设备类及厂商定义的描述表) |
4 | bNumInterfaces | 1 | 数字 | 此配置所支持的接口个数 |
5 | bCongfigurationV alue | 1 | 数字 | 在 SetConfiguration()请求中用作 参数来选定此配置。 |
6 | iConfiguration | 1 | 索引 | 描述此配置的字串描述表索引 |
7 | bmAttributes | 1 | 位图 | 配置特性: D7: 保留(设为一) D6: 自给电源 D5: 远程唤醒 D4..0:保留(设为一) 一个既用总线电源又有自给电源的设备 会在 MaxPower 域指出需要从总线取的 电量。并设置 D6 为一。运行时期的实际 电源模式可由 GetStatus(DEVICE) 请 求得到。 |
8 | MaxPower | 1 | mA | 在此配置下的总线电源耗费量。以 2mA 为 一个单位。 |
表 1 -2 标准配置描述表
1.3 接口描述符表
此描述表在一个配置内给出一个接口的信息。如果一个配置支持不止一个接口,端节点的描述表会跟在接口描述表后被返回,接口描述表总是作为配置描述表的一部分被返回。接口描述不可直接用 Set Description ( )和 Get Descriptor( )存取。一个接口可能包含备选设置,以使得端节点或他们的特性在设备配置好以后能改变。一个接口的缺省设置总是可选设置。SetInterface ( )与 GetInterface( )用来选择与返回选择了的接口设置。可选的接口设置使得部分的设备配置能在其它接口进行操作的情况下改变。
如果一个配置对于它的一个或多个接口有备选设置,每一设置包括一个独立接口描述表和相关结点。如果一个设备配置支持单个接口,并此接口有两个可选设置,配置描述表返回以后会紧跟着返回 bInterfaceNumber 与 bAlternateSetting 域皆为 0 的第一个设置的接口描述表及相关的结点描述表,而随之后是另一个设置接口描述表与结点描述表。第二个接口描述表的 bInterfaceNumber 域也应为 0,但 bAlternateSetting 域应为 1。如果一个接口仅使用节点 0,则接口描述表以后就不再返回节点描述表,并且此接口表示的是一个请求接口,它使用连在节点 0 上的缺省通道。在这种情况下 bNumberEndpoints 域应被设置成 0。一个接口描述表的节点个数不把结点 0 计在内。
表 1-3 是标准节口描述表。
偏移量 | 域 | 大小 | 值 | 说明 |
0 | bLength | 1 | 数字 | 此表的字节数 |
1 | bDescriptorType | 1 | 常量 | 接口描述表类 |
2 | bInterfaceNumber | 1 | 数字 | 接口号, 当前配置支 持的接口数组索引 (从零开始) |
3 | bAlternateSetting | 1 | 数字 | 可选设置的索引值。 |
4 | bNumEndpoints | 1 | 数字 | 此接口用的端点数 量, 如果是零则说明 此接口只用缺省控 制管道。 |
23
5 | bInterfaceClass | 1 | 类 | 类值 零值为将来的标 准保留。 如果此域的值设 为 FFH,则此接口 类由厂商说明。 所有其它的值由 USB 说明保留。 |
6 | bInterfaceSubClass | 1 | 子类 | 子类码 这些值的定义视 bInterfaceClas s 域而定。 如果 bInterfaceClas s 域的值为零则此 域的值必须为零。 bInterfaceClas s 域不为 FFH 则所 有值由 USB 所保 留。 |
7 | bInterfaceProtocol | 1 | 协议 | 协议码: bInterfaceClas s 和 bInterfaceSubC lass 域的值而定. 如果一个接口支持 设备类相关的请求 此域的值指出了设 备类说明中所定义 的协议. |
8 | iInterface | 1 | 索引 | 描述此接口的字串 描述表的索引值。 |
表 1 -3 标准接口描述表
1.4 端点描述符
每个接口使用的端点都有自己的描述表,此描述表被主机用来决定每个端点的带宽需求。每个结点的描述表总是作为配置描述的一部分返回的,结点 0 无描述表。
1-4 为标准端点描述表。
偏移量 | 域 | 大小 | 值 | 说明 |
0 | bLength | 1 | 数字 | 此描述表的字节数 |
1 | bDescriptorType | 1 | 常量 | 端点描述表类 |
2 | bEndpointAddress | 1 | 端点 | 此描述表所描述的端点的地址。 此地址的编 码如下: Bit 3..0 : 端点号. Bit 6..4 : 保留,为零 Bit 7: 方向,如果控制端点则略。 0:出端点 1:入端点 |
3 | bmAttributes | 1 | 位图 | 此域的值描述的是在 bConfigurationValue 域所指的配置下 端点的特性。 Bit 1..0 :传送类型 00=控制传送 01=同步传送 10=批传送 11=中断传送 所有其它的位都保留。 |
4 | wMaxPacketSize | 2 | 数字 | 当前配置下此端点能够接收或发送的最大 数据包的大小。 对与同步传送此值用于为每幀的数据净 负荷预留时间。 而通道可能在实际运行时不 需要预留的带宽。 实际带宽可由设备通过一 种非 USB 定义的机制汇报给主机. 对于中断传送,批传送,控制传送.端点 可能发送较小的数据包。 并且在结束传送后 既有可能间隙时间来重启, 也有可能不需要 这段时间。具体请参照第五章。 |
6 | bInterval | 1 | 数字 | 轮寻数据传送端点的时间间隙。 此域的值对于批传送的端点及控制传送 的端点忽略。 对于同步传送的端点此域必需 为 1。对于中断传送的端点此域值的范围为 1 到 255。 |
表 1 -4 标准端点描述表
2、枚举过程
待续.....