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

USB2.0 控制传输数据包PID序列

2021-12-07 2901 6

USB数据包的PID序列指的不是数据包的PID序列,特指DATA0,DATA1,DATA2和MDATA的PID序列,即USB在数据传输过程中这些数据包的顺序。
USB的数据传输分为四种,分别为控制传输同步传输批量传输中断传输。这四种数据传输方式除过控制传输,其余数据的传输过程都是通过IN事务或者OUT事务实现的,而控制传输的控制请求是通过SETUP事务实现,后续根据是否有数据可分为是否有OUT或IN事务。

控制传输分为三种类型,分别为写入数据,读取数据和无数据阶段的控制传输类型。

控制传输的三个阶段:

  • SETUP阶段:使用DATA0数据传输请求
  • 数据阶段:使用DATA1和DATA0交替进行数据传输,直到数据传输完成。
  • 状态阶段:必须为DATA1.

控制传输写入数据PID序列

控制传输写入数据的PID序列图如下图所示:
控制传输写入数据
写入数据时,USB主机在SETUP事务阶段通过DATA0向设备发送请求命令,然后在后续的OUT事务中使用交替的DATA1和DATA0包进行数据的传输,直到数据传输完成。设备最后在状态阶段必须使用一个长度为0的DATA1的数据包用于状态反馈。

我们通过查看一个UAC设备,其执行SET_CUR用于设置音频采样率的抓包分析:
SET_CUR用于设置音频采样率
从图可以看到:

  • SETUP事务编号989,请求命令通过DATA0发送给设备
  • 数据阶段只有一个事务989,所以使用的是DATA1传递实际的采样率
  • 设备收到设置采样率,回复一个编号为1028的IN事务,数据长度为0,此为状态阶段,用于反馈给主机。

控制传输读取数据PID序列

控制传输读取数据的PID序列图所下图所示:
控制传输读取数据
读取数据时,主机在SETU事务阶段通过DATA0向设备发送USB请求命令,USB设备收到请求命令后,在后续的IN事务中使用DATA1和DATA0包进行数据的传输,直到数据传输完成。主机在状态阶段必须使用一个长度为0的DATA1的数据包用于状态反馈。

这里我们通过抓取一个获取配置描述符的数据分析:
获取配置描述符

  • 事务373由主机通过DATA0发起获取配置描述符
  • 事务439,500,559,579使用交替的DATA1和DATA0返回设置的配置描述符,可以看到前几个事务的数据包长度为64字节(可以看出端点0的最大包长度为64字节),最后一包为22字节。
  • 最后的584事务由USB主机向设设备发送的数据长度为0,使用的数据包ID为DATA1.这是一个状态包,用于反馈给设备。

PING事务的解释
在这里面可以看到有2个PING的事务,用于主机PING设备是否可以接收数据。这里我们可以看到有两次返回ACK的PING,不过我们隐藏了NAK的事务,完整的过程见下图:
PING事务
可以看到,事务581,主机PING设备,设备返回ACK。主机认为设备可以收数据,然后使用事务582发送数据,设备说自己当前又接收不了数据。主机又使用事务583PING设备,设备又返回ACK,这时主机又发送OUT事务,这时设备返回ACK表示自己已经接收。

控制传输无数据PID序列

控制传输无数据PID序列比较简单,没有数据事务。所以状态阶段使用IN事务,用于反馈主机的请求。
控制传输无数据PID序列

