USB2.0设备接入断开检测及速度识别

本文旨在结合USB协议、物理层实现、相关波形、说明USB设备接入断开检测及速度识别。

目录

图片

1. 物理层结构

图片

图片

了解物理层结构更加有利于分析连接断开测试和速度识别过程,正常一个USB2.0(向下兼容1.X)。

2. 全速低速实现

图片

在USB主机和USB设备通信中,主机软件必须首先检测其存在及识别的速度情况,之后主机软件可以发起通信以配置设备以进行正常操作。USB集线器监控每个端口可以检测连接或断开事件。上图展示了没有设备连接时的USB端口接口。D+和D-线上的下拉电阻确保两个数据线都接近地电平。当没有设备连接时,单端接收器在两个数据线上检测到电平低。USB设备必须在其D+或D-线上(根据其速度)包含一个上拉电阻,以启用连接检测。

图片

物理接口中主要的组成部分,全速设备和低速设备的信号接口在很大程度上是相似的,但也存在一些重要的差异,上图展示了集线器和连接的全速设备的信号接口。信号接口的主要元素包括(后面高速设备实现章节会介绍高速接口)

• 差分驱动器:用于驱动差分信号,即D+和D-线上的信号,以提高抗干扰能力。

• 差分接收器:用于接收差分信号,并将其转换为数字信号,供主机软件处理。

• 单端接收器:用于检测特定的总线状态,如设备重置。

• 集线器数据线上的下拉电阻(15KΩ):用于确保在没有设备连接时,数据线处于正确的逻辑状态。

• 全速设备D+上的上拉电阻(1.5KΩ):用于检测设备连接。

图片

上图描述了在设备连接过程中D+和D-状态的变化。此过程假定在全速设备连接到集线器端口之前,先给端口上电(这种情况通常发生在系统开机时)。端口的初始状态是未上电的,从软件给端口加电开始。存在几个延迟,软件必须知道这些延迟,以免在设备发出连接信号和集线器检测到连接事件并设置连接状态之前检查集线器状态。这些时间事件包括:

• ∆t1 —— 集线器一旦发出SetPortPower命令,就需要一定时间才能为端口提供有效电源,这个值通过集线器的集线器类描述符报告。

• ∆t2 —— 从端口有效电源到D+(D-)在集线器端口接收器上拉至VIH以上的延迟。

• ∆t3 —— 此间隔确保信号被去抖动,软件强制执行此去抖动间隔,之后软件可以安全地检查集线器状态,以确定是否有设备连接到刚刚上电的端口。注意,此参数是针对热插拔定义的。在这种情况下,当设备插入集线器端口时,电源引脚先接触,数据线最后连接。由于插头插入时连接器相互刮擦,数据线会断开和接触,从而导致信号跳动。

• ∆t4 —— 在D+(D-)稳定后(在∆t3期间),总线进入空闲状态,直到∆t3结束。在此期间,设备在3ms总线空闲后进入挂起状态。

• ∆t5 —— 软件向集线器发出PortReset命令,集线器通过将D+和D-拉低超过10ms且小于20ms来发出RESET信号。这迫使设备进入默认状态。

• ∆t6 —— 此间隔称为Reset Recovery时间,集线器在重置后准备好访问时设置状态。在此间隔期间,设备将进入挂起状态。

2.1 全速设备连接检测

主机端

图片

上图展示了当一个全速(FS)设备连接到集线器端口时的情况。当FS设备附着在端口上时,电流流经由集线器的下拉电阻和设备在D+上的上拉电阻形成的电压分压器。由于下拉电阻值为15KΩ,而设备的上拉电阻值为1.5KΩ,D+将上升到大约Vcc的90%。当集线器检测到D+接近Vcc而另一个保持接近地面时,它知道已经连接了一个全速设备。

图片

