USB3设置地址SetAddress传输抓包
2026-06-02
本文链接为:http://www.usbzh.com/article/detail-1679.html ,欢迎转载,转载请附上本文链接。

SET_ADDRESS 特征:wLength=0 → 无DATA阶段,只有 SETUP + STATUS 两段(USB标准规范)
Right=主机→设备、Left=设备→主机;DP=数据报文、TP=链路握手报文
一、整体业务含义
本次控制请求:SET_ADDRESS,wValue=0x0001
主机通知设备:把自身USB地址从默认ADDR=0修改为新地址ADDR=1,后续所有通信改用地址1,是设备枚举第二步(获取设备描述符之后、配置描述符之前)。
二、分段拆解2个Transaction(SETUP事务 + STATUS事务,缺DATA阶段)
① 第一段:SETUP事务(下发8字节SET_ADDRESS命令)
- 93054(Host→Dev DP数据包)
- 参数:DP、DataLen=8、ADDR=0、ENDP=0
- 内容:8字节Setup包
00 05 01 00 00 00 00 00bRequest=05=SET_ADDRESS、wValue=1(新地址=1)、wLength=0,主机下发地址配置指令; - 方向:Right(主机下发至默认地址0的EP0)。
- 93057(Dev→Host ACK TP握手包)
间隔9.856us:设备硬件解析Setup指令、锁存新地址1的耗时。
② 无DATA阶段(关键:wLength=0,规范直接跳过IN/OUT数据阶段)
SET_ADDRESS是特殊控制请求,不需要收发数据,直接进入STATUS状态阶段,和前面GET_DESCRIPTOR带18字节IN数据的结构区分开。
③ 第二段:STATUS状态事务(IN方向状态收尾,确认地址修改完成)
- 93072(Host→Dev Status TP)
主机发起STATUS-IN请求(USB3.0用Status TP替代IN令牌),询问设备:地址修改操作是否正常完成。 - 93075(Dev→Host ACK TP)
设备回复ACK握手,无DP数据包(0长度状态应答),含义:SET_ADDRESS执行成功,设备已经正式切换为USB地址1,整条控制传输全部完成。两包间隔18.824ms:设备执行地址切换、寄存器配置的处理延时。
三、全流程时序浓缩
主机DP下发SET_ADDRESS指令(93054,ADDR=0)
→设备ACK确认收到命令(93057)
→主机发起STATUS状态查询(93072)
→设备ACK应答:地址修改成功(93075)
设备自此:原有ADDR=0保留仅用于后续配置,常规通信使用ADDR=1
四、补充知识点
- SET_ADDRESS生效规则:设备收到STATUS阶段ACK之后,新地址才正式生效,不能收到Setup立刻改地址,防止传输中断;
- USB3.0逻辑:依旧无IN令牌,STATUS-IN靠Status TP发起请求,设备ACK代表空长度IN应答成功;
- 对比上一条GET_DESCRIPTOR:前者wLength>0有DATA-IN,本条wLength=0省略DATA。
USB3总线分析仪传输抓包分析





