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)。
- 同一端点号可同时存在
