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

USB2.0协议 传输包、事务和传输

2021-11-24 5337 8

USB总线上传递的数据流是USB主机和USB设备通讯的基础。
USB数据流包括3个阶段:
USB数据流包括

  • 令牌阶段 :定义了本次传输的类型,表示一次传输的开始。令牌阶段由同步字段,令牌包和EOP组成。
  • 数据阶段 :包括了本次传输的数据。数据的大小根据端点大小和传输类型决定,一般最大的数据量为1024字节。数据阶段由同步字段,令牌包和EOP组成。
  • 握手阶段: 握手阶段用于发送本次数据传输是否成功的报告,由接收方发送。握手阶段由同步字段,握手包和EOP组成。

从以上可以看到,各个阶段都有帧头同步字段和帧尾EOP,是数据传输的起始和结束,而中间传输的的有效USB数据。

同步字段:

  • 对于低速和全速来说,同步字段长为8位,数据为0x80。
  • 对于高速来说,同步字段为32位,数据为0x80000000.

USB2.0通读协议最小的单位是包,类示我们TCPIP协议中的IP层,这个包只有数据的传输的最小单元格式。不过这和TCIP层中的IP层也有点不同,那就是IP包其包含了包头信息和数据内容,而USB2.0的通讯由于令牌的存在,将这些包头和数据内容拆分不同的令牌事务,由主机发起事务的令牌这类先导信息,然后再发送其控制数据,设备收到这些信息之后还需要进行响应收到,然后主机收到设备的控制信息ACK后,才再根据上一个令牌事务发起对应的数据事务。这个数据事务也是由主机发起告诉设备你该进行IN还是OUT数据,然后再是数据的发送与接收,最后当然主机收到这些数据后还需要进行ACK.但是这种情况下主机是知道自己数据收到了,但是设备发送的数据自己不知道是否成功(因为可能会丢失主机发过来的ACK),那怎么办了,并且为了降低速宽,所以USB没有像TCP协议栈那样传输去强行要那个ACK,而是通过再发起一个传输0字节的数据事务,根据其DATA0或DATA1的PID来判断上一次传输是否正确无误的完成。

这里我们可以看一下一个控制传输的传输、事务和包的关系图:
控制传输

这里我们进行一个总结:

  • USB按包的层次从低到高层分为:包、事务和传输
  • 包是最小的最基本的数据传输单位。
  • 一个事务一般包括三个包(令牌包、数据包(可选)和握手包。事务保证了单次“数据”传输的完整性。
  • USB的协议是一问一答的,一个事务只能保证发送或接收的单次传输的完整性,而一个传输则是封装了完整的USB标准请求协议,保证问答功能的完整性。
  • USB的传输类型分为:控制传输中断传输同步传输批量传输
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 篇笔记 写笔记

USB 控制传输方式
USB协议规定了四种传输类型:控制传输、批量传输、同步传输、中断传输。控制传输是一种特殊的传输方式。当USB设备初次连接主机时,用控制传输传送控制命令等对设备进行配置。同时设备接入主机时,需要通过控制传输去获取USB设备的描述符以及对设备进行识别,在设备的枚举过程中都是使用控制传输进行数据交换......
USB超高速 控制传输
控制传输的目的与特点与USB2.0协议完全相同。这个规格的协议层章节详细描述了用于完成控制传输的包,总线事务处理和事务处理流程。设备架构那章定义了完整系列的设备使用的标准命令编码。每个设备需要启动默认控制管道作为一个消息管道。这个管道用来进行设备初始化和管理,用来访问设备描述符和向设备请求对其进行操......
UVC 控制传输与请求处理
请求是主机软件与实体中控制器交流的一种机制。请求都是由主机向设备端发起的功能请求,所有的USB设备都需要支持标准的设备请求和与Class相关的特殊类请求。标准请求: 在标准协议中有相关描述,不做详细展开特殊类请求: 事实上特殊类请求也可以根据接口来分成两大类:视频控制请求.视频流请求。1)视......
使用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低速、全速、高速模式四种传输模式速宽对比
USB 数据传输通过事务来实现。事务在帧的主机控制时间间隔内进行。事务的长度和频率取决于端点使用的传输类型。可以在一个帧中发送的传输类型和帧长度由 USB 的指定速度定义。低速模式下控制传输、中断传输、批量传输、同步传输对比低速帧速率为1ms传输类型最大传输长度每帧的传输次数最大理......
WinUSB使用控制端点0发送USB标准请求
向默认端点发出控制请求来与设备通信。除了与接口关联的端点外,所有 USB 设备还有一个默认端点。 默认端点的主要用途是为主机提供可用来配置设备的信息。 不过,设备还可以将默认端点用于设备特定的用途。控制命令包含一个 8 字节设置数据包,其中包括指定特定请求的请求代码和可选的数据缓冲区。 请求代码......
自研BUSHOUND工具USBHound开发调试笔记-USB控制传输的数据抓包实现
本想着搞一个自研的BUSHOUND应该是一件比较简单的事,但没想到也麻烦了。搞了一天upperfilter,最终还是投降,换成了lowerfilter.前面搞的时候,对系统中所有USB设备进行过滤,导致系统中的数据打印太多,无法分清谁是谁。当然也可以分清,每个设备的地址不一样,并且设备栈也是明确的,......
USBIP 控制传输-获取描述符GetDescriptor
URB_FUNCTION_GET_DESCRIPTOR_FROM_DEVICEUSB设备枚举过程中,需要获取USB相关的描述符。这些描述符一般包括USB设备描述符,USB配置描述符,USB字符串描述符。USBIP获取描述符通过store_urb_get_dev_desc来实现。static NTS......
USBIP 控制传输URB_FUNCTION_CONTROL_TRANSFER
static NTSTATUSstore_urbr_submit(PIRP irp, struct urb_req *urbr){... case URB_FUNCTION_CONTROL_TRANSFER: status = store_urb_control_tra......
USBIP 扩展控制传输URB_FUNCTION_CONTROL_TRANSFER_EX
static NTSTATUSstore_urbr_submit(PIRP irp, struct urb_req *urbr){... case URB_FUNCTION_CONTROL_TRANSFER_EX: status = store_urb_control_......
关注公众号
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

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

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