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

USB2.0 SPLIT事务

2021-12-02 本文链接为:http://www.usbzh.com/article/detail-703.html ,欢迎转载,转载请附上本文链接。

当一个低速或全速的USB设备连接到高速的HUB时,高速USB主机使用SPLIT事务来解决从高速模式到全速模式的转换。
SPLIT事务分为SSplit(Start Split)事务和CSplit(Complete Split)事务两种。

  • 如果高速HUB无法处理SPLIT事务,高速HUB会向USB主机返回一个NYET包。
  • 如果低速或者全速设备和高速HUB之间的事务一直没有完成,高速HUB也会向主机返回一个NYET包。
  • 当高速HUB端口下的低速或者全速设备出现错误时,高速HUB会向USB主机发送一个ERR包。

SPLIT事务的格式

SPLIT事务:
SSplit

CSplit格式:
CSplit

SPLIT事务的HUB与设备之间的接力过程

  • 中断输入SPLIT事务
    中断输入SPLIT事务

  • 中断输出SPLIT事务
    中断输出SPLIT事务

SPLIT事务示例1

这说明了一个典型的拆分交易序列;在这种情况下,拆分中断 IN。
SPLIT事务示例

SPLIT事务示例2

SPLIT事务示例

SPLIT BULK OUT事务

对于拆分批量 OUT 事务,主机发送一个 Start Split 数据包,指定集线器地址和端口号以及速度(全速),并将“端点类型”设置为“批量”。

然后它发送一个 OUT 令牌包来识别全速事务类型、设备和端点地址,然后发送数据包以向前传输到目标端点。

如果 Transaction Translator 正确接收到这些数据包并且有可用的缓冲区,它将以 ACK 数据包响应,否则它将以 NAK 数据包响应。

此时,事务转换器继续将此事务发送到指定的全速端点,并获得响应,并将其存储,准备好在完成拆分事务期间传递回主机。

当主机控制器决定它是合适的时,它通过发出一个完整的拆分事务来检查结果。Complete Split 数据包和 OUT 令牌数据包与 Start Split 事务相同,但数据包的 Start/Complete 位除外。这允许集线器验证它将呈现哪个事务的结果。

如果全速事务尚未完成,集线器将以 NYET 数据包响应,主机将在稍后的某个时间尝试竞争拆分事务。如果完成,则将包含实际结果(ACK、NAK 或 STALL)的数据包发送到主机。

SPLIT BULK OUT事务

SPLIT BULK IN事务

拆分批量 IN 事务类似于拆分批量 OUT,只是 DATA0/1 数据包发生在 Complete Split 阶段,因为它现在是响应的一部分。如果返回了数据,则数据包将代替握手包出现。

全速事务的实际 ACK 由事务转换器在接收到来自设备的 DATA0 或 DATA1 数据包时发送到设备,主机将跟踪它接收到的数据。如果它未能接收到有效的数据包,它将重试 Complete Split Transaction。

SPLIT BULK IN事务

周期SPLIT事务-中断传输和同步传输

拆分中断和同步事务需要特殊处理,因为它们提供了带宽保证。每个使用这些端点类型的全速/低速设备添加到总线上,都会在全速/低速总线上得到保证分配,这也必须在高速总线上传送。该机制很复杂,在 USB 规范的第 11 章中有完整的描述。

这种机制的结果是,全速或低速总线上的周期性事务以最多 188 字节的数据包进行传输。

因此,对于同步端点而言,较长的事务(最长可达 1023 字节)将在 OUT 传输的多个 Start Split 事务或 IN 传输的多个 Complete Split 事务中传输。

此外,在周期性 IN 事务中,集线器在给定微帧内从设备接收到的数据是响应完全拆分而发送的,即使它仅代表全速或低速数据包的一部分。一个跨越两个微帧的全速中断 IN 数据包,例如 64 字节,将在最多两个完整拆分中传送。第一部分中的数据包将使用一个 MDATA PID 来指示它不完整。

等时 IN 事务类似,但最多可跨越 6 个微帧。

拆分中断 OUT 事务

对于中断 OUT 事务,最大数据大小为 64 字节,因此这些始终在单个开始拆分事务中传输。不需要来自集线器的握手包,因为如果错过了中断,则不会在同一帧中重试中断。
与批量事务一样,完整拆分将在设备自身响应时从设备引发握手数据包,或在全速或低速总线上出现错误时使用 ERR,或在事务转换器未完成其时使用 NYET任务。
153645413651

分割中断 IN 事务

对于拆分中断 IN,我们发出 Start Split(不期望来自集线器的握手)。

Complete Split 可能会导致返回完整的数据包(DATA0 / DATA1),但也有可能在微帧期间,到目前为止仅收集了部分数据,在这种情况下,使用 MDATA PID 来指示在下一个微帧中将需要进一步的完全拆分。

握手数据包 NAK 或 STALL 将指示设备使用此数据包进行响应。ERR 表示全速或低速总线上存在错误。NYET 表示事务翻译器尚未完成其任务。

153705597914

拆分同步 OUT 事务

从表面上看,这是最简单的拆分交易。没有来自集线器的握手,也没有完全拆分,因为不检查同步事务的交付。

复杂的事实是,单个全速同步事务被分成单独的开始拆分事务,每个事务最多 188 字节,每微帧发送一个。

Start Split 数据包设置了其 Start和 End位,以识别正在传输的有效负载的哪一部分。
153726822935

拆分同步 IN 事务

对于拆分同步 IN,我们发出 Start Split(不期望来自集线器的握手)。

Complete Split 可能会导致返回完整的数据包(DATA0),但也有可能在微帧期间,到目前为止仅收集了部分数据,在这种情况下,使用 MDATA PID 来指示进一步的 Complete在下一个微帧中将需要拆分。

