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

USB基础 -- USB 控制传输(Control Transfer)的重传机制

USB 控制传输(Control Transfer)的重传机制

1. 控制传输的事务结构

控制传输分为三个阶段,每个阶段都有自己的事务,并可能触发重传机制:

  1. 设置阶段(Setup Stage):主机发送 8 字节的 Setup Packet
  2. 数据阶段(Data Stage):主机或设备发送数据(可选)。
  3. 状态阶段(Status Stage):主机和设备确认传输完成。

每个阶段基于 USB 事务(Transaction),包括以下内容:

  • 令牌包(Token Packet):标识事务类型和数据方向。
  • 数据包(Data Packet):承载实际传输的数据。
  • 握手包(Handshake Packet):用于确认事务状态。

2. 协议细节与比特位内容

令牌包(Token Packet)

  • 格式

    SYNC (8 bits) | PID (8 bits) | ADDR (7 bits) | ENDP (4 bits) | CRC5 (5 bits) | EOP
    
    • SYNC (8 bits):同步字段,用于设备锁相。
    • PID (8 bits):标识包类型,如 SETUP(0x2D)和 OUT(0xE1)。
    • ADDR (7 bits):设备地址,指定目标设备。
    • ENDP (4 bits):端点号,标识目标端点。
    • CRC5 (5 bits):校验令牌包内容的循环冗余校验码。
    • EOP:包结束标志。
  • 重传机制

    • 如果设备未接收到完整或正确的令牌包,它会忽略事务,主机在超时后重发。

数据包(Data Packet)

  • 格式

    SYNC (8 bits) | PID (8 bits) | DATA (0-1024 bytes) | CRC16 (16 bits) | EOP
    
    • SYNC (8 bits):同步字段。
    • PID (8 bits)DATA0(0xC3)或 DATA1(0x4B)表示数据包序号。
    • DATA (0-1024 bytes):实际数据,长度由事务决定。
    • CRC16 (16 bits):校验数据包的完整性。
  • 重传机制

    • 如果设备收到数据包但校验失败(CRC16 错误),设备会发送 NAK(0x5A) 或不响应。
    • 主机会根据 NAK 信号进行重传。
    • 数据切换位(Data Toggle):用于标识数据包的序号(DATA0DATA1),主机和设备通过序号同步避免重复数据。

握手包(Handshake Packet)

  • 格式

    SYNC (8 bits) | PID (8 bits) | EOP
    
    • SYNC (8 bits):同步字段。
    • PID (8 bits)
      • ACK (0xD2):设备正确接收数据。
      • NAK (0x5A):设备暂时无法接收数据。
      • STALL (0x1E):设备无法处理请求。
  • 重传机制

    • 如果主机未收到 ACK,或者收到 NAK/STALL,它会触发重试逻辑。
    • 重传次数由主机控制器实现,通常重试 3 次后报错。

3. 重传逻辑触发点

以下情况可能触发控制传输的重传:

  1. 令牌包丢失或损坏

    • 如果设备未检测到完整的令牌包,则不响应,主机会超时后重传。
  2. 数据包丢失或损坏

    • 如果设备检测到 CRC16 错误,发送 NAK,主机会重传。
    • 如果数据序号不匹配(DATA0DATA1),设备会忽略,主机重新发送。
  3. 握手包丢失

    • 如果主机未收到 ACK,会重新发送数据包。

4. 示例流程:控制传输中的重传

假设主机与设备进行以下控制传输:

  1. 主机发送 Setup Packet

    • 主机发送令牌包和 DATA0,设备校验后发送 ACK
    • 如果设备未发送 ACK,主机会重传。
  2. 主机发送数据(数据阶段)

    • 主机发送 DATA1 包。
    • 设备检测 CRC16 错误,返回 NAK
    • 主机重发数据,直到收到 ACK
  3. 状态阶段

    • 主机发送 IN 令牌包,设备返回 ACK 确认完成。
    • 如果主机未收到 ACK,会重传。

5. 比特位重传的关键技术

  • PID 检测:通过 PID 校验机制,设备和主机能检测包类型和有效性。
  • CRC 校验:对令牌包和数据包进行错误检测。
  • NAK 反馈:设备未准备好时,返回 NAK 请求重传。
  • 超时机制:主机设定超时时间,未收到响应会重发。

通过上述比特位级别的校验和反馈机制,USB 控制传输实现了可靠的重传逻辑,有效保证数据完整性和可靠性。

相关文章:

USB基础 -- USB 控制传输(Control Transfer)的重传机制

USB 控制传输(Control Transfer)的重传机制 1. 控制传输的事务结构 控制传输分为三个阶段,每个阶段都有自己的事务,并可能触发重传机制: 设置阶段(Setup Stage):主机发送 8 字节的…...

云计算基础,虚拟化原理

文章目录 一、虚拟化1.1 什么是虚拟化1.2 虚拟化类型 二 、存储虚拟化2.1 存储指标2.2 存储类型2.3 存储协议2.4 RAID 三、内存 i/O虚拟化3.1 内存虚拟化基本概念地址空间转换原理内存共享与隔离原理 3.2 I/O 虚拟化基本概念模拟(Emulation)方式半虚拟化…...