这里我们使用SET_ADDRESS分析具体的事务过程:
SET_ADDRESS
主要使用SETU令牌使用DATA0数据包发送USB的SET_ADDRESS请求,设备接收后状态阶的IN事务使用DATA1数据包序列反馈给主机。

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 数据包DATA0,DATA1,DATA2
数据包是用于传输数据的,由8位的包标识PID,数据字段和16位的循环冗余校验字段CRC组成。PID字段:用于指明不同的数据包类型。支持 4 种数据包,分别为: DATA0 、 DATA1 、DATA2 和MDATA。 在介绍的数据触发机制中,使用 DATA0 和 DATA1。SPLIT 令牌事......
USB 控制传输方式
USB协议规定了四种传输类型:控制传输、批量传输、同步传输、中断传输。控制传输是一种特殊的传输方式。当USB设备初次连接主机时,用控制传输传送控制命令等对设备进行配置。同时设备接入主机时,需要通过控制传输去获取USB设备的描述符以及对设备进行识别,在设备的枚举过程中都是使用控制传输进行数据交换......
USB超高速 控制传输
控制传输的目的与特点与USB2.0协议完全相同。这个规格的协议层章节详细描述了用于完成控制传输的包,总线事务处理和事务处理流程。设备架构那章定义了完整系列的设备使用的标准命令编码。每个设备需要启动默认控制管道作为一个消息管道。这个管道用来进行设备初始化和管理,用来访问设备描述符和向设备请求对其进行操......
UVC 控制传输与请求处理
请求是主机软件与实体中控制器交流的一种机制。请求都是由主机向设备端发起的功能请求,所有的USB设备都需要支持标准的设备请求和与Class相关的特殊类请求。标准请求: 在标准协议中有相关描述,不做详细展开特殊类请求: 事实上特殊类请求也可以根据接口来分成两大类:视频控制请求.视频流请求。1)视......
USB2.0 SETUP令牌包
SETUP令牌包用于主机向USB设备发送配置信息SETUP令牌包结构SETUP令牌包格式由8位的包标识字段PID,7位的地址字段ADDR、4位的端点字段和5位的循环字段CRC共24位3字节组成。包标识字段PID:定义了数据传输方向为USB主机到USB设备。ADDR字段:指明了USB设备地址。E......
USB2.0 包位域成员字段-PID、SOP、包地址、包端点、帧号、CRC5、CRC16
包标识PIDUSB协议定义的包格式PID由8位组成,低4位是类型字段,高4位为低四位的补码。特殊用途包包括了一些用于特定场合的信牌包和握手包。PID含义说明0001令牌OUT主机发送数据到USB设备1001令牌IN主机接收从USB设备发出的数据0101......
BUSHOUND抓包stall pid的USTS c0000004错误
对USB设备进行数据分析,使用最多的也就是BUSHOUND了,不过经常遇到一个问题就是 USTS c0000004 stall pid 错误。USTS c0000004 stall pid在本站中搜......
USB 同步传输端点的数据包PID序列及额外传输端点大小
对于同步传输:如果输入端点提供的负载数据小于端点描述符指定的最大负载数据,则主机端将不再该端点提供进一步的输入事务。这是因为所对USB设备来说,所有的数据传输都是由主机发起的。对于数据输入IN事务,虽然数据的传输方向为设备端到主机,但是该事务却是由主机发起。由于设备的输入端点提供的负载数据小于该......
使用BUSHOUND手动分析USB控制传输的URB
USB的控制传输是最基本的传输类型,控制传输适用于设备的枚举和设备的状态控制。我里我们使用BUSHOUND来抓取USB控制传输的URB。同样的,我们使用的操作系统是Windows10 x64,和同步传输的URB抓包一样,我们先抓取数据,然后再分析数据结构。这里我插入电脑的U盘的枚举以获取设备描述符为......
USB2.0协议 传输包、事务和传输
USB总线上传递的数据流是USB主机和USB设备通讯的基础。USB数据流包括3个阶段:令牌阶段 :定义了本次传输的类型,表示一次传输的开始。令牌阶段由同步字段,令牌包和EOP组成。数据阶段 :包括了本次传输的数据。数据的大小根据端点大小和传输类型决定,一般最大的数据量为1024字节。数据阶段由同......
USB2.0 控制传输数据包PID序列
USB数据包的PID序列指的不是数据包的PID序列,特指DATA0,DATA1,DATA2和MDATA的PID序列,即USB在数据传输过程中这些数据包的顺序。USB的数据传输分为四种,分别为控制传输、同步传输、批量传输和中断传输。这四种数据传输方式除过控制传输,其余数据的传输过程都是通过IN事务或者......
USB2.0 中断传输和批量传输数据包的PID序列
其实在Windows下开发USB驱动时,USB的数据传输模式只有三种模式:多种控制传输方式同步传输方式批量或中断传输方式这一点在URB的结构体上表现的很清楚. struct _URB_CONTROL_TRANSFER UrbControlTransfer; struct _UR......
USB2.0全速设备使用逻辑分析仪抓取IN令牌包分析SOP/SYNC/PID/EOP
发在B站上的录制的视频 2.USB2.0包Packet的组成-SOP SYNC EOP的解析其中下面有一条评论,询问 站长,也就是说SOP/SYNC/EOP是物理层的,用分析仪都抓不到是吧?这个我在下面也回答了,是可以抓取到的,只不过对于我们进行包分析,意义不大,因为我们的关注点已经不在那里了。刚......
USB2.0 同步传输数据包PID序列
同步传输方式分为全速模式和高速模式,低速模式不存在同步传输。全速传输模式下的数据包PID序列全速模式下的同步传输数据方式只使用DATA0包,因此接收方在接收数据时只会收到DATA0数据包。高速传输模式下的数据包PID序列高速模式下的数据包序列根据一个微帧中的事务个数不同,采用不同的数据包序列,使......
USB的VendorID、ProductID和BcdDevice有什么作用
Vendor ID(VID)的商用需要向USB组织申请,开发者可直接使用开发平台的厂商ID。Product ID(PID)由厂商自行管理。VID和PID的作用是让主机快速识别某些著名的设备(Windows可以在完成枚举之前依此直接派发驱动),它们也常常作为搜索从机的条件(如libusb)。BcdD......
关注公众号
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

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

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