上图展示了当一个全速(FS)设备连接时信号的行为,当D+上升至高于VIH(max)持续2.5微秒或更长,但不超过2毫秒(TDCNN)时,集线器识别到设备已连接。在检测到设备连接后,集线器在其端口状态寄存器中设置相应的状态位,以指示连接的设备以全速运行。由于集线器检测到D+的上拉,它知道设备以全速运行。集线器必须将端口接口配置为全速设备信号传输。主机软件定期轮询每个集线器,以检查包括设备连接在内的端口事件。软件然后重置设备,并执行设备配置(枚举)。

全速设备接入波形。

图片

全速设备断开波形。

图片

设备端

图片

正常Device USB PHY会有一个用于检查Vbus有效的引脚,来检测到Vbus有效确认有连接,如果是没有Vbus检测的,默认挂载上拉电阻表示连接,

注意:全速低速高速在设备端检测接入原理是类似。

2.2 低速设备连接

主机端

图片

低速设备的设计者在D-线上放置一个上拉电阻,而不是全速设备在D+线上使用的上拉电阻。上图展示了低速设备连接到集线器端口的情况。

图片

与全速设备一样,信号状态和检测定时基于TDCNN定时参数,如上图所示。当集线器检测到低速设备连接时,它在端口状态寄存器中设置连接和LS位,并配置接口以进行低速操作,以指示端口连接了一个低速设备。

低速设备接入断开波形。

图片

2.3 全速低速设备断开连接

主机端

图片

USB设备从USB主机集线器移除后,USB主机端的D+或D-由于主机端下拉15kQ电阻的存在将会变为0V。USB 2.0协议规定,当主机端D+或D-的电压小于0.8V,并持续 Tpps(最小值为2us)时间长度,USB主机就认为USB设备已经从USB主机的端口上断开。低速设备断开时,主机端的D+、D-及 Vbus变化与全速设备断开时是类似的,差别在于低速设备的D-会降为0V,D+一直保持低电平。集线器还会监视当前连接的每个端口,以检测设备可能被移除的情况。当设备被移除时,集线器将观察到的过渡情况如上图所示。当集线器观察到单端零(即D+和D-低于VIL)持续TDDIS定时参数指定的时间时,它会检测到断开连接事件。在检测到断开连接事件后,集线器将设置状态位以指示该事件。

设备端

设备端大多是通过VBus是否有效结合USB控制器检测来实现。如果是总线供电的设备,断开后就无法工作了,所以不需要检测了。

注意:全速低速高速设备端断开都是类似。

3. 高速设备实现

图片

图片

3.1 速度检测

高速集线器端口必须能够检测到是否有低速、全速或高速设备连接到该端口。当高速设备首次连接到高速端口时,它们会表现为全速设备。然后,高速端口和高速设备必须进行握手以识别高速设备。如果握手失败,高速设备将默认为全速操作。实现称为高速握手。

3.2 设备初始速度检测

全速和高速设备在D+线上都有一个1.5KΩ的上拉电阻。当设备连接时,电源被施加到电缆、设备以及D+上的上拉电阻,导致集线器接收器处的电压上升到VIH以上。然后软件轮询集线器,检测到全速设备的接入。

3.3 高速握手

图片

在软件检测到全速设备连接后,它会通过ResetPort命令向集线器发出重置信号,这会导致集线器驱动SE0状态(D+和D-都低)超过10毫秒。如果连接了一个具备高速能力的设备,那么chirp序列就开始了。上图描述了chirp序列。chirp序列的每个步骤在以下列举的列表中详细说明:

  1. 集线器驱动重置信号,这是chirp序列的T0时刻。

  2. 高速设备检测到重置信号并发出Chirp K信号。发出Chirp K信号是通过高速电流驱动器向D-线注入电流来实现的。这个Chirp K信号必须保持超过1毫秒,且在T0后不超过7毫秒。

  3. 在驱动全速重置的同时,集线器的高速接收器被激活并等待检测Chirp K信号。高速集线器必须在Chirp K信号声明后的2.5微秒内检测到一个有效的Chirp K。注意,如果集线器没有检测到Chirp K,它会完成全速重置并保持在全速信号模式下。

  4. 设备的Chirp K信号结束后的100微秒内,集线器必须返回一个交替的Chirp K和Chirp J序列。这个序列具有以下特点:

    • 在此序列期间不允许总线空闲。

    • 必须在500微秒内结束,且不得晚于重置(reset)结束前100微秒。

    • 每个Chirp K和J的持续时间大于40微秒且小于60微秒。

    • Chirp序列结束后继续重置。

  5. 一旦重置时间结束,集线器继续通过其全速驱动器驱动SE0状态。

  6. 设备检测到六个chirp(3个KJ对)后,必须在500微秒内过渡到高速操作。这个过渡需要:

    • 从D+断开上拉电阻。

    • 启用高速终端电阻(high-speed termination)。

    • 进入高速默认状态。

    • 执行 上面步骤后,USB 信号线上看到的现象就发生变化了,Hub 发送出来的 Chirp KJ 序列幅值降到了原先的一半,400mV。这是因为设备端挂载新的终端电阻后,配上原先 hub 端的终端电阻,并联后的阻抗是 22.5 欧姆。400mV 就是由 17.78mA*22.5Ohm 得来。以后高速操作的信号幅值就是 400mV而不像全速/低速那样的 3V。

