USB2.0集线器HUB
+ -

USB集线器错误检测的原理与时机

2026-04-22 本文链接为:http://www.usbzh.com/article/detail-1623.html ,欢迎转载,转载请附上本文链接。

一、核心概念

错误检测是指集线器正确识别出USB总线上的异常状况(如设备“喋喋不休”、包丢失、时序违规等),并采取相应措施(如禁用端口、触发恢复机制)的能力。

与“误检测”不同,错误检测依赖正确的同步时钟作为判断基准。

二、主要错误类型及检测原理

错误类型 检测原理 检测主体 典型时机
喋喋不休 (Babble) 在EOF2点检查下游端口是否仍在发送数据 集线器 每个(微)帧结束前
SOF丢失 检测到current_frame_timer溢出(超过最大允许值) 集线器 预期收到SOF的时间窗口内
包格式错误 检测到无效的PID、CRC校验失败、位填充错误等 集线器/主机 数据包接收过程中
超时 检测到总线空闲时间超过规定阈值 集线器/主机 等待设备响应时
复位失败 检测到设备在规定时间内未响应复位信号 主机 设备枚举期间

三、核心错误检测详解

1. 喋喋不休 (Babble) 检测

USB集线器对每一个帧内预的时间最后预留一部分用于喋喋不休设备的检测,在这种情情况下不允许任何设备进行数据传输

切断点 时间点 切断对象 目的 防止的问题
EOF1 EOF 前 560 位时间 (高速) / 32 位时间 (全速) 集线器正在转发的上行数据包 自我约束,提前结束传输 防止自己被上游误判为喋喋不休
EOF2 EOF 前 64 位时间 (高速) / 10 位时间 (全速) 下游故障设备 惩罚 / 隔离喋喋不休设备 防止故障设备拖垮整个总线
EOF1:检测内容与动作

检测内容:在 EOF1 时刻,集线器检查当前上行传输(设备→主机)是否仍在进行。即:是否有数据包在帧尾前仍未发送完毕。
动作(发现喋喋不休):

  • 强制终止当前上行数据包(提前发送 EOP 结束包)
  • 不关闭端口,允许该端口后续继续传输
  • 目的:保护集线器自身不被上一级集线器误判为异常设备
  • EOF1(早):包太长 → 掐断包、保帧
EOF2:检测内容与动作

检测内容:在 EOF2 时刻,集线器再次检查该下行端口是否仍在发送数据。即:设备是否持续占用总线、拒不释放。
动作(发现喋喋不休):

  • 立即关闭(Disable)该下行端口
  • 切断该端口的所有数据转发,彻底隔离故障设备
  • 目的:确保主机在下一周期一定能正常发送 SOF,不影响整个总线
  • EOF2(晚):还在发 → 关端口、保总线
├────────────────────────────────────────────────────────────────────────┤
│  ← 正常传输 →                    ← 预留区 →      ← 最后检查区 →  帧结     │
│  SOF      数据包传输            EOF1            EOF2            EOF    │
│   │          │                  │               │              │      │
│   ▼          ▼                  ▼               ▼              ▼      │
│━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━│
│                                                                        │
│  ▲                             ▲               ▲                       │
│  │                             │               │                       │
│  SOF丢失检测                   自我切断      喋喋不休检测                 │
│  (预期收到SOF时)               (EOF1点)        (EOF2点)                 │

2. SOF丢失检测

原理

  • 集线器预期每个(微)帧开始时收到SOF包
  • 通过current_frame_timer递增计数测量连续SOF之间的间隔
  • 如果计数值超过最大允许值(高速:>60096;全速:>12042),判定为SOF丢失

时机

  • 每个预期收到SOF的时间点
  • 连续丢失检测:在两个SOF间隔结束时

动作

  • 丢失1个:使用next_frame缓存值维持运行(惯性模式)
  • 连续丢失2个:定时器失锁,需要重新同步

3. 包格式错误检测

原理

  • 接收端检查数据包的各个字段
  • 包括:PID校验、CRC5/CRC16校验、位填充规则等

时机

  • 数据包接收过程中
  • 每个包结束时进行校验

动作

  • 忽略损坏的包
  • 等待重传

四、错误检测的前提条件

条件 说明 无此条件时的风险
(微)帧定时器已同步 必须锁定到主机的SOF周期 无法判断EOF位置 → 无法检测喋喋不休
正确的电气环境 信号电平、阻抗匹配正常 可能产生假信号 → 误检测
有效的包格式 PID、CRC等符合规范 无法区分损坏包和有效包

五、错误检测 vs 误检测 对比

对比项 错误检测 (正确识别) 误检测 (错误识别)
定时器状态 ✅ 已同步 ❌ 未同步
判断依据 准确的EOF1/EOF2时间点 无时间基准
典型场景 正常运行时检测故障设备 全局恢复期间设备热插拔
结果 正确隔离故障 可能错误禁用正常设备或传播假信号
恢复方式 自动或主机复位 主机复位并重新枚举
本文链接为:http://www.usbzh.com/article/detail-1623.html ,欢迎转载,转载请附上本文链接。

HID人机交互QQ群:564808376    UAC音频QQ群:218581009    UVC相机QQ群:331552032    BOT&UASP大容量存储QQ群:258159197    STC-USB单片机QQ群:315457461    USB技术交流QQ群2:580684376    USB技术交流QQ群:952873936     USB技术交流3:1031974172

0 篇笔记 写笔记

USB集线器错误检测的原理与时机
一、核心概念错误检测是指集线器正确识别出USB总线上的异常状况(如设备“喋喋不休”、包丢失、时序违规等),并采取相应措施(如禁用端口、触发恢复机制)的能力。与“误检测”不同,错误检测依赖正确的同步时钟作为判断基准。二、主要错误类型及检测原理错误类型检测原理检测主体典型时机喋......
关注公众号
  • HID人机交互
  • Linux&USB
  • UAC音频
  • CDC
  • TYPE-C
  • USB规范
  • USB大容量存储
  • USB百科
  • USB周边
  • UVC摄像头
  • Windows系统USB
  • 音视频博客
  • 取消
    感谢您的支持,我会继续努力的!
    扫码支持
    扫码打赏,你说多少就多少

    打开支付宝扫一扫,即可进行扫码打赏哦

    您的支持,是我们前进的动力!