USB3总线分析仪传输抓包分析
+ -

USB3设置地址SetAddress传输抓包

2026-06-02 本文链接为:http://www.usbzh.com/article/detail-1679.html ,欢迎转载,转载请附上本文链接。

SetAddress

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命令)

  1. 93054(Host→Dev DP数据包)
    • 参数:DP、DataLen=8、ADDR=0、ENDP=0
    • 内容:8字节Setup包 00 05 01 00 00 00 00 00
      bRequest=05=SET_ADDRESS、wValue=1(新地址=1)、wLength=0,主机下发地址配置指令;
    • 方向:Right(主机下发至默认地址0的EP0)。
  2. 93057(Dev→Host ACK TP握手包)
    • 参数:TP ACK、ADDR=0、ENDP=0、Not Pnd(Pending=0);
    • 功能:设备链路ACK确认:完整收下SET_ADDRESS命令,内部已加载新地址配置,SETUP阶段结束

间隔9.856us:设备硬件解析Setup指令、锁存新地址1的耗时。

② 无DATA阶段(关键:wLength=0,规范直接跳过IN/OUT数据阶段)

SET_ADDRESS是特殊控制请求,不需要收发数据,直接进入STATUS状态阶段,和前面GET_DESCRIPTOR带18字节IN数据的结构区分开。

③ 第二段:STATUS状态事务(IN方向状态收尾,确认地址修改完成)

  1. 93072(Host→Dev Status TP)
    主机发起STATUS-IN请求(USB3.0用Status TP替代IN令牌),询问设备:地址修改操作是否正常完成。
  2. 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

四、补充知识点

  1. SET_ADDRESS生效规则:设备收到STATUS阶段ACK之后,新地址才正式生效,不能收到Setup立刻改地址,防止传输中断;
  2. USB3.0逻辑:依旧无IN令牌,STATUS-IN靠Status TP发起请求,设备ACK代表空长度IN应答成功;
  3. 对比上一条GET_DESCRIPTOR:前者wLength>0有DATA-IN,本条wLength=0省略DATA。
本文链接为:http://www.usbzh.com/article/detail-1679.html ,欢迎转载,转载请附上本文链接。

0 篇笔记 写笔记

USB2.0设备枚举-主机设置设备地址事务
USB主机在首次获取设备描述符后,知道了设备的默认端点大小。后续一个重要的操作是对设备分配地址。对USB设备分配地址是通过标准请求SetAddress来完成后。其具体的过程如下图所示:SetAddress包括2个事务。第一个事务是对主机设置地址,第二个事务是主机对设备返加一个0字节的数据包,用于确......
USB 设置请求地址SetAddress
ID请求码说明5SET_ADDRESS用来给设备分配地址SetAddress 用于枚举(enumeration)阶段为设备分配一个唯一的地址,地址在 wValue 字段中且最大值为 127。该请求特别的地方在于,直到状态阶段完成,设备才完成地址设置。其他所有请求必须在......
USB设备SetAddress失败
有的时候插拔USB设备,会出现各种各样的情况。我们其实见到的最多的是获取设备描述符失败。详见https://www.usbzh.com/article/detail-395.html另一种情况就是Set Address Failed。这种情况在系统中表现为:第一次获取设备描述符成功后,主机向设备分配......
USB主机控制器分配设备地址SetAddress
我们都知道USB总线负责对USB设备的管理,这里包括分配地址。但这个地址的分配其实是由USB主机控制器来实现的。这里我们以WINXP的usbehci.sys驱动为例进行分析。一条USB总线线上最多包括127个设备(包括该USB控制器下的USB根集线器),所以在USB主机控制器的其通过一个数据大小为......
USB传输 SetAddress传输
SetAddress传输包含两个事务,分别为Setup事务和IN事务。Setup事务Setup翎牌Data0AckIn事务In令牌包Data1Ack通过总线分析仪抓包可见:其中Setup事务用于从主机接收地址值。IN事务用于设备设置新的地址完成。如对于WCH569芯片,其源代码......
USB3设置地址SetAddress传输抓包
SET_ADDRESS 特征:wLength=0 → 无DATA阶段,只有 SETUP + STATUS 两段(USB标准规范)Right=主机→设备、Left=设备→主机;DP=数据报文、TP=链路握手报文一、整体业务含义本次控制请求:SET_ADDRESS,wValue=0x0001主机......
关注公众号
  • HID人机交互
  • Linux&USB
  • UAC音频
  • CDC
  • TYPE-C
  • USB规范
  • USB大容量存储
  • USB百科
  • USB周边
  • UVC摄像头
  • Windows系统USB
  • USB资源
  • 音视频博客
  • 取消
    感谢您的支持,我会继续努力的!
    扫码支持
    扫码打赏,你说多少就多少

    打开支付宝扫一扫,即可进行扫码打赏哦

    您的支持,是我们前进的动力!