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

server/2025/1/11 14:35:06/

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 控制传输实现了可靠的重传逻辑,有效保证数据完整性和可靠性。


http://www.ppmy.cn/server/157492.html

相关文章

初识verilog HDL

为什么选择用Verilog HDL开发FPGA??? 硬件描述语言(Hardware Descriptipon Lagnuage,HDL)通过硬件的方式来产生与之对应的真实的硬件电路,最终实现所设计的预期功能,其设计方法与软件…

kubeneters-循序渐进Cilium网络(二)

文章目录 概要IP 地址配置接口配置解析结论 概要 接续前一章节,我们还是以这张图继续深入Cilium网络世界 IP 地址配置 通过检查 Kubernetes 集群的当前环境,可以获取实际的 IP 地址和配置信息。这些信息将被补充到之前的网络示意图中,以使…

awr报告无法生成:常见案例与解决办法

awr报告无法生成:常见案例与解决办法 STATISTICS_LEVEL设置过低数据库打开状态不对主库隐含参数设置错误MMON子进程被SuspendSYS模式统计信息过期WRH$_SQL_PLAN表数据量太大AWR绑定变量信息收集超时撞上数据库Bug 9040676STATISTICS_LEVEL设置过低 STATISTICS_LEVEL设置为BAS…

计算机网络之---子网划分与IP地址

子网划分与IP地址的关系 在计算机网络中,子网划分(Subnetworking)是将一个网络划分为多个子网络的过程。通过子网划分,可以有效地管理和利用IP地址空间,提高网络的性能、安全性和管理效率。 子网划分的基本目的是通过…

现代谱估计的原理及MATLAB仿真(二)(AR模型法、MVDR法、MUSIC法)

现代谱估计的原理及MATLAB仿真AR参数模型法(参数模型功率谱估计)、MVDR法(最小方差无失真响应法)、MUSIC法(多重信号分类法) 文章目录 前言一、AR参数模型1 原理2 MATLAB仿真 二、MVDR法1 原理2 MATLAB仿真…

Ubuntu 安装 Java 1.8

如果你希望使用 Oracle JDK 8,可以按照以下步骤操作: 下载 Oracle JDK 8: 访问 Oracle 官方网站 下载适用于 Ubuntu 的 JDK 8 版本 安装 Oracle JDK 8: 将下载的 JDK 8 压缩包解压到一个目录中,例如 /opt/module&…

【计算机网络】什么是网关(Gateway)?

网上冲浪多了,你可以听到过网关(Gateway)这个词,但是却不太清楚网关(Gateway)到底是干什么的、负责网络当中的什么任务,本篇文字将会为你介绍网关(Gateway)的作用&#x…

公众号如何通过openid获取unionid

通过接口 https://api.weixin.qq.com/cgi-bin/user/info?access_tokenxxxxxxx&langzh_CN 返回的数据如下: 前提是必须绑定 微信开放平台 token如何获取呢 代码如下: String tokenUrl "https://api.weixin.qq.com/cgi-bin/token"; …