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

USB2.0 令牌包

2021-11-29 5234 1

令牌包全部由USB主机发出,其内容包括包标识PID,包目标地址ADDR,包目标地址(ENDP)和CRC5校验位域。
令牌包指明了后续数据包的目标地址和端点。
令牌包的PID有:

PID 含义 说明
0001 令牌OUT 主机发送数据到USB设备
1001 令牌IN 主机接收从USB设备发出的数据
0101 令牌SOF 此时作为一个帧或者小帧的开始信息
1101 令牌SETUP 主机向USB设备发送配置信息
1000 特殊用途SPLIT 高速主使用事该SPLIT事务解决从高速模式到低速和全速模式的转换
0100 特殊用途PING 仅用于高速模式下主机使用该事务判断设备是否可以接收数据
1100 PRE令牌包 低速数据的先导包

USB协议定义了8种令牌包,分别为:

IN令牌包

IN令牌包格式由8位的包标识字段PID,7位的地址字段ADDR、4位的段点字段和5位的循环字段CRC共24位3字节组成。
IN令牌包

  • 包标识字段PID:定义了数据传输方向为USB设备到USB主机。
  • ADDR字段:指明了USB设备地址。
  • ENDP字段:指明了发送数据的端点号。
  • CRC字段:用于ADDR字段和ENDP字段进行循环冗余校验。
    IN令牌包

OUT令牌包

OUT令牌包格式由8位的包标识字段PID,7位的地址字段ADDR、4位的段点字段和5位的循环字段CRC共24位3字节组成。
OUT令牌包

  • 包标识字段PID:定义了数据传输方向为USB主机到USB设备。
  • ADDR字段:指明了USB设备地址。
  • ENDP字段:指明了接收数据的端点号。
  • CRC字段:用于ADDR字段和ENDP字段进行循环冗余校验。

SETUP令牌包

SETUP令牌包格式由8位的包标识字段PID,7位的地址字段ADDR、4位的段点字段和5位的循环字段CRC共24位3字节组成。
SETUP令牌包

  • 包标识字段PID:定义了数据传输方向为USB主机到USB设备。
  • ADDR字段:指明了USB设备地址。
  • ENDP字段:指明了接收数据的端点号。
  • CRC字段:用于ADDR字段和ENDP字段进行循环冗余校验。
    SETUP令牌包

PING令牌包

PING令牌包格式由8位的包标识字段PID,7位的地址字段ADDR、4位的段点字段和5位的循环字段CRC共24位3字节组成。
PING令牌包

  • 包标识字段PID:定义了USB设备到USB主机的握手信号传输。
  • ADDR字段:指明了USB设备地址。
  • ENDP字段:指明了发送握手包的端点号。
  • CRC字段:用于ADDR字段和ENDP字段进行循环冗余校验。

注意:

  • 从以上的令牌包的ADDR可以看到,USB设备的地址为7位,所以从这里也反映了出了一条USB总线为什么支持127个设备(1-127,其中地址0用于设备的初始化)。2^7=128
  • 另外,从从ENDP可以看到,ENDP占4位,所以一个USB设备最大支持16个双向通道。

SOF令牌包

SOF令牌包包格式由8位的包标识字段PID,11位的帧号字段和5位的循环字段CRC共24位3字节组成。
SOF令牌包

  • 包标识字段PID:定义了数据传输方向为USB主机到USB设备。
  • 帧号字段:指明了USB传输的帧号,其11位。
  • CRC字段:用于帧号字段进行循环冗余校验。

SSPLIT令牌包

在USB规范中,为了提高数据传输效率,可以使用SSPLIT令牌包在USB主机与USB集线器之间使用高速数所传输的同时,同时进行低速或全速的数据传输。
SSPLIT令牌包包括开始SPLIT(SSPLIT)令牌包结速SPLIT(CSPLIT令牌包).
启动令牌包SSPLIT由8位的包标识字段PID,7位的地址字段ADDR,1位的SC字段,7位的PORT字段、1位的 S字段、1位的E字段、2位的ET字段和5位的循环校验字段CRC.
1599988721782

  • 包标识字段PID:定义了数据传输方向为USB主机到USB集线器
  • ADDR字段:指明了USB设备地址。
  • PORT字段:用于指明USB集线器的端口号。该字段最多指定128个集线器端口。
  • S字段:在中断传输和控制情况下,如果S=0表示全速传输,如果为S=1表示低速传输。在块传输和同步传输下,S必须为0.对于同步OUT传输,按下表进行选择
S E 说明
0 0 全速数据负载的中间数据是高速数据
0 1 全速数据负载的尾部数据是高速数据
1 0 全速数据负载的首部数据是高速数据
1 1 全速数据负载的全部数据是高速数据
  • ET字段:用于指明在高速数据传输中,使用低速、全速数据传输的类型 。
ET=00 ET=01 EG=10 ET=11
控制传输 同步传输 块传输 中断传输

CSPLIT令牌包

