USB2.0令牌、事务及传输抓包分析
+ -

USB传输 SetAddress传输

2025-03-28 18 0

SetAddress传输包含两个事务,分别为Setup事务IN事务

  • Setup事务
    • Setup翎牌
    • Data0
    • Ack
  • In事务
    • In令牌包
    • Data1
    • Ack

通过总线分析仪抓包可见:
USB SetAddress事务
SetAddress事务

其中

  • Setup事务用于从主机接收地址值。
  • IN事务用于设备设置新的地址完成。

如对于WCH569芯片,其源代码如下:
在其Setup事务中断中,保存数据到全局变量中

  switch( SetupReq )
  {
      case USB_SET_ADDRESS:
        g_devInfo.dev_addr = UsbSetupBuf->wValueL;
        break;
  }

而在IN事务中设置地址到设备寄存器:

UINT16 U20_Endp0_IN_Callback(void)
{
    UINT16 len = 0;
    //setup是全局变量,记录着setup事务的请求类型
    switch(SetupReq)
    {
        //SetupLen是全局变量,在SETU事务中设置描述符的长度,然后通过IN返回数据,可能有多次的IN
      case USB_GET_DESCRIPTOR:
          len = SetupLen >= U20_UEP0_MAXSIZE ? U20_UEP0_MAXSIZE : SetupLen;
          memcpy(endp0RTbuff, pDescr, len);
          SetupLen -= len;
          pDescr += len;
          break;
      case USB_SET_ADDRESS:
          USB20_Device_Setaddress(g_devInfo.dev_addr);
          break;
      default:
          break;
    }

    //返回IN的事务长度
    return len;
}

void USB20_Device_Setaddress( UINT32 address )
{
    R8_USB_DEV_AD = address; // SET ADDRESS
}
HID人机交互QQ群:564808376    UAC音频QQ群:218581009    UVC相机QQ群:331552032    BOT&UASP大容量存储QQ群:258159197    STC-USB单片机QQ群:315457461    USB技术交流QQ群2:580684376    USB技术交流QQ群:952873936   

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芯片,其源代码......
关注公众号
  • HID人机交互
  • Linux&USB
  • UAC音频
  • TYPE-C
  • USB规范
  • USB大容量存储
  • USB百科
  • USB周边
  • UVC摄像头
  • Windows系统USB
  • 音视频博客
  • 取消
    感谢您的支持,我会继续努力的!
    扫码支持
    扫码打赏,你说多少就多少

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

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