ERR 表示全速或低速总线上存在错误。NYET 表示事务翻译器尚未完成其任务。

153741624908

本文链接为:http://www.usbzh.com/article/detail-703.html ,欢迎转载,转载请附上本文链接。

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

0 篇笔记 写笔记

USB2.0设备枚举-主机设置设备地址事务
USB主机在首次获取设备描述符后,知道了设备的默认端点大小。后续一个重要的操作是对设备分配地址。对USB设备分配地址是通过标准请求SetAddress来完成后。其具体的过程如下图所示:SetAddress包括2个事务。第一个事务是对主机设置地址,第二个事务是主机对设备返加一个0字节的数据包,用于确......
USB2.0设备枚举-获取设备描述符事务
USB设备与主机进行数据传输或进行设备配置时,有一些常见的术语如事务,令牌,包等。USB设备在枚举过程中有2次获取设备描述符的过程,这里分别标识为首次获取设备描述符和分配地址后的获取描述符。两次获取描述符的过程基本类似,惟一的区别是首次首次获取描述符由于设备尚未分配地址,故使用地址0与主机进行通......
USB数据长度为0的DATA/IN事务
前言使用BUSHOUND是抓不到这种包的。而且一些令牌包如SOF等这些是统计不到的。BUSHOUND是一个基本windows过滤驱动的,所以抓到的是数据已经传输的并且已经在主机方面的,所以USB总线上的一些状态是统计不到的。其实关于控制传输的0字节长度,可详见:USB2.0 控制传输数据包PID序......
USB 高速设备微帧计算及事务构成
从USB2.0规范协议中可以知道,高速设备在1ms内会有8个微帧,所以每个微帧约125us,而一个微帧内可以有多个事务。一个微帧是由起始帧SOF开始的,到下一个起始帧SOF结束或该微帧内的结速帧EOF结束。对于一个微帧内的SOF,SYNC和EOF,此为数据链路层的,一般我们关注的是里面的包内容,协议......
USB2.0 设备配置SET_CONFIGURATION传输及事务分析
USB2.0 设备配置SET_CONFIGURATION传输包含两个事务:事务38由SETUP令牌,DATA0数据和ACK事务组成。可以看到该SETUP事务由主机发送给设备,设备返回ACK表示接收成功。对于事务39,有一个IN事务,分别为IN令牌,DATA1和ACK,用于对上一个事务的数据确认。......
USB2.0 SET_FEATURE传输及事务
SET_FEATURE传输及事务包含两个事务:......
USB2.0 SET_FEATURE传输及事务(二)
SET_FEATURE传输也包含两个事务:......
USB2.0 CLEAR_FEATURE传输及事务
USB2.0 CLEAR_FEATURE传输及事务,更多详见CLEAR_FEATURE标准请求......
USB2.0协议 传输包、事务和传输
USB总线上传递的数据流是USB主机和USB设备通讯的基础。USB数据流包括3个阶段:令牌阶段 :定义了本次传输的类型,表示一次传输的开始。令牌阶段由同步字段,令牌包和EOP组成。数据阶段 :包括了本次传输的数据。数据的大小根据端点大小和传输类型决定,一般最大的数据量为1024字节。数据阶段由同......
USB2.0 事务
一个USB事务一般包含三个包:令牌包,指名了该事务的传输的类型,包括目标设备的地址和端点。数据包,有些事务可以没有数据,数据的长度不得超过该端点的最大包大小。握手包,对有数据或无数据传输的结果进行反馈,如SET_ADDRESS请求就无数据包。从以上的解释可以看到,一个USB事务是一次数据的可靠......
USB2.0 Setup事务
Setup事务是由SETUP令牌,数据包和握手包组成的。一个成功的Setup事务保证了Setup令牌和数据包传输的可靠传输。Setup事务是由主机到设备的,并且如果Setup事务含有数据包,必须使用DATA0包。有数据包的SETUP事务可见下图。此SETUP事务使用SETUP令牌包(0xB4)......
USB2.0 OUT事务
OUT事务和其它事务一样,也包含三个包,分别为OUT令牌包,数据包(输出)和握手包(成功时为ACK)。OUT事务用于由USB主机发送数据,所以在数据包之前发送为的OUT令牌包,如果USB设备确认数据正确无误的接收时,给主机返回ACK握手包。如果USB设备由于其自身资源不足(如内存)等自身原因无法......
USB2.0 IN事务
IN事务的数据方向和OUT事务的数据方向相反,IN是用于向主机输入数据,OUT事务用于主机向设备发送数据。IN事务和其它事务一样,也包含三个包,分别为IN令牌包,数据包和握手包。IN事务的处理机制当IN令牌或数据包发生错误或者超时,USB设备丢弃该包,并且不向主机返回任何握手包。当主机收到数据......
USB2.0 PING事务
PING事务只适用于USB2.0高速模式,全速和低速设备不支持PING事务。PING事务由PING令牌和握手包组成。PING事务适用于主机探测USB设备是否可以接收数据。在USB数据传输过程中,USB主机会向USB设备发送数据,如果USB设备无法接收数据,会向主机返回NAK握手包,告诉USB主机自......
关注公众号
  • HID人机交互
  • Linux&USB
  • UAC音频
  • CDC
  • TYPE-C
  • USB规范
  • USB大容量存储
  • USB百科
  • USB周边
  • UVC摄像头
  • Windows系统USB
  • USB资源
  • 音视频博客
  • 取消
    感谢您的支持,我会继续努力的!
    扫码支持
    扫码打赏,你说多少就多少

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

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