Lazy loaded image
USB专题02 - 软件工程师眼里的USB电气信号
Words 2840Read Time 8 min
2025-4-27
参考资料:
  • 《圈圈教你玩USB》
  • 《usb_20.pdf》的《Chapter 7 Electrical》
 

1. 硬件连接

  • HUB 端口上有D+和D-两条差分数据线,当无设备连接时,两条线都通过15KΩ下拉电阻被拉低。
  • 当设备连接(USB Device)时,会在一条差分线上加上1.5KΩ的上拉电阻,改变其电压状态。
usb device 上拉电阻接在D+,D-取决于设备为低速,全速还是高速。
usb device 上拉电阻接在D+,D-取决于设备为低速,全速还是高速。

2. 电气信号总线状态

USB连接线有4条:5V、D+、D-、GND。数据线D+、D-,只能表示4种状态。USB协议中,很巧妙地使用这两条线路实现了空闲(Idle)、开始(SOP)、传输数据(Data)、结束(EOP)等功能。

2.1 低速/全速信号电平

notion image

2.2 高速信号电平

notion image
notion image

3. 设备连接与断开(Attach/Detach)识别

3.1 连接识别原理

  • 主机控制器通过检测D+或D-线上的电压变化来识别设备连接
  • 当检测到电压从低态(<0.8V)变为高态(>2.0V)时,表示有设备接入

3.2 断开识别原理

  • 断开连接时,上拉电阻消失,D+和D-线同时回到低电平状态
  • 主机控制器检测到差分线电压同时变低时,识别为设备断开
  • 对于高速设备,对于高速设备,它先作为全速设备被识别出来,然后再被识别为高速设备。工作于高速模式时,D+的上拉电阻是断开的,所以对于工作于高速模式的USB设备,无法通过D+的引脚电平变化监测到它已经断开。
  • 工作于高速模式的设备,D+、D-两边有45欧姆的下拉电阻,用来消除反射信号:
    • notion image
  • 当断开高速设备后,Hub发出信号,得到的反射信号无法衰减,Hub监测到这些信号后就知道高速设备已经断开,内部电路图如下:
    • notion image

3.3 防误触发机制

速度等级
断开前状态
断开后状态
断开检测原理
低速设备
D-上拉高电平 D+为低电平
D-和D+同时为低电平
主机检测到D-线从高电平变为低电平,且两线同时为低状态
全速设备
D+上拉高电平 D-为低电平
D+和D-同时为低电平
主机检测到D+线从高电平变为低电平,且两线同时为低状态
高速设备
差分信号处于高速状态 周期性信号传输
差分对恢复到静默态 D+和D-同时为低电平
主机检测到高速差分信号消失,且差分线同时回到低状态

4. 设备速率识别

4.1 通过上拉电阻位置识别速率

速率类型
上拉电阻位置
识别特征
低速(1.5Mbps)
D-线上拉
D-为高电平,D+为低电平
全速(12Mbps)
D+线上拉
D+为高电平,D-为低电平
高速(480Mbps)
初始为全速,随后升级
通过高速握手协议升级
notion image

4.2 高速设备识别流程

  1. 设备初始以全速模式连接(D+上拉)
  1. 复位信号:主机发送复位信号(SE0状态)
  1. 高速握手协议("a high-speed detection handshake"信号):
      • USB设备维持D+的上拉电阻,发出"Chirp K "信号,表示自己能支持高速模式
      • 如果Hub没监测到"Chirp K "信号,它就知道这个设备不支持高速模式
      • 如果Hub监测到"Chirp K "信号后,如果Hub能支持高速模式,就发出一系列的"Chirp K"、"Chirp J"信号,这是用来通知USB设备:Hub也能支持高速模式。发出一系列的"Chirp K"、"Chirp J"信号后,Hub继续维持SE0信号直到10ms。
      • USB设备发出"Chirp K "信号后,就等待Hub回应一系列的"Chirp K"、"Chirp J"信号
        • 收到一系列的"Chirp K"、"Chirp J"信号:USB设备断开D+的上拉电阻,使能高速模式
        • 没有收到一系列的"Chirp K"、"Chirp J"信号:USB设备转入全速模式
      notion image
  1. 成功握手后,设备切换到高速模式,并停止使用1.5KΩ上拉电阻

4.3 超高速设备识别

  • SuperSpeed(USB 3.0+)设备使用额外的差分对(SSTX+/SSTX-和SSRX+/SSRX-)
  • 初始化过程
      1. 设备通过传统的USB 2.0接口进行基本识别
      1. 同时在SuperSpeed通道上进行LFPS(Low Frequency Periodic Signaling)训练序列
      1. 训练完成后,设备可以同时支持SuperSpeed和传统速率模式

4.4 总结:识别流程示意图

这种速率检测机制确保了USB的向后兼容性,同时允许新设备利用更高带宽通信。

5. 设备状态图说明

下图为USB规范中定义的设备状态转换图,展示了USB设备在连接和使用过程中的不同状态及其转换关系。
notion image

5.1 主要状态说明

1. 附加状态(Attached)

  • 含义:设备物理连接到USB总线但尚未通电
  • 特点:仅表示物理连接建立,设备未被识别或配置
  • 进入条件:设备插入USB端口

