USB端点控制请求
2026-08-17
本文链接为:http://www.usbzh.com/article/detail-1795.html ,欢迎转载,转载请附上本文链接。
USB端点控制请求有以下几种
- SET_FEATUER
- CLEAR_FEATURE
- GET_STATUS
主机对端点发请求
│
设备处于什么状态?
┌──────┴──────┐
│ │
ADDRESSED CONFIGURED
(未配置) (已配置)
│ │
端点未打开 端点已打开
│ │
非EP0→STALL 正常处理HALT
(请求非法) (SET_FEATUER/CLR_FEATUER/GET_STATUS)

请求 1:SET_FEATURE(设置端点特性)
语义:主机要求设置端点特性,对端点唯一有效的是 USB_FEATURE_EP_HALT(要求停止端点)。
| 设备状态 | 处理 | 为什么 |
|---|---|---|
| ADDRESSED | 非 EP0 端点 → DCD_EP_Stall | 未配置时端点还没打开,请求非法,STALL 表示”不存在” |
| CONFIGURED | wValue==EP_HALT 且非 EP0 → Stall;然后 class_cb->Setup + 发状态包 | 已配置才能正常设置 HALT |
| 其他 | USBD_CtlError | 默认态请求错误 |
关键:CLEAR_FEATURE 里多了 class_cb->Setup(pdev, req),主机清除 STALL 后,类层需要知道并做后续处理。
请求 2:CLEAR_FEATURE(清除端点特性)
语义:主机要求清除 HALT(取消 STALL,恢复端点)。
| 设备状态 | 处理 | 为什么 |
|---|---|---|
| ADDRESSED | 非 EP0 → Stall | 同 SET_FEATURE,未配置端点非法 |
| CONFIGURED | wValue==EP_HALT → ClrStall + class_cb->Setup + 发状态包 | 清除 STALL,恢复端点 |
请求 3:GET_STATUS(查询端点状态)
语义:主机查询端点是否处于 HALT 状态,返回 2 字节(bit0 = HALT)。
| 设备状态 | 处理 | 为什么 |
|---|---|---|
| ADDRESSED | 非 EP0 → Stall | 未配置端点非法 |
| CONFIGURED | 读 is_stall 填充 USBD_ep_status,返回 2 字节 | 报告端点 HALT 状态 |
HID人机交互QQ群:564808376
UAC音频QQ群:218581009
UVC相机QQ群:331552032
BOT&UASP大容量存储QQ群:258159197
STC-USB单片机QQ群:315457461
USB技术交流QQ群2:580684376
USB技术交流QQ群:952873936 USB技术交流3:1031974172
USB2.0规范





