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

USB2.0 事务

2021-11-30 4610 2

一个USB事务一般包含三个包:

  • 令牌包,指名了该事务的传输的类型,包括目标设备的地址和端点。
  • 数据包,有些事务可以没有数据,数据的长度不得超过该端点的最大包大小。
  • 握手包,对有数据或无数据传输的结果进行反馈,如SET_ADDRESS请求就无数据包。
    USB事务

从以上的解释可以看到,一个USB事务是一次数据的可靠传输,数据的可靠性使用握手包来实现。

USB事务与传输

在USB的概念中还有另一个叫做传输,传输我们分为控制传输同步传输批量传输中断传输
这里以控制传输为例,对于控制传输,一般是都有一个叫做传输类型的字段,这个在USB请求中叫做bRequest,关于更多的USB请求可见:

我们知道,控制传输使用的是端点0来进行数据传输的,所以这个地址我们在设备端IN端点地址是0x80,OUT端点地址是0x00。
我们知道,端点0(包括输入输出)的数据长度一般不会太多,USB2.0高速的最大为64字节,所以对于像获取描述符特别是数据量大的描述符如配置描述符,是需要分事务传输的。即一次传输包含多个事务,分别为SETUP事务、IN事务(0)、IN事务(1)…IN事务(N)直到把所有的配置描述符内容传输完成。
USB事务与传输

这里我们看一个例子,该设备的设备描述符内容如下:
设备描述符
可以看到,端点0的最大长度为8字节。
所以在获取配配置描述符的前9个字节的时候,是需要3个有效的事务来完成数据传输,第一个事务用来传输SETUP令牌包,第二个使用IN令牌包传输8个字节,第三个事务使用IN令牌包传输1个字节。
获取配置描述符

  • 事务169是使用SETUP事务,用来由主机发设备发送获取配置描述符,数据使用DATA0来携带。
  • 事务170是使用IN事务,由于端点0最大长度为8字节,所以这个IN事务返回配置描述符的前8个字节。
  • 事务171是IN事务,返回请求的配置描述符9个长度中的最后一个字节。
  • 关于事务224,可以参见:USB数据长度为0的DATA/IN事务 http://www.usbzh.com/article/detail-624.html

USB事务的总结:

  • USB事务是根据端点大小的进行数据传输的最小的可靠传输单元。
  • 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 设置特性请求SetFeature
