当前位置: 首页 > java >正文

USB传输模式

USB有四种传输模式: 控制传输, 中断传输, 同步传输, 批量传输

1. 中断传输

中断传输一般用于小批量, 非连续的传输. 对实时性要求较高. 常见的使用此传输模式的设备有: 鼠标, 键盘等. 要注意的是, 这里的 “中断” 和我们常见的中断概念有差异. Linux中的中断是设备主动发起的电信号, 由操作系统捕捉到后执行一系列操作. 而 USB 的中断传输是由主机主动发起, 每隔固定时间发起传输请求. 也就是主机主动轮询.
中断传输关键参数有三个:

  • 传输类型
  • 单次传输的最大包大小
  • 轮询间隔

1.1中断传输特点

低速模式最大包长为8字节
全速模式最大包长为64字节
高速模式最大包长为1024字节
超高速模式 (USB3.0) 支持突发传输, 也就是一次事务中连续传输多个包. 例如突发大小为2, 则可以在一个事务中连续传输两个包. 对于突发大小 = 1的传输端点, 可以支持1 ~ 1024 最大包长; 对于突发大小 > 1 的传输端点, 只支持最大包长为1024.

1.2 中断传输事务

1.2.1 中断 IN 事务

当主机想要启动一个 IN 事务时, 他向目标端点发送一个 ACK TP (Acknowledgement Transaction Package), 然后中断端点响应主机发送数据包, 主机需要对每个 DP (Data Package) 用 ACK TP 响应, 表明成功接收数据.
发生以下情况时, 主机停止对中断端点执行事务:

  • 端点返回 NRDY 或 STALL TP;
  • 所有数据都已成功接收
  • 最后一个 DP 中设置了 EOB (End Of Burst)

当端点接收到主机的 ACK TP, 但是无法发送数据包时, 应返回 NRDY TP. 如果是有内部端点或设备错误时, 应发送 STALL TP. 随后主机不会再向该端点执行任何事务.
之前由于数据没准备好而发送了 NRDY TP, 当数据准备好之后, 应发送 ERDY TP, 然后主机会回复 ACK TP. 然后端点发送 DP.

流程如下:
  • 主机发送 ACK TP, 端点发送 Data
    Host Sends Interrupt IN Transaction in Each Service Interval

  • 主机发送 ACK TP, 端点还没有数据可以发送, 回复 NRDY
    Host Stops Servicing Interrupt IN Transaction Once NRDY is Received

  • 端点准备好数据后, 发送 ERDY TP. 主机收到后发起 ACK TP, 端点再发送 DP
    Host Resumes IN Transaction after Device Sent ERDY

  • 由于设备错误, 端点返回 STALL TP
    Endpoint Sends STALL TP

  • 在数据发送失败的情况下, 如果有设置 retry, 则会重新发送 ACK TP.
    Host Detects Error in Data and Device Resends Data

1.2.2 中断 OUT 事务

当主机想要向端点启动一次 OUT 事务时, 会先发送第一个 DP, 如果端点正常回复 ACK TP, 则主机会在每个服务间隔期间继续发送 DP, 直至发送完成. (如果支持突发大小, 则可以在一个服务间隔中连续发送多个 DP)

流程如下:
  • 主机正常在每个服务间隔期间发送 OUT 事务, 端点发送 ACK TP, 表示成功收到
    Host Sends Interrupt OUT Transaction in Each Service Interval

  • 端点回复 NRDY TP, 则主机停止向端点发送 DP
    Host Stops Servicing Interrupt OUT Transaction Once NRDY is Received

  • 端点发送 ERDY TP, 则主机继续向端点发送 DP
    在这里插入图片描述

  • 如果有设置 retry , 则当数据发送失败时, 主机会尝试再次发送 DP
    在这里插入图片描述

  • 出现设备错误, 则发送 STALL TP, 主机不会再向端点发送 DP
    在这里插入图片描述

参考

https://www.usbzh.com/article/detail-109.html
<Universal Serial Bus 3.0 Specification>

http://www.xdnf.cn/news/5514.html

相关文章:

  • 大语言模型强化学习双强:OpenRLHF与verl技术解析
  • Golang空接口的用途详解
  • pnpm使用报错
  • TWASandGWAS中GBS filtering and GWAS(1)
  • 黑马点评实战笔记
  • AI赋能安全生产,推进数智化转型的智慧油站开源了。
  • BUUCTF——PYWebsite
  • 记一种C#winform小程序的简易打包方式-自解压压缩文件
  • 火山RTC 7 获得远端裸数据
  • MATLAB机器人系统工具箱中的loadrobot和importrobot
  • Voice Changer 变声器
  • C++语法基础(上)
  • linux内核pinctrl/gpio子系统驱动笔记
  • 并行发起http请求
  • Spring Cloud : OpenFeign(远程调用)
  • 腾答知识竞赛系统 V1.0.4更新
  • Linux文件编程——open函数
  • CAPL -实现SPRMIB功能验证
  • 《操作系统真象还原》第十四章(1)——文件系统概念、创建文件系统
  • 写屏障和读屏障的区别是什么?
  • 思维链是仅仅通过提示词实现的吗
  • Java对象的内存分布(二)
  • Python训练营打卡——DAY22(2025.5.11)
  • UGMathBench动态基准测试数据集发布 可评估语言模型数学推理能力
  • Maven 中的 pom.xml 文件
  • Mind Over Machines 公司:技术咨询与创新的卓越实践
  • redis存储结构
  • UOJ 164【清华集训2015】V Solution
  • 【C语言】程序的预处理,#define详解
  • 用于文件上传的MultipartFile接口