USB2.0集线器HUB
+ -

中断split事务序列

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

中断split传输事务INOUT和bulk/control的大体类似,但中断事务由于有实效性要求,故不得在全速总线上进行本地重传

OUT事务

中断split事务序列
2234172246

用大白话给你翻译一下中断OUT拆分事务到底是怎么回事:

1. 主机怎么发数据?

主机(电脑)要把数据发给一个慢速设备(比如USB键盘的指示灯、鼠标的自定义功能),它不能直接发到慢速总线上,而是先走高速总线发给集线器里的TT(中转站)
发的时候分两步:

  • “开始拆分”:主机告诉TT“我要发数据了”,并把数据包传给TT。
  • “完成拆分”:之后主机再问TT“数据发下去了吗?设备收到了没?”

2. TT怎么处理?

TT有个排队缓存区,按顺序存放主机发来的多个“开始拆分”任务。

  • 它不会立刻就发给慢速设备,而是等到当前这个微帧(125微秒的小时间段)结束时,才开始按顺序把任务转发到慢速总线上。
  • 如果慢速设备处理得慢、或者数据多导致发送超时,没发完的任务就顺延到下一个微帧继续发。

3. 数据校验:错了就直接扔

主机发数据时带了一个CRC校验码

  • TT收到后先检查这个校验码:如果对不上,直接丢弃这个任务,绝不转发给慢速设备
  • 主机那边等半天没收到“完成拆分”的回应,会超时,但不会像发文件那样重试三次——因为中断数据讲究实时性,过期了重发也没意义。

4. 一个例子帮你脑补

你电脑上插了一个USB复古游戏手柄全速设备)。游戏里你按下一个按键:

  1. 主机瞬间生成一个“按键数据包”,通过高速总线发给集线器的TT。
  2. TT检查CRC没问题,放进排队区。
  3. 当前微帧结束时,TT把这个任务转发给游戏手柄。
  4. 手柄收到后回复“收到了”,TT把结果存起来。
  5. 主机发“完成拆分”来取结果,知道按键已送达。

如果中间CRC校验失败:

  • TT直接扔掉数据,不转发。
  • 主机超时,但不会重发——因为游戏按键按下那一刻已经过了,重发一个“之前的按键”也没用。

总结

中断OUT就是:主机按固定节奏把数据包交给TT,TT排队后转发给慢速设备。数据错了就丢,不重试;时间不够就顺延。主打一个“实时优先,错过了就错过”。

IN事务

223437452648
223450220894

这段话讲的是中断IN拆分事务(主机从慢速设备读取数据)。用大白话解释如下:

核心流程:主机从慢设备读数据

第一步:主机发“开始拆分”

主机告诉TT:“我要从某个慢速设备(如鼠标、键盘)读数据”。
TT把这个“读指令”存到开始拆分流水线里,按顺序排队。

第二步:TT去慢速总线上读数据

下一个微帧开始时,TT按排队顺序,逐个去慢速总线上向设备发读请求。
设备回应:可能返回数据、也可能返回NAK(忙)、STALL(出错)、或者没反应(超时)。
TT把这些结果(数据/状态)存到完成拆分流水线里。

第三步:主机发“完成拆分”取数据

在后续的微帧里,主机不断发“完成拆分”指令,从TT那里取结果:

  • 情况A:事务没跨微帧
    设备在一个微帧内就返回了数据 → TT在下一次“完成拆分”响应时,一次性把数据还给主机。

  • 情况B:事务跨了微帧(数据较大,一个微帧发不完)
    TT需要两次“完成拆分”才能把完整数据给主机:

    • 第一次返回 MDATA(意思是“还没完,下一个微帧继续”),这个阶段不做CRC校验(因为数据还没收全)。
    • 第二次返回 DATA0/DATA1(数据收全了),此时才做CRC校验。如果CRC通过,返回数据;如果失败,返回ERR(错误)。

特殊情况:CRC校验失败

  • 如果TT在慢速总线上收到数据但CRC校验失败,不会返回数据,而是直接返回ERR握手包给主机。
  • 主机收到ERR,就知道这次读取失败了。
  • 如果是跨微帧的情况:第一次可能已经正常返回了MDATA,但第二次返回ERR → 主机必须丢弃第一次收到的数据,当作整个事务失败。

中断IN就是:主机先下“读指令”订单,TT去慢设备那取货。货小就一次送回,货大就分两次送(第一次说“还没完”,第二次才给货)。校验失败就直接报错,分两次送的那种如果第二次失败,第一次的也得扔掉。


中断IN vs 中断OUT