浮点数在C语言开发中为什么不精确?

在C语言开发中,浮点数的精度问题是一个常见的陷阱,尤其是对于刚接触编程的开发者来说,可能会对浮点数的行为感到困惑。为什么0.1 0.2不等于0.3?为什么浮点数计算会出现微小误差?本文将从计算机底层原理出发&#xff0…...

ChatGPT网络错误如何解决

在当今的信息化社会,网络技术已无处不在。无论是日常生活中的在线购物,还是工作中的远程会议,网络的稳定性和可靠性成为了我们无时无刻不在关注的重要问题。而在智能技术的快速发展中,像ChatGPT这样的人工智能模型,因其…...

Vue3初学之插槽(slot)使用

在 Vue 3 中,插槽(Slots)是一种强大的内容分发机制,允许你在组件中定义可替换的内容区域,从而使组件更加通用和灵活。以下是 Vue 3 中插槽的几种常见用法: 默认插槽 默认插槽是最基本的插槽类型&#xff0…...

使用PVE快速创建虚拟机集群并搭建docker环境

安装Linux系统 这里以安装龙蜥操作系统AnolisOS8.9为例加以说明。 通过PVE后台上传操作系统ISO镜像。 然后在PVE上【创建虚拟机】,选定上传的龙蜥操作系统镜像进行系统安装。 注意:在安装过程中,要设定语言、时区、超管用户root的密码、普…...

带格式 pdf 翻译

支持 openAI 接口,国内 deepseek 接口兼容 openAI 接口, deepseek api 又非常便宜 https://pdf2zh.com/ https://github.com/Byaidu/PDFMathTranslate...

【C++】C++11(一)

目录 一、C11简介二、统一的列表初始化2.1 {}初始化2.2 std::initializer_list 三、声明3.1 auto3.2 decltype3.3 nullptr 四、范围for五、智能指针六、STL中一些变化七、右值引用和移动语义7.1 左值引用和右值引用7.2 左值引用与右值引用比较7.3 右值引…...

初学stm32 --- ADC单通道采集

目录 ADC寄存器介绍(F1) ADC控制寄存器 1(ADC_CR1) ADC控制寄存器 2(ADC_CR2) ADC采样时间寄存器1(ADC_SMPR1) ADC采样时间寄存器2(ADC_SMPR2) ADC规则序列寄存器 1(ADC_SQR1) ADC规则序列寄存器 2(ADC_SQR2) ADC规则序列寄存器 3(ADC_SQR3) AD…...

【动态规划篇】欣赏概率论与镜像法融合下,别出心裁探索解答括号序列问题

本篇鸡汤:没有人能替你承受痛苦,也没有人能拿走你的坚强. 欢迎拜访:羑悻的小杀马特.-CSDN博客 本篇主题:带你解答洛谷的括号序列问题(绝对巧解) 制作日期:2025.01.10 隶属专栏:C/C题…...

Java(day7)

字符串练习 生成验证码 package day6; /*生成验证码 内容:可以是小写字母,也可以是大写字,还可以是数字 规则: 长度为5 内容中是四位字母,1位数字。 其中数字只有1位,但是可以出现在任意的位置。*/ impor…...

Word 转成pdf及打印的开源方案支持xp

Word转成pdf、打印的方案几乎没有免费开源的方案,现在提供一个通过LibreOffice实现的方案 操作依赖LibreOffice需要安装,点此下载老版本 5.4.7.2是最后一个支持xp的 版本如需xp要请安装此版本 LibreOffice官方介绍 LibreOffice 是一款开放源代码的自…...

LabVIEW软件侵权分析与应对

问:如果涉及到LabVIEW软件的仿制或模仿,特别是在功能、界面等方面,如何判断是否构成侵权?该如何应对? 答:LabVIEW软件的侵权问题,尤其是在涉及到仿制或模仿其功能、界面、设计等方面&#xff0…...

【redis】centos7下安装redis7

在CentOS 7下安装Redis7可以通过以下两种方法实现:手动编译安装和使用YUM进行安装。 CentOS 7系统的环境和版本: $ cat /etc/centos-release CentOS Linux release 7.9.2009 (Core)手动编译安装 参考官方文档:https://redis.io/docs/lates…...

[network]回顾:集线器(Hub)

集线器(Hub)的发明是计算机网络发展史上的一个重要里程碑。它最初的设计目的是为了解决局域网(LAN)中多台计算机共享网络资源的需求。 #mermaid-svg-OAmOmKYGAXoglS5z {font-family:"trebuchet ms",verdana,arial,sans-…...

79 Openssl3.0 RSA公钥加密数据

1 引言 最近不小心用到了openssl3.0,项目中需要使用rsa非对称加解密算法,所以把openssl3.0使用公钥加密数据的函数调用摸了一遍。 之所以记录此篇文章,是因为网络上大多数是openssl3.0以前的版本的函数接口,而openssl3.0之后已经丢…...

EFCore HasDefaultValueSql (续2 HasComputedColumnSql)

