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.mzph.cn/pingmian/80533.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Python 变量类型】

Python 是一种动态类型语言&#xff0c;变量类型在运行时自动确定&#xff0c;无需显式声明。以下是 Python 中核心变量类型的分类与用法详解&#xff1a; 一、基本数据类型 1. 数值类型 整数 (int) 支持正负数、零和二进制/八进制/十六进制表示&#xff1a; a 42 b 0o52 #…

Python基础:类的深拷贝与浅拷贝-->with语句的使用及三个库:matplotlib基本画图-->pandas之Series创建

一.类的深拷贝与浅拷贝 class CPU():pass class Disk():passclass Computer():#计算机由CPU和硬盘组成def __init__(self):self.cpu CPU()self.disk Disk()cpu CPU()#创建一个CPU对象 disk Disk()#创建一个硬盘对象#创建一个计算机对象 com Computer(cpu,disk) #变量&…

【SSM-SpringMVC(二)】Spring接入Web环境!本篇开始研究SpringMVC的使用!SpringMVC数据响应和获取请求数据

SpringMVC的数据响应方式 页面跳转 直接返回字符串通过ModelAndView对象返回 回写数据 直接返回字符串返回对象或集合 页面跳转&#xff1a; 返回字符串方式 直接返回字符串&#xff1a;此种方式会将返回的字符串与视图解析器的前后缀拼接后跳转 RequestMapping("/con&…

阅文集团C++面试题及参考答案

目录 能否不使用锁保证多线程安全? 面向对象的三个特性是什么?请分别解释。 构造函数和析构函数能否被继承? C++ 中函数重载是如何实现的? C 语言中是否支持函数重载? 什么是左值和右值?请举例说明。 C++ 中子类的构造和析构顺序是怎样的? C++ 中虚函数表的变化过…

【亲测有效】如何清空但不删除GitHub仓库中的所有文件(main分支)

如何清空但不删除GitHub仓库中的所有文件&#xff08;main分支&#xff09; 在项目开发过程中&#xff0c;有时我们需要清空GitHub仓库中的所有文件&#xff0c;同时保留仓库本身。这种情况常见于项目重构、代码重写或者需要重新开始一个项目时。本文将介绍一种有效的方法来清…

前端EXCEL插件,智表ZCELL产品V3.0 版本发布,底层采用canvas全部重构,功能大幅扩展,性能极致提升,满足千万级单元格加载

本次更新是底层全部重构&#xff0c;按照现代浏览器要求&#xff0c;采用canvas方式进行了重构&#xff0c;预留了将来扩展空间&#xff0c;特别是在大数据量性能提升方面有了较大提升&#xff0c;可以满足千万级单元格加载&#xff0c;欢迎大家体验使用。 体验地址&#xff1…

3DGS-to-PC:3DGS模型一键丝滑转 点云 or Mesh 【Ubuntu 20.04】【2025最新版!!】

一、引言 3D高斯泼溅(3DGS)是一种新兴的三维场景表示方法&#xff0c;可以生成高质量的场景重建结果。然而&#xff0c;要查看这些重建场景&#xff0c;需要特殊的高斯渲染器。大多数3D处理软件并不兼容3D高斯分布模型&#xff0c;但它们通常都兼容点云文件。 3DGS-to-PC项目提…

OpenHarmony 以太网卡热插拔事件接口无效