结束令牌包CSPLIT的定义格式包含8位的包标识字段PID、7位的地址ADDR、1位的SC字段、7位的PORT字段、1位的S字段、1位的U字段、2位的ET字段和5位的循环校验字段CRC.
CSPLIT令牌包

  • PID字段:定义了数据传输方向为USB主机到USB集线器。
  • ADDR字段:指明了USB集线器的设备地址。
  • SC字段:该字段固定为“1”, 用于表示结束SPLIT令牌包。
  • PORT字段:用于指明USB集线器的端口号。该字段最多可以指定128个USB集线器端口。
  • S字段, 含义和S SPLIT令牌包中类似。
  • U字段:其值必须为“0”,保留。
  • ET字段:用于指明在高速数据传输中,使用的低速/全速数据传输的类型。
    当置ET=00时,表示采用控制传输
    当置ET=01时,表示采用同步传输
    当置ET=10时,表示采用块传输:
    当置ET=11时,表示采用中断传输

PRE令牌包

PRE数据包吸一个8位的PID字段,是低速数据的先导包。在低速数据传输前,必须先发先导包PRE,这样USB集线器才会激活相应的低速数据传输端口。
PRE令牌包

HID人机交互QQ群:564808376    UAC音频QQ群:218581009    UVC相机QQ群:331552032    BOT&UASP大容量存储QQ群:258159197    STC-USB单片机QQ群:315457461    USB技术交流QQ群2:580684376    USB技术交流QQ群:952873936   

1 篇笔记 写笔记

内容和架构很清晰,但文章里有一些错别字,希望作者有时间可以修改一下;


书中人。 2023-12-18 12:53:54
USB2.0 SOF令牌包
SOF令牌包是最广泛的令牌包,由主机发送。在实机的抓包工具过程,由于和NAK包大量存在,都会在软件配置中不显示。但这并不代表这个SOF令牌包不重要。SOF令牌不需要像其它令牌一样,具有握手包。因此发送给设备的SOF包并不能保证一定会收到。SOF数据流管理由USB主机发送一个SOF令牌包。SOF数据......
USB2.0 IN令牌包
令牌IN用于主机接收从USB设备发出的数据,和OUT令牌的数据传输方向相反。IN令牌包格式由8位的包标识字段PID,7位的地址字段ADDR、4位的段点字段和5位的循环字段CRC共24位3字节组成。包标识字段PID:定义了数据传输方向为USB设备到USB主机。ADDR字段:指明了USB设备地址。......
USB2.0 OUT令牌包
USB2.0 OUT令牌用于主机向设备发送数据,令牌后跟数据包,当数据发送完成后设备需返回ACK包。OUT令牌包格式OUT令牌包格式由8位的包标识字段PID,7位的地址字段ADDR、4位的段点字段和5位的循环字段CRC共24位3字节组成。包标识字段PID:定义了数据传输方向为USB主机到USB......
USB2.0 SETUP令牌包
SETUP令牌包用于主机向USB设备发送配置信息SETUP令牌包结构SETUP令牌包格式由8位的包标识字段PID,7位的地址字段ADDR、4位的端点字段和5位的循环字段CRC共24位3字节组成。包标识字段PID:定义了数据传输方向为USB主机到USB设备。ADDR字段:指明了USB设备地址。E......
USB2.0 PING令牌包
PING事务PING事务只有令牌包和握手包。PING事务是USB2.0高速模式特有的,全速模式和低速模式没有。PING事务作用:主机探测设备是否有空间接收数据。PING令牌PIDPING令牌的PID低4位为0100,高4位的补码为1011,故PING令牌的PID为0xB4.PING流程主机发送......
USB2.0 令牌包
令牌包全部由USB主机发出,其内容包括包标识PID,包目标地址ADDR,包目标地址(ENDP)和CRC5校验位域。令牌包指明了后续数据包的目标地址和端点。令牌包的PID有:PID含义说明0001令牌OUT主机发送数据到USB设备1001令牌IN主机接收从USB设备......
USB2.0全速设备使用逻辑分析仪抓取IN令牌包分析SOP/SYNC/PID/EOP
发在B站上的录制的视频 2.USB2.0包Packet的组成-SOP SYNC EOP的解析其中下面有一条评论,询问 站长,也就是说SOP/SYNC/EOP是物理层的,用分析仪都抓不到是吧?这个我在下面也回答了,是可以抓取到的,只不过对于我们进行包分析,意义不大,因为我们的关注点已经不在那里了。刚......
IN令牌包的设备端事务响应流程
USB主机发送IN令牌给设备后,用于请求设备的数据包。USB设备端收到主机发送过来的PID为IN的令牌包后,需要对IN令牌包进行数据校验。如果IN令牌包中的设备地址和端点地址信息有效,并且端点缓冲区中有待发送的数据(端点状态为Valid状态),这时USB设备端的硬件自动使用DTAT0或DATA......
OUT令牌包的设备端事务响应流程
USB主机发送OUT令牌给设备,用于向设备端发送数据。USB设备收到主机发送的PID为OUT的令牌包后,设备需要对OUT令牌包进行校验。如果这个packet中的设备地址信息和端点号信息有效, 并且端点为Valid状态USB硬件从硬件buf中把数据搬移到用户可访问的packet buffer......
关注公众号
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

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

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