4.4 端点描述符
端点描述符定义了 USB 设备中数据通信的具体逻辑接口(端点),包括传输方向、类型、包大小等关键参数。每个非控制端点必须有一个端点描述符。
USB 端点描述符的结构
偏移量 | 域 | 大小 | 值 | 描述 |
---|---|---|---|---|
0 | bLength |
1 | 数字 | 描述符长度(固定为 0x07 字节)。 |
1 | bDescriptorType |
1 | 常量 | 描述符类型(此处为 0x05 ,表示端点描述符)。 |
2 | bEndpointAddress |
1 | 端点 | 端点地址与方向: • Bit 7: 0 =OUT(主机→设备),1 =IN(设备→主机)• Bit 3-0: 端点号(1-15) |
3 | bmAttributes |
1 | 位图 | 传输类型: • Bit 1-0: 00 =控制,01 =同步,10 =批量,11 =中断• 其他位保留(必须为 0 ) |
4 | wMaxPacketSize |
2 | 数字 | 当前端点支持的最大数据包大小(单位:字节)。 |
6 | bInterval |
1 | 数字 | 轮询间隔: • 同步/中断传输:单位为毫秒(1-255) • 批量/控制传输:忽略 |
关键字段详解
bEndpointAddress
- 示例:
0x81
表示端点号1
,方向为IN
(设备→主机)。
- 示例:
bmAttributes
传输类型
值 | 类型 | 典型应用 |
---|---|---|
00 |
控制传输 | 设备配置(端点 0 ) |
01 |
同步传输 | 实时音频/视频 |
10 |
批量传输 | U盘、打印机 |
11 |
中断传输 | 键盘、鼠标 |
wMaxPacketSize
- 低速设备:最大
8
字节 - 全速设备:最大
64
字节(控制端点)或1023
字节(其他端点) - 高速设备:最大
1024
字节
- 低速设备:最大
bInterval
- 中断传输:通常为
10
(即10ms
轮询一次)。 - 同步传输:固定为
1
(每1ms
一帧)。
- 中断传输:通常为
示例:鼠标的中断端点描述符
字段 | 值(十六进制) | 说明 |
---|---|---|
bLength |
0x07 |
描述符长度为 7 字节。 |
bDescriptorType |
0x05 |
端点描述符类型。 |
bEndpointAddress |
0x81 |
IN 端点,端点号 1 。 |
bmAttributes |
0x03 |
中断传输(11 )。 |
wMaxPacketSize |
0x04 |
最大包大小为 4 字节(鼠标数据)。 |
bInterval |
0x0A |
每 10ms 轮询一次。 |
注意事项
- 控制端点(端点
0
):- 无需描述符,其参数由设备描述符中的
bMaxPacketSize0
定义。
- 无需描述符,其参数由设备描述符中的
- 同步传输:
- 不支持握手包(无 ACK/NAK),需保证实时性但允许数据丢失。
- 端点方向:
- 同一端点号可同时存在
IN
和OUT
端点(如端点1 IN
和1 OUT
)。
- 同一端点号可同时存在