TT批量控制事务转换
2026-04-27
本文链接为:http://www.usbzh.com/article/detail-1636.html ,欢迎转载,转载请附上本文链接。
事务缓冲区
每个事务转换器必须有至少2个完全一模一样、功能对等的通用缓冲区,每一个缓冲区都独立完整走完一整条事务全流程:
- 接收上游主机下发的Start-Split(起始拆分)
- 缓存下发OUT数据/事务命令
- 交给下游全速/低速总线执行事务
- 缓存下游设备返回的握手、IN 数据、超时结果
- 再通过 Complete-Split 上报给上游主机
双Buffer实现并行吞吐、不阻塞,提升非周期批量/控制传输效率。
因为单Buffer必须等这条事务完全结束、缓存清空,才能收下一条,效率低。而双 Buffer流水线Buffer A正在处理下游低速设备的事务、等返回结果,Buffer B可以同时接收主机新的起始拆分事务,提前排队。
事务转换规则
- 硬件要求:TT 最少配置 2 个批量 / 控制专用缓存,单缓存对应一条全速 / 低速事务,复用存储指令、数据与事务结果。
- 交互规则:缓存空闲即接收主机起始拆分事务;完成拆分释放缓存后可立即复用,事务顺序由缓存状态与主机调度决定。
- 调度规范:主机无需隔离普通高速事务与拆分事务,但需区分事务类型。
- 流程规范:批量与控制拆分事务逻辑相近,状态机仅定义交互顺序、不限制时序;单端点同一时间仅允许一条拆分事务缓存。
- 匹配差异:批量事务校验需判断传输方向,控制事务无需校验方向
TT批量/控制事务的缓冲区匹配算法
- 主机发来一条新的起始拆分事务(Start-Split),TT 遍历所有缓冲区,找最合适的缓冲区来存放这条事务,并返回 3 种结果:
NEW_SS:新事务,用空 / 旧缓冲区
OLD_SS:旧事务,是重试
NO_SPACE:没空间
默认状态 = NO_SPACE(没空间)默认索引 = 0
遍历所有缓冲区(0 ~ num_buffs-1)
只要还没找到匹配,就继续检查下一个缓冲区。第一优先级:匹配 同设备 + 同端点
设备地址相同 端点号相同
批量端点:必须方向相同
控制端点:不检查方向
如果匹配成功:缓冲区状态是 READY / PENDING → 标记 OLD_SS(重试)
否则 → 标记 NEW_SS(新事务)
记录缓冲区编号,停止查找(因为找到了)
- 第二优先级:没找到匹配 → 找 OLD 状态的空闲缓冲区
找到就标记 NEW_SS,并占用该缓冲区。
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
USB2.0集线器HUB