至此,高速设备与 USB2.0 Hub 握手完毕,进行后续的 480Mbps 高速信号通信。

高速设备接入波形

图片

图片

3.4 检测高速设备的移除

主机端

图片

高速终端电阻在没有任何差分信号发生时保持D+和D-下拉。当设备断开连接时,线路上不会检测到显著的差异,因为45Ω的终止电阻仍然存在于集线器接口,从而保持线路处于空闲状态。用于检测高速设备已移除的方法利用了D+和D-线另一端缺失的终止电阻。当设备被移除时,高速数据包会继续从设备先前连接的端口传输。当入射波到达没有终止电阻的线路末端时,会产生一个大的反射波,这个反射波会向集线器接口方向传播,导致原始信号幅值几乎加倍。这对集线器接口没有影响,因为当幅值加倍发生时,其收发器处于发送模式。集线器利用这种现象来检测设备是否不再连接到端口。集线器在每个微SOF数据包结束时检查高速设备的移除,如上图所示。

图片

下游面向的集线器端口包括一个断开接收器,用于监视比正常400毫伏显著大的差分信号。上图展示了集线器接口和断开包络检测器。当差分电压达到625毫伏时,接收器会产生一个输出。这应该只会在电缆一端由于设备被移除而缺失终止电阻时发生。高速EOP的第一个比特总是强制位流中的转换。在下一个数据包开始之前,不会发生额外的转换。EOP是一个方便的机制,用于检测设备移除,这是因为它在开始时具有可预测的转换,并且直到下一个数据包开始之前不期望有进一步的活动。这个转换导致入射波,其反射将大约使入射波的电压加倍,进而被断开包络检测器检测到。上图还说明了设备可能在外设处断开连接。这是重要的,因为从发射器穿过电缆并返回的可能传播延迟。由于电缆的传播延迟在两个方向上最大为26纳秒,加上集线器和连接器内的传播延迟,接收器可能不会立即看到由于附加反射导致的幅度增加。微SOF的EOP被延长到40比特的持续时间,以确保断开包络检测器在EOP结束时已经观察到反射。对于高速SOF,传输的EOP定界符需要是5个没有位填充的NRZ字节,由01111111 11111111 11111111 11111111 11111111组成。因此,如果EOP字段之前最后一个位是J,这将导致线上有40个K,在此之后线路必须返回到高速空闲状态。这个额外的EOP长度对接收器没有意义,它用于断开连接检测。

注意:一般USB2 PHY都会提供相关Tuning接口改变这个检测625mv的判断阈值。

设备端

设备端大多是通过VBus是否有效结合USB控制器检测来实现。如果是总线供电的设备,断开后就无法工作了,所以不需要检测了。

小结

本文主要描述了USB2.0是如何实现设备的接入和断开检测,及如何确认速度类型,如果需要了解超速设备的接入断开检测可以参考USB3 Link Training文章。

本文参考:

《Universal Serial Bus Specification Revision 2.0》

USBSystemArchitecture

《微控制器USB的信号和协议实现》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值