USB 2.0 详解(三)—— 电气特性

电气特性

这里我们略过USB的机械特性 (mechanical properties) 部分,有兴趣的朋友可以参阅 USB 2.0 Specification 中的第六章 Chapter 6 Mechanical 的内容。

本篇介绍 USB 2.0 的电气特性,不打算对 USB 2.0 Specification 中的第七章 Chapter 7 Electrical 进行详细的电气特性解读,会参考 USB 中文网 进行笼统地概念描述。有兴趣的朋友可以自行参阅第七章中的内容。

推荐学习由百问网提供的全场景工业互联设备管理系统解决方案,其中有对 USB 核心内容的详细讲解。

USB2.0设备连接状态的检测

USB2.0设备的引脚接线定义分为四根线,分别为

  • 电源线(VBus)
  • D+
  • D-
  • 地线(GND)

主机端与设备的电路图如图所示:

USB主机端的 D+ 和 D- 均有一个 15K 的下拉电阻,而设备端根据 USB 设备分为两大类 USB低速 和 USB全速/高速,分别在其设备的 D- 或 D+ 上拉一个 1.5K 的电阻。

  • 主机端 D+ 和 D- 均有一个 15K 的下拉电阻。
  • 低速设备端 D- 上拉一个 1.5K 的电阻
  • 高速/全速设备端 D+ 上拉一个 1.5K 的电阻

连接状态检测流程如下:

  1. VBUS 上电与设备连接检测

    上电与监控:
    默认情况下,USB主机端的 VBUS 为高电平,当 USB 设备插入时,主机或集线器将 VBUS 电压加到设备上,USB设备端的 VBUS 从低电平变为高电平(>=4.01V),USB设备端 VBUS 检测到高电平。
    USB设备内部的上拉电阻(通常在 D+ 或 D- 线上,取决于设备本身)会拉升一个数据线电平,用以表明连接状态。
    主机或集线器通过监测差分数据线(D+ 和 D-)的电压,检测设备的连接状态。如果检测到某条数据线(D+ 或 D-)的电压持续超过 VIH(输入高电平阈值,通常>2.0V)且持续时间超过指定的 TDCNN(连接信号延迟时间,通常为3.1ms),则判定为设备已连接​。

  2. 去抖动检测 (Debounce)

    USB 系统在检测到连接后,启动一个去抖动计时器,以过滤短暂的机械噪声或不稳定信号。
    去抖动时间为至少 100 ms (TATTDB),确保物理和电气连接稳定。如果在去抖动期间出现断开信号(例如 SE0 状态),计时器会重置。

  3. 检测设备速度

    USB 主机或集线器在检测到设备连接后,开始通过以下方式判断设备速度:

    • D+ 拉高表示全速 (Full-Speed)。
    • D- 拉高表示低速 (Low-Speed)。
      如果设备支持高速 (High-Speed),需要通过复位过程进一步检测。
  4. 端口复位与设备初始化

    • 复位信号发送 (Reset):
      主机向设备的端口发送复位信号(SE0),将设备置于默认状态。
      复位信号持续至少 10 ms (TDRST),随后 USB 系统保证设备至少有 10 ms 的恢复时间 (TRSTRCY)​。

    • 设备初始化:
      设备在复位后进入默认状态,此时仅能响应地址 0 的命令,且只能消耗不超过 100 mA 的电流​。

  5. 总线枚举 (Bus Enumeration)

    • 地址分配:
      主机向设备分配一个唯一的地址,将设备从默认状态转移到地址状态​。

    • 配置读取:
      主机通过读取设备描述符、配置描述符等,获取设备的功能和特性。
      主机基于读取的配置数据,发送 SetConfiguration 命令完成设备配置,使设备进入配置状态​。

  6. 检测完成并开始通信
    设备进入配置状态后,其所有的端点(Endpoint)特性和功能激活,主机可以开始正常通信。
    此时设备已准备好执行其功能,例如数据传输或响应控制请求​。