目录 1.背景 2.解决方案 1.背景 在OpenHarmony中调用以太网热插拔时间,发现热插拔没有任何回调,如下接口 import { ethernet } from @kit.NetworkKit;ethernet.on(interfaceStateChange, (data: object) => {console.log(on interfaceSharingStateChange: + JSON.…

C++ 跨平台开发挑战与深度解决方案:从架构设计到实战优化

C 凭借其高性能与底层控制能力&#xff0c;在游戏引擎、嵌入式系统、工业软件等领域占据核心地位。然而&#xff0c;跨平台开发过程中需应对硬件架构多样性、操作系统差异性、编译工具链碎片化等复杂问题。本文将从底层架构到上层应用&#xff0c;系统性剖析 C 跨平台开发的核心…

什么是 ANR 如何避免它

一、什么是 ANR&#xff1f; ANR&#xff08;Application Not Responding&#xff09; 是 Android 系统在应用程序主线程&#xff08;UI 线程&#xff09;被阻塞超过一定时间后触发的错误机制。此时系统会弹出一个对话框提示用户“应用无响应”&#xff0c;用户可以选择等待或强…

数据结构(六)——树和二叉树

一、树和二叉树的定义与存储 1.树的定义 树是一种非线性的数据结构&#xff0c;它是由n个有限结点组成有层次关系的集合 树具有以下特点&#xff1a; &#xff08;1&#xff09;每个结点具有0个或多个子结点 &#xff08;2&#xff09;每个子结点只有一个父结点 &#xff…

DICOM 网络服务实现:医学影像传输与管理的技术实践

🧑 博主简介:CSDN博客专家、CSDN平台优质创作者,高级开发工程师,数学专业,10年以上C/C++, C#, Java等多种编程语言开发经验,拥有高级工程师证书;擅长C/C++、C#等开发语言,熟悉Java常用开发技术,能熟练应用常用数据库SQL server,Oracle,mysql,postgresql等进行开发应用…

TongWeb7.0常用-D参数说明

Web容器相关启动参数配置 属性 含义 -Dtongweb.restart.interval 设置宕机后重启的时间间隔&#xff0c;以秒为单位。如果不设置这个参数&#xff0c;默认为1秒 -Dmonitor.abnormal.restart 设置服务器非正常状态时是否重启&#xff0c;如果不设置这个参数或者参数值不为…

软件架构评估方法全面解析

介绍 在软件开发过程中&#xff0c;架构设计的好坏直接影响系统的可维护性、可扩展性和性能。因此&#xff0c;软件架构评估&#xff08;Software Architecture Evaluation&#xff09;成为确保架构质量的关键步骤。本文将介绍几种主流的架构评估方法&#xff0c;包括ATAM、SA…

我开源了一个免费在线工具!UIED Tools

UIED Tools - 免费在线工具集合 最近更新&#xff1a;修改了文档说明&#xff0c;优化了项目结构介绍 这是设计师转开发的第一个开源项目&#xff0c;bug和代码规范可能有些欠缺。 这是一个功能丰富的免费在线工具集合网站&#xff0c;集成了多种实用工具&#xff0c;包括 AI …

【vue】全局组件及组件模块抽离

一、全局组件 只要是实例化过的区域都可以使用 Vue.component("组件名",{ template: 内容} ) 二、组件模块抽离 抽离就是把template的内容写到body里面&#xff0c;然后建立id写到变量下的template里&#xff0c;id变量写到component里 body{ template&#xff1a; …

深入理解 iOS 开发中的 `use_frameworks!`

在使用 CocoaPods 管理 iOS 项目依赖时&#xff0c;开发者经常会在 Podfile 文件中看到一个配置选项&#xff1a;use_frameworks!。本文将详细介绍这个配置选项的含义&#xff0c;以及如何决定是否在项目中使用它。 一、什么是 use_frameworks! 在 CocoaPods 中引入第三方库时…

《Python星球日记》 第57天:LSTM 与 GRU

名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 一、LSTM 的门控机制1. LSTM 结构概述2. 遗忘门(Forget Gate)3. 输入门(Input Gate)4. 输出门(Output Gate)5. 记忆单元更新过程二、GRU 的简化…

Java SE所需工具与常见类型和运算符介绍

1.Java SE所需工具 1.1 JDK JDK全称为Java Develepment Kit(Java开发者工具包&#xff09;&#xff0c;包括了Java运行环境JRE&#xff08;Java Runtime Envirnment&#xff09;、一堆Java工具&#xff08;javac/java/jdb等&#xff09;和Java基础的类库&#xff08;即Java A…

QT6.8安装教程

官网下载 链接&#xff1a; Index of /official_releases/online_installers 这个比较慢 建议去 清华大学开源软件镜像站&#xff1a;Index of /qt/archive/online_installers/4.9/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 根据自己什么系统选择 点击打开…