ID请求码说明3SET_FEATURE用来启用或激活命令接收者的某些特性SetFeature请求用于设置或使能USB设备、接口或端点的特性值,和CLEAR_FEATURE请求相对应。SetFeature请求同样没有数据阶段。bmRequestType(1)b......
USB音箱 工作抓包分析
USB音响打开Length Phase Data -------- ----- ------------------------------ -------------- CTL ......
USB传输过程中的延迟
USB传输过程中的延迟可分为包间延迟、USB线缆上的延迟和USB集线器延迟。在数据传输时,USB主机和USB设备能够计算整个数据传输时间,这个数据传输的时间由发送方发数据信息包结束时开始计算,直到接收到接收方的应答信号为止。USB包间延迟USB数据传输的包间延迟只存在于一个USB数据流管理中的各......
USB3.2超高速兼容USB2.0数据收发的双总线架构
超高速USB体系和以前的USB版本的功能一致,都是通过USB线缆将USB主机USB外设相连,进行数据交互的。所与连接到该条USB总线上的所有设备在主机控制器协调下,共享带宽。USB总线允许外部设备被接入(attached),配置,使用或移除。USB3.2是双总线架构,其中一条总线用于向后兼容USB2......
USB超高速3.0协议与USB2.0协议的差异
超高速在框架层级是向后兼容 USB 2.0 的。然而, USB 2.0 和超高速协议还是有一些根本性的差异:USB 2.0 使用三部分事务交易(令牌,数据和握手),而超高速对这相同的三部分的使用是不相同的。对于输(OUTs),令牌被列入数据包;而对于输入(INs),令牌则被握手所取代。USB 2.0......
linux下UsbMon-WireShark之USB协议抓取分析
usbmon配置使用usbmon抓包分的,是需要 内核开启CONFIG_USB_MON=m, 重新编译内核, 编译ko :make ARCH=arm64 CROSS_COMPILE=aarch64-himix100-linux- CONFIG_USB_MON=m M=./drivers/usb/ ......
USB 2.0 协议中J、K、SE0状态的定义
USB 2.0协议中经常会看到以下术语:Chirp K、KJ序列、SE0。这里的状态是根据低速、全速/高速下设备D+和D-上不同的电平信号来决定的。1、J态、K态、SE0,SE1信号转换状态状态Low speed (D+ pull-up)Low speed (D− pull-up)......
USB 设置描述符SetDescriptor
ID请求码说明7SET_DESCRIPTOR修改设备中有关的描述符,或者增加新的描述符SetDescriptoret用于设置USB的描述符,在SetDescriptor请求的数据阶段,主机将向USB设备发送指定的描述符类型 。bmRequestType(1)bRequest(1)wValue(2)w......
USB3.0硬件编码格式-8B/10B编码
1.编码技术基础理论 在高速的串行数据传输中,传送的数据被编码成自同步的数据流,就是将数据和时钟组合成单一的信号进行传送,使得接收方能容易准确地将数据和时钟分离,而且要达到令人满意的误码率,其关键技术在于串行传输中数据的编码方法。 目前, 高速接口正在被广泛应用于包括 SATA、 SAS、 高速......
USB超高速 超高速端点伴随描述符
在接口中描述的每个超高速端点都紧跟着一个超高速端点伴侣描述符( EndpointCompanion descriptor)。这个描述符包含只给超高速端点定义的附加端点特性。这个描述符总是 作 为 配 置 描 述 符 信 息 的 一 部 分 在GetDescriptor(Configuration) ......
为什么我的USB设备如U盘从一个端口换到另一个端口会重新安装驱动?
在 Windows 2000和更高版本的操作系统中,当 USB 设备从一个端口移到另一个端口时,将创建一个新的物理设备对象 (PDO)。 如果硬件报告了唯一的 USB 序列号,则不会创建新的 PDO。若要重复使用同一 PDO 并确保设备不会改变,无论设备是否已重新插入相同的端口或新端口,硬件供应商必......
USB-UAC麦克风 音频控制接口
音频控制接口描述符描述了设备的结构(拓扑结构),并通过特定类请求对音频的控制。UAC麦克风 音频控制接口描述符偏移地址字段长度值描述0bLength10x09接口描术符的长度1bDescriptorType10x04描述符的类型接口描述符2bInterfaceNumber10x00接口ID号3bA......
USB与其它总线相比的优点是什么
USB 的设备可以接在 PC 上的任意的 USB 接口上. 而使用 Hub 还可以扩展使更多的USB设备连接到系统中 USB的Hub 有一个上行的端口(到host) 有多个的下行端口(连接其它的设备). 从而可以使整个的系统可以扩展的连接 127 个外设. 其中 Hub 也算外设.对于US 系统来说......
USB音箱 UAC设备描述符分析
这里看到,USB规范采用的是USB1.1版本,不过字符串中又显示的是”USB2.0 Device”,所以这里就有点迷~关于设备描述符各字段的详细解释,详见USB规范中设备描述符一节。从bDeviceClass,bDeviceSubClass和bDeviceSubClass都被置为0来看,这是一个典......
站内大事
2018年9月,开始筹建,初始为个人博客。2019年11月,网站进行版本更新,并修改站名为字节流, 交将原来个人博客的技术文章重新编辑并入。2019年11月,增加【C/C++技巧】,此为本人原来在公司内部的技术培训内容。2019年11月,增加【NTFS文件系统】和【FAT文件系统】,此为本人原来为公......
关注公众号
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

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

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