低速/全速设备速度识别

USB 在集线器和功能端(指USB设备)通过如图 7-20 和图 7-21 所示的方式连接。全速和低速设备通过上拉电阻位置来区分:

  1. 全速设备 (Full-speed devices):如图 7-20 所示,其上拉电阻位于 D+ 数据线上。
  2. 低速设备 (Low-speed devices):如图 7-21 所示,其上拉电阻位于 D- 数据线上。
  3. 下游端口的下拉终端:是连接到地的电阻,值为 15 kΩ ±5%。

为了确保信号水平满足手册中表 7-2 中的要求,上拉电阻的设计必须能够在复位后的最短恢复时间(2.5 µs)内将 D+ 或 D- 从 0V 拉升到最低 VIH(高电平输入电压)。

  • 如果设备使用可拆卸电缆,则必须采用一个值为 1.5 kΩ ±5% 的电阻,该电阻连接到一个电压源(VTERM),该电压源范围在 3.0V 至 3.6V。
  • 如果设备使用固定电缆,也可以使用其他终端方式,但任何终端的等效电阻 (Thevenin resistance) 必须不小于 900 Ω。

注意:终端的等效电阻不包括主机/集线器端的 15 kΩ ±5% 电阻。

上拉电阻的电压源必须来自 USB 电缆提供的电源或由其控制,以确保当 VBUS 被移除时,上拉电阻不会通过其连接的数据线提供电流。

高速度设备速度识别

对于USB2.0的高速设备,其连接状态的检测是一样的。并且USB2.0高速设备在设备的连接检测时,也是以USB2.0全速的工作状态进行通讯连接的。只是在USB主机端对设备复位后,USB高速设备会主动发送USB高速协商信号,而主机端如果正确识别,则工作在全速状态的USB2.0高速设备切换到高速状态。而USB2.0全速设备并不会对主机端发送高速协商信号。更详细的解释


USB2.0设备断开状态的检测

USB设备一般分为自供电和VBUS供电。

对于由 VBUS 供电的设备,当设备与主机断开后,设备将无电源供电,这种情况下设备端的固件程序无法运行,故对于此种设备,USB设备端断开的检测无任何意义。

USB2.0规范对 USB总线 VBUS 上的电压有规定,所以对于支持 VBUS 检测的 USB设备,可以通过检测 VBUS 上的电压低于 VBSVLD即4.01V 时即可认为 USB设备与主机已经断开。
对于不支持 VBUS 上检测的 USB设备,是通过 D+/D- 上的电压变化来检测的。

无论是否支持 VBUS 检测的 USB设备,当检测到设备已经与主机断开后,都需要 D+或D- 上的上拉电阻,来确保下次连接检测的初始化状态是正确的。

在实际的硬件电路中,VBUS 设备端会有一个旁路电容,过快的快速插拔导致设备端的 VBUS 电压因旁路电容的存在导致无法降低到 4.01V 以下,导致设备端的断开检测设备。


断开检测的流程如下:

  1. 低速/全速模式下的检测

    当设备断开连接时,下行端口的数据线(D+和D-)由下行端口内的下拉电阻拉低至单端低电平阈值以下(小于0.8V)。
    主机/集线器的下行端口进入SE0状态,并在持续的SE0状态超过TDDIS时间后(最小值为2us),标记为断开状态(TDDIS具体时间参数由USB 2.0规范定义)​。

  2. 高速模式下的检测

    高速模式下,当下行端口发送信号时,如果设备断开,信号会因为远端终端电阻的移除而反射回来,导致差分信号幅度增加至≥625 mV。
    高速断开检测使用EOP(End of Packet)帧信号期间的无过渡信号段(连续40位bit时间的稳定信号)来完成。这一过程保证信号反射足够明显以触发断开检测器​。
    如果在发送32位无过渡信号后,检测到差分信号超过625 mV的断开阈值,集线器/主机的下行端口将报告断开状态​。