维度 中断OUT(主机发数据给设备) 中断IN(主机从设备读数据)
开始拆分携带什么 数据包 + CRC 只有读指令,无数据
慢速总线动作 TT转发数据给设备 TT向设备请求数据
完成拆分返回什么 握手状态(ACK/NAK/STALL 数据(或ERR/NAK/STALL
能否跨微帧 一般不能(数据一次性下发) 能(数据较大时分两次返回)
分两次返回时的标识 不适用 第一次用MDATA,第二次用DATA0/1
CRC失败后果 丢弃不下发,主机超时 返回ERR,主机知道失败
本文链接为:http://www.usbzh.com/article/detail-1639.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 篇笔记 写笔记

USB 中断传输方式
USB协议规定了四种传输类型:控制传输、批量传输、同步传输、中断传输中断传输一般用于小批量的和非连续的数据传输,通俗的来说就是用于数据量小的数据不连续的但实时性高的场合的一种传输方式,主要应用于人机交互设备(HID)中的USB鼠标和USB键盘等。USB中断传输和我们传统意义上的中断不一样。......
USB超高速 中断传输
中断传输类型用来支持带有轮询服务间隔需要高可靠性传输小数量数据的设备。这个规格的协议层章详细描述了与中断传输相关的包,总线事务和事务处理流程。超速中断传输类型一般提供以下方面:能保证最大的服务间隔能保证在下一次服务间隔中尝试重新传输在每个服务周期中为中断端点尝试中断传输,保留一定带宽保证在每个服务间......
USB 中断端点的高速高带宽
对于中断事务,如果中断端点在微帧其间NAK了事务,则表示设备端数据没有准备好或设备无数据可传,主机需要放弃本次传输,在下一个微帧再发起事务。如果设备的中断端点超时了该事务,则主机需要重试该事务。端点描述符中指定了该中断端点在一个微帧其间支持的最大事务个数。如果未达到每个微帧的最大事务数,主机控制器可......
使用BUSHOUND手动分析USB批量传输的URB
使用BUSHOUND抓取U盘的批量传输的URB数据,我们对其其进行数据分析:13 IN 55 53 42 53 40 0b ac 57 00 00 00 00 00 URB80 00 09 00 00 00 00 00 d8 f2 75 a0 77 7f 00 00 ......
USB2.0 中断传输和批量传输数据包的PID序列
其实在Windows下开发USB驱动时,USB的数据传输模式只有三种模式:多种控制传输方式同步传输方式批量或中断传输方式这一点在URB的结构体上表现的很清楚. struct _URB_CONTROL_TRANSFER UrbControlTransfer; struct _UR......
USB2.0低速、全速、高速模式四种传输模式速宽对比
USB 数据传输通过事务来实现。事务在帧的主机控制时间间隔内进行。事务的长度和频率取决于端点使用的传输类型。可以在一个帧中发送的传输类型和帧长度由 USB 的指定速度定义。低速模式下控制传输、中断传输、批量传输、同步传输对比低速帧速率为1ms传输类型最大传输长度每帧的传输次数最大理......
USB传输模式选择及各传输特性对比
通用串行总线 (USB) 传输类型是指主机和设备端点之间使用的通信模式。传输类型决定了用于与端点通信的事务的频率和长度。传输类型还可以分配一个循环冗余校验和 (CRC),以对每个传输的数据包进行验证。传输类型由设备设置,并在枚举过程中与主机通信。USB分为四种传输模式,分别为中断传输模式,控制传输......
USBIP 中断传输批量传输
对于USB批量传输或中断传输。static NTSTATUSstore_urb_bulk(PIRP irp, PURB urb, struct urb_req *urbr){ struct _URB_BULK_OR_INTERRUPT_TRANSFER *urb_bi = &a......
USB批量中断传输URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER代码示例
读数据NTSTATUS GetHidData(PFDO_DEVICE_EXTENSION FdoDeviceExternsion, PUCHAR pData, ULONG nLen){ if (FdoDeviceExternsion->SetHandle == NULL) {......
中断split事务序列
中断split传输事务的IN和OUT和bulk/control的大体类似,但中断事务由于有实效性要求,故不得在全速总线上进行本地重传。OUT事务用大白话给你翻译一下中断OUT拆分事务到底是怎么回事:1. 主机怎么发数据?主机(电脑)要把数据发给一个慢速设备(比如USB键盘的指示灯、鼠标的自定义......
关注公众号
  • HID人机交互
  • Linux&USB
  • UAC音频
  • CDC
  • TYPE-C
  • USB规范
  • USB大容量存储
  • USB百科
  • USB周边
  • UVC摄像头
  • Windows系统USB
  • 音视频博客
  • 取消
    感谢您的支持,我会继续努力的!
    扫码支持
    扫码打赏,你说多少就多少

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

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