前情:EFCore HasDefaultValueSql EFCore HasDefaultValueSql (续1 ValueGeneratedOnAdd)-CSDN博客 小伙伴在使用 HasDefaultValueSql 时,对相关的 ValueGeneratedOnAdd, HasComputedColumnSql 也有了疑问: HasComputedColumnSql 对于计算…...

阿里巴巴TransmittableThreadLocal使用指南

前言 ThreadLocal在上下文的数据传输上非常的方便和简洁。工业实践中,比较常用的有三个,ThreadLocal、InheritableThreadLocal、TransmittableThreadLocal,那么他们三个之间有什么区别呢? 常见的三种ThreadLocal比较 ThreadLoc…...

ubuntu20下编译linux1.0 (part1)

author: hjjdebug date: 2025年 01月 09日 星期四 15:56:15 CST description: ubuntu20下编译linux1.0 (part1) 该博客记录了新gcc编译旧代码可能碰到的问题和解决办法, 可留作参考 操作环境: ubuntu20 $ gcc --version gcc (Ubuntu 9.4.0-1ubuntu1~20.04.2) 9.4.0 $ as --vers…...

欧拉公式和傅里叶变换

注:英文引文机翻,未校。 中文引文未整理去重,如有异常,请看原文。 Euler’s Formula and Fourier Transform Posted byczxttkl October 7, 2018 Euler’s formula states that e i x cos ⁡ x i sin ⁡ x e^{ix} \cos{x} i …...

深入STM32F103定时器:用TIM2输入捕获精准测量脉冲宽度与频率

深入STM32F103定时器:用TIM2输入捕获精准测量脉冲宽度与频率 在嵌入式开发中,精确测量外部信号的脉冲宽度和频率是一项常见但极具挑战性的任务。无论是工业控制中的旋转编码器、消费电子中的红外遥控信号,还是无人机领域的PPM控制信号&#x…...

别再死记命令了!用ENSP模拟企业网,手把手教你配置VRRP+MSTP实现网关和链路双备份

企业网络高可用实战:用ENSP构建VRRPMSTP双冗余架构 刚接触企业网络设计的工程师常陷入一个误区:把网络设备配置等同于命令记忆。我曾见过一位学员能完整背诵VRRP的配置指令,却在真实网络故障时手足无措——因为他从未理解这些命令背后的网络逻…...

飞秒激光微纳加工:原理、系统选型与典型应用实践

1. 飞秒激光加工:微纳世界的“手术刀”在精密制造领域,尤其是半导体、生物医疗和光子芯片这些前沿行业,对加工精度的要求已经到了纳米甚至亚纳米级别。传统的机械加工、长脉冲激光加工,在面对这种“微雕”任务时,往往显…...

手把手教你用VAMI 5480界面给vCenter Server 7.0打补丁(附备份确认与CEIP选择避坑)

从零开始:vCenter Server 7.0小版本升级全流程指南 第一次为vCenter Server执行小版本升级,就像给心脏做手术——既不能出错,又必须确保每一步都万无一失。作为VMware虚拟化环境的核心枢纽,vCenter的稳定性直接关系到整个IT基础设…...

MPh 开源项目教程

MPh 开源项目教程 【免费下载链接】MPh Pythonic scripting interface for Comsol Multiphysics 项目地址: https://gitcode.com/gh_mirrors/mp/MPh 项目介绍 MPh 是一个基于 Python 的强大开源项目,旨在简化数学物理问题的求解过程。它结合了符号计算的灵活…...

BiliTools:重新定义B站内容消费的技术解决方案

BiliTools:重新定义B站内容消费的技术解决方案 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools 你是否曾…...

Perplexity翻译查询功能实测对比:比DeepL快3.7倍、准确率提升22%的关键配置参数曝光

更多请点击: https://intelliparadigm.com 第一章:Perplexity翻译查询功能实测对比总览 Perplexity 作为一款以实时网络检索与推理能力见长的AI问答工具,其内置翻译查询功能并非独立模块,而是深度集成于自然语言理解流程中。在实…...

HCV Core Protein (59-68);RGRRQPIPKA

一、基础信息多肽名称:丙型肝炎病毒 核心蛋白片段 (59-68) 英文名称:HCV Core Protein (59-68) 三字母序列:Arg-Gly-Arg-Arg-Gln-Pro-Ile-Pro-Lys-Ala 单字母序列:RGRRQPIPKA 氨基酸数量:10 aa 结构特征:线…...

给程序员和数据分析师的气象学入门:搞懂城市边界层,让你的天气API数据不再‘失真’

给程序员和数据分析师的气象学入门:搞懂城市边界层,让你的天气API数据不再‘失真’ 当你在调用天气API时,是否遇到过这样的困惑:明明获取的是同一个城市的温度数据,为什么市中心的气温总比郊区高出几度?为什…...

为什么92%的研究者搜不到关键书评?Perplexity图书评论搜索的3大认知盲区与实时校准方案

更多请点击: https://codechina.net 第一章:为什么92%的研究者搜不到关键书评? 学术资源检索的失效,往往并非源于信息缺失,而是检索逻辑与出版生态的错位。当前主流学术数据库(如Google Scholar、CNKI、JS…...