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

http://www.lryc.cn/news/518827.html

相关文章:

  • 云计算基础,虚拟化原理
  • 浮点数在C语言开发中为什么不精确?
  • ChatGPT网络错误如何解决
  • Vue3初学之插槽(slot)使用
  • 使用PVE快速创建虚拟机集群并搭建docker环境
  • 带格式 pdf 翻译
  • 【C++】C++11(一)
  • 初学stm32 --- ADC单通道采集
  • 【动态规划篇】欣赏概率论与镜像法融合下,别出心裁探索解答括号序列问题
  • Java(day7)
  • Word 转成pdf及打印的开源方案支持xp
  • LabVIEW软件侵权分析与应对
  • 【redis】centos7下安装redis7
  • [network]回顾:集线器(Hub)
  • 79 Openssl3.0 RSA公钥加密数据
  • EFCore HasDefaultValueSql (续2 HasComputedColumnSql)
  • 阿里巴巴TransmittableThreadLocal使用指南
  • ubuntu20下编译linux1.0 (part1)
  • 欧拉公式和傅里叶变换
  • Jenkins内修改allure报告名称
  • 30天开发操作系统 第 12 天 -- 定时器 v1.0
  • Ubuntu | PostgreSQL | 解决 ERROR: `xmllint` is missing on your system.
  • uniapp使用chooseLocation安卓篇
  • 《PC 上的开源神经网络多模态模型:开启智能交互新时代》
  • Apache JMeter 压力测试使用说明
  • 腾讯云AI代码助手编程挑战赛-知识百科AI
  • 【SpringAOP】Spring AOP 底层逻辑:切点表达式与原理简明阐述
  • HTTP-响应协议
  • SQL进阶实战技巧:即时订单比例问题
  • 什么是端口