J、K状态

  • 在全速或者低速模式下

    • 当接收端检测到 D+ 信号线的电压比 D- 信号线的电压高出 200mV 时,表示差分信号 “1”
    • 当接收端检测到 D- 信号线的电压比 D+ 信号线的电压高出 200mV 时,表示差分信号 “0”
  • 在高速的模式下

    • 当接收端检测到 D+ 信号线的电压比 D- 信号线的电压高出 360mV 时,表示差分信号 “1”
    • 当接收端检测到 D- 信号线的电压比 D+ 信号线的电压高出 360mV 时,表示差分信号 “0”

USB2.0规范中对以下的差分信号 1 和 0 的状态定义为 J状态 和 K状态。

  • 全速和高速模式下

    • J状态对应差分信号“1”
    • K状态对应差分信号“0”
  • 低速模式下

    • J状态对应差分信号“0”
    • K状态对应差分信号“1”

无论是低速、全速或者是高速模式下,IDLE(即空闲状态)都是1,只是全速和高速的空闲状态叫J状态,而低速的叫K状态。

Chirp J 和 Chirp K状态

Chirp J和Chirp K状态只出现在高速模式的速度检测握手协议中,即设备从全速识别为高速设备的状态转换过程中。其原理是:高速模式是由电流驱动的,其J/K信号是由一个17.78mA的电流源向D+和D-数据线产生,当USB主机进入高速模式后,主机和设备两端的D-和D+都会挂载45Ω的等效终端电阻,并会断开D+数据线上的上拉电阻,这两个电阻并联之后为约为22.5Ω,因而可以在D+或者D-数据线上形成约为400mV的高速J/K信号。而高速设备在连接到USB主机时默认为全速模式,因此此时USB设备端还未挂接45Ω终端电阻,而是挂载了1.5K的上拉电阻,此时USB设备端的上拉电阻1.5K和主机端的45Ω并联后约45Ω,因此会在D+和D-上会形成800mV(17.78x45)的差分信号,这种差分信号就是Chirp J和Chirp K状态。

USB硬件编码格式NRZI

参考文章1

参考文章2


SE0(Single-Ended Zero)

在USB2.0中,SE0(Single-Ended Zero)是一种特定的信号状态,具有重要的电气特性,通常用于表示总线的空闲状态或数据的分隔。要理解SE0信号,我们需要了解USB信号的编码方式以及在不同情况下SE0信号的表现。

1. USB2.0 信号的基本传输方式

USB2.0通信使用差分信号传输,其主要使用两条线:D+(数据正线)和D-(数据负线)。信号在这两条线之间通过电压差异来传输数据。USB2.0采用了NRZI(Non-Return to Zero Inverted)编码技术来表示数据。

  • 逻辑 1:D+ 信号高,D- 信号低(D+ > D-)。
  • 逻辑 0:D+ 信号低,D- 信号高(D+ < D-)。

2. SE0 信号的定义

SE0指的是一种特殊的信号状态,在这个状态下,D+和D-两个信号线的电压是相等的,通常都为低电平(0V),即D+ = D-。这代表了USB总线的空闲或不活动状态。

  • 空闲状态
    当USB总线处于空闲状态时,D+和D-信号线都会保持在SE0状态。也就是说,这时D+和D-的电压都为0V,表示没有数据传输发生。

  • 总线复位
    在USB协议中,总线复位(reset)时也会发生SE0信号。主机(Host)通过将D+和D-都拉低到SE0状态来启动复位过程。USB设备在总线复位期间必须保持在SE0状态,并且等待复位结束后才能恢复通信。

  • 数据传输结束
    在一些特定的场景中,SE0信号也用于表示数据传输的结束。例如,当传输完成时,USB设备可能会将D+和D-拉低到SE0状态,表示该数据包的传输已完成。