2. 供电状态(Powered)

  • 含义:设备从USB总线获得电源
  • 特点:设备内部电路已通电,但尚未收到复位信号
  • 进入条件:从Attached状态接收到电源

3. 默认状态(Default)

  • 含义:设备已收到总线复位信号
  • 特点:设备以默认地址(0)响应请求,可接收标准USB请求
  • 进入条件:在Powered状态收到总线复位信号

4. 地址状态(Address)

  • 含义:设备已被分配唯一地址
  • 特点:设备响应分配给它的特定地址的请求
  • 进入条件:主机发送SET_ADDRESS请求

5. 配置状态(Configured)

  • 含义:设备已完全配置,所有接口和端点已准备就绪
  • 特点:设备功能完全可用,可进行正常数据传输
  • 进入条件:主机发送SET_CONFIGURATION请求

6. 挂起状态(Suspended)

  • 含义:设备进入低功耗模式
  • 特点:电流消耗降至最低,USB总线上无活动3ms后可触发
  • 进入条件:从任何状态在总线无活动超过3ms后进入
  • 退出条件:总线恢复活动或收到复位信号

5.2 状态转换路径

上行转换(设备初始化过程)

  1. Attached → Powered:设备接通电源
  1. Powered → Default:收到总线复位信号
  1. Default → Address:收到地址分配请求
  1. Address → Configured:收到配置请求

下行转换(设备断开或重置过程)

  1. Configured → Address:设备去配置(Device Deconfigured)
  1. Address → Default:收到复位信号
  1. Default → Powered:收到复位信号
  1. Powered → Attached:设备断电(如Hub复位或去配置)

挂起状态特殊转换

  • 任何状态 → Suspended:总线无活动超过3ms
  • Suspended → 原状态:总线活动恢复

Hub相关转换

  • Attached → Powered:Hub配置完成
  • Powered → Attached:Hub复位或去配置

5.3 关键转换触发因素

转换
触发事件
设备行为
Attached → Powered
设备接通电源
初始化内部寄存器,不响应总线
Powered → Default
总线复位信号
将设备地址重置为0,准备接收控制传输 1. 进入默认工作状态 2. hub和设备协商是否可以进入高速模式
Default → Address
SET_ADDRESS请求
记录新地址,之后以新地址响应
Address → Configured
SET_CONFIGURATION请求
启用配置中定义的所有接口和端点
任何状态 → Suspended
总线无活动3ms
降低功耗至最小,保持内部状态
Suspended → 原状态
总线恢复活动
恢复正常功耗,继续之前操作

5.4 状态图实际应用

  1. 设备枚举过程:新设备从Attached逐步过渡到Configured
  1. 节能管理:通过Suspended状态实现低功耗模式
  1. 错误恢复:通过复位信号将设备恢复到Default状态
  1. 热插拔支持:设备可在任何时候断开,新设备可随时连接并初始化

6. 数据信号

上文状态图在进入复位状态,分配地址,配置设备都需要发送数据包,下面讲解数据包相关内容。
notion image

6.1 低速/全速的SOP和EOP

SOP:Start Of Packet,Hub驱动D+、D-这两条线路从Idle状态变为K状态。SOP 中的 K状态就是SYNC 信号的第1位数据
SYNC:3对KJ外加2个K。(从同步信号中解析出周期,不需要双方提前约定速率。)
EOP:End Of Packet,由数据的发送方发出EOP,数据发送方驱动D+、D-这两条线路,先设为SE0状态并维持2位时间,再设置为J状态并维持1位时间,最后D+、D-变为高阻状态,这时由线路的上下拉电阻使得总线进入Idle状态。
notion image

6.2 高速的SOP

高速的EOP比较复杂,作为软件开发人员无需掌握。
高速模式中,Ide状态为:D+、D-接地。SOP格式为:从Idle状态切换为K状态。SOP中的K状态就是SYNC信号的第1位数据。
高速模式中的SYNC格式为:KJKJKJKJ KJKJKJKJ KJKJKJKJ KJKJKJKK,即15对KJ,外加2个K。

6.3 NRZI与位填充

参考文章:USB的NRZI信号格式
NRZI:Non Return Zero Inverted Code,反向不归零编码。NRZI的编码方位为:对于数据0,波形翻转;对于数据1,波形不变。
notion image
使用NRZI,发送端可以很巧妙地把"时钟频率"告诉接收端:只要传输连续的数据0即可。在下图中,低速/全速协议中"Sync Pattern"的原始数据是"00000001",接收端从前面的7个0波形就可以算出"时钟频率"。
notion image
使用NRZI时,如果传输的数据总是"1",会导致波形维持不变。如果电平长时间维持不变,比如传输100位1时,如果接收方稍有偏差,就可能认为接收到了99位1、101位1。而USB中采用了Bit-Stuffing位填充处理,即在连续发送6个1后面会插入1个0,强制翻转发送信号,从而让接收方调整频率,同步接收。而接收方在接收时只要接收到连续的6个1后,直接将后面的0删除即可恢复数据的原貌。
NRZI数据格式如上图所示。
 
上一篇
模板设计模式:让你的代码结构更清晰
下一篇
Guide to Linux System

Comments
Loading...