news 2026/5/12 1:57:57

对USB USB_SETUP_REQ 的理解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
对USB USB_SETUP_REQ 的理解
struct USB_SETUP_REQ { 2 uint8_t bmRequestType; // 方向 + 类型 + 接收者 3 uint8_t bRequest; // 请求编号(如 0x03 = SET_FEATURE) 4 uint16_t wValue; 5 uint16_t wIndex; 6 uint16_t wLength; 7};

🧩 二、USB_SETUP_REQ在 USB 流程中的完整应用流程

🟦 步骤 1:设备插入 → 主机检测到新设备

  • 设备连接后,主机通过默认地址 0与设备通信。
  • 此时设备处于未配置状态,只能响应少量标准请求。

🟦 步骤 2:主机发送第一个 SETUP 请求 ——GET_DESCRIPTOR

主机发送的 SETUP 包(8 字节):
字节含义
0x000x80bmRequestType: IN, Standard, Device
0x010x06bRequest: GET_DESCRIPTOR
0x020x00wValue(LSB): Descriptor Index = 0
0x030x01wValue(MSB): Descriptor Type = Device
0x040x00wIndex(LSB): Interface = 0
0x050x00wIndex(MSB): 接口号=0
0x060x00wLength(LSB): 数据长度 = 18 字节
0x070x12wLength(MSB): 18 字节

🟦 步骤 3:设备接收并解析 SETUP 包

设备固件收到这 8 字节后,将其存入USB_SETUP_REQ结构体:

USB_SETUP_REQ req; req.bmRequestType = 0x80; // IN, Standard, Device req.bRequest = 0x06; // GET_DESCRIPTOR req.wValue = 0x0100; // Type=Device, Index=0 req.wIndex = 0x0000; req.wLength = 0x0012; // 18 bytes

然后判断:

  • Standard Request→ 由 USB 核心处理
  • 调用USBD_GetDescriptor()返回设备描述符

🟦 步骤 4:DATA 阶段 —— 设备发送描述符

  • 设备通过EP0 IN发送 18 字节的设备描述符。
  • 主机接收并解析(如厂商 ID、产品 ID、支持速度等)。

🟦 步骤 5:STATUS 阶段 —— 确认完成

  • 主机发送一个OUT数据包(空),表示“已收到”。
  • 或者设备发送一个IN数据包(空),表示“已发送”。

→ 控制传输结束。

🎯 三、USB_SETUP_REQ的核心作用总结

功能说明
启动控制传输每次控制传输都从 SETUP 包开始
传递命令和参数bRequest是命令,wValue/wIndex是参数
决定后续行为bmRequestType决定是标准/类/厂商请求
指定数据方向和长度wLength告诉设备要传多少数据
枚举的关键工具主机通过它获取描述符、设置地址、配置设备

📈 四、USB_SETUP_REQ的典型应用场景(表格)

场景SETUP 包内容用途
获取设备描述符bmRequestType=0x80,bRequest=0x06,wValue=0x0100主机了解设备基本信息
设置设备地址bmRequestType=0x00,bRequest=0x05,wValue=0x000A给设备分配唯一地址(如 0x0A)
设置配置bmRequestType=0x00,bRequest=0x09,wValue=0x0001让设备进入工作状态
清除端点 StallbmRequestType=0x02,bRequest=0x01,wIndex=0x0083恢复端点正常通信
CDC 设置波特率bmRequestType=0x21,bRequest=0x20,wLength=0x0007配置串口参数

✅ 总结:USB_SETUP_REQ的完整生命周期

  1. 主机发起:通过 EP0 发送 8 字节 SETUP 包
  2. 设备接收:硬件自动捕获,软件解析为USB_SETUP_REQ
  3. 分类处理
    • Standard → USB Core 处理(如 SET_ADDRESS)
    • Class → 调用 class driver(如 CDC)
  4. 执行操作:根据请求内容读取/写入数据
  5. 返回结果:通过 DATA 和 STATUS 阶段完成通信
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/6 19:29:04

物流状态播报:让用户听到包裹运输进展

物流状态播报:让用户听到包裹运输进展 在快递单号满天飞的今天,你是否曾盯着手机里一条条“您的快件已由【XX分拣中心】发出”的文字通知,看得麻木?这些信息虽然准确,却冰冷、易被忽略。尤其对中老年用户而言&#xff…

作者头像 李华
网站建设 2026/5/11 15:51:36

NPS净推荐值测算:评估GLM-TTS用户的忠诚度水平

NPS净推荐值测算:评估GLM-TTS用户的忠诚度水平 在AI语音技术逐渐渗透到智能客服、有声内容、教育辅助等日常场景的今天,一个核心问题浮出水面:用户真的愿意长期使用并推荐这款TTS产品吗? 技术参数再亮眼——比如支持零样本克隆、情…

作者头像 李华
网站建设 2026/5/11 13:01:17

版本更新日志模板:透明化GLM-TTS迭代进程

GLM-TTS技术解析:如何用3秒音频克隆声音并精准控制发音与情感 在语音合成技术突飞猛进的今天,一个让人难以忽视的趋势正在发生——我们不再需要几百小时的专业录音来训练专属声音。只需一段短短几秒的清晰人声,AI就能“学会”你的音色&#x…

作者头像 李华
网站建设 2026/5/11 14:13:40

少数民族语言传承:数字化保存口头文化遗产

少数民族语言传承:用AI守护即将消逝的声音 在云南怒江峡谷深处,一位白发苍苍的独龙族老人正低声吟唱一首古老的迁徙歌谣。他的声音沙哑而低沉,节奏缓慢如溪流穿石——这不仅是音乐,更是一部口传的历史。然而,村里能完整…

作者头像 李华
网站建设 2026/5/7 11:21:06

Elasticsearch 存储水位线测试验证

目录标题Elasticsearch 存储水位线测试验证环境准备一、水位线说明默认水位线注意事项:本地存储场景二、查看水位线设置方式1:查看当前有效值(推荐)方式2:查看所有默认值方式3:查看磁盘使用情况三、修改水位…

作者头像 李华
网站建设 2026/5/11 20:33:41

无需科学上网:通过网盘直链下载助手获取大模型资源

无需科学上网:通过网盘直链下载助手获取大模型资源 在智能语音应用日益普及的今天,越来越多开发者希望将高质量的文本转语音(TTS)能力集成到自己的项目中。然而,一个现实问题摆在面前:许多开源大模型托管在…

作者头像 李华