USB 2.0 协议中文注解

来源:互联网 发布:手机环境监控软件 编辑:程序博客网 时间:2024/06/05 06:30

最近在做USB相关的开发,特别是USB设备的断开以及识别的过程,因此经常要查看USB 2.0的官方文档。在此将其中某些相关的章节根据自己的理解做翻译,因此加深对其的理解。翻译得不是很好,请谅解。

一、 upstream&downstream

这里写图片描述

  • Host or Hub:我们这里可以简单的理解为USB Host;
  • Function:一个USB设备有多个Function,这里可以简单的理解为一个USB设备;
  • Hub:可以理解为与Host相连接的Root Hub,它与Host连接的端口称为upstream port,与Function连接的端口称为downstream port;
  • 从Host发数据通过Hub发给Function,我们称之为downstream signaling;
  • 从Function发数据通过Hub发给Host,称之为upstream signaling。

二、7.1.5.2 High-speed Device Speed Identification P.142(高速设备速度的确认)

High-speed Device Speed Identification

高速的复位和检测机制是在低速和全速检测之后。当reset完成后,该链路必须以适当的信令模式(低速,全速或高速由上述使用规则管理(我的理解是Reset Protocol))。速度确认的bits在端口状态寄存器将会正确的报告这个模式。软件必须初始化reset以及读取端口状态寄存器以此来报告reset的完成。

高速设备起先是先是被识别为全速设备。这意味着对于有高速能力的端口来说,RPU(1.5K欧+5%)必须通过一个软件可控的switch从D+上连接至3.3V上。

当连接完成后,有高速能力的收发器在复位期间使用低层次的协议以建立高速链路。并用适当的端口状态寄存器来表明高速运行。该协议在7.1.7.5节中描述。

可以参照高速的总线状态。


三、7.1.7.3 Connect and Disconnect Signaling P.149(连接与断开的信号)

1、连接

这里写图片描述

这里写图片描述

当设备没有以低速/全速连接到host或者hub的下行端口时,下拉电阻的存在将会导致D+和D-被拉低,低于当该端口没有被hub驱动时,host或hub发送器的single-ended的最小阈值。这就在下行端口产生了一个SE0的状态。当host或者hub没有驱动数据线并且SE0的状态在下行端口存在的时间超过TDDIS(2us~2.5us),那么就标记断开了。TDDIS和TDCNN在Table 7-13中定义。

  • TDDIS(2us~2.5us)
  • VIHZ(2.7V~3.6V) 在 Table 7-7 中定义
  • VIL(0.8V)

2、断开

这里写图片描述

这里写图片描述

这里写图片描述

当hub检测到某一根数据线上的电压高于VIH,且持续时间大于TDCNN,那么就说明有设备连接。

  • VIH(2V~)
  • TDCNN(2.5us~2000us/12000us)

Hub必须在驱动SE0去复位设备之前立马通过采样总线上的状态来确定连接上来的设备的速度。

一旦确定了连接设备的速度,Table 7-2中给出在该总线段的所有信号的电平。速度检测的机制在11.8.2章节中描述。


四、7.1.7.5 Reset Signaling P.153(复位信号)

这里写图片描述

hub依靠驱动SE0(只有高速模式下有,D+和D-都为0),以此发送一个reset信号给设备。当reset完成后,设备将会进入Default状态。
可以通过USB软件系统请求在任何Hub或者Host控制器产生reset信号。reset信号必须持续驱动10ms(TDRST)。复位后,hub的端口会转换到Enabled状态。

作为额外的要求,主机控制器和USB软件系统必须确保发出到根端口驱动器的reset足够长,足以压倒下游设备的任何resume尝试。要求从根端口复位的持续时间至少为50 ms(TDRSTR)。 不要求这50 ms为连续reset信号。 然而,如果复位不连续,reset信号间的间隔必须小于3 ms(TRHRSI),每个SE0都断言持续时间必须至少为10 ms(TDRST)。


这里写图片描述

工作在低速/全速模式的设备如果检测到端口上SE0超过2.5us(TDETRST),那么就会认为是一个reset信号。

端口处于Enabled状态后,集线器会将流量传播到新的重新设置的端口。 连接到此端口的设备必须识别此总线活动,并保持进入Suspend状态。

Reset必须将设备从Suspend的状态中唤醒。

要求有高速能力的设备能够在Powered,Deault,Address,Configured或者Suspend状态下复位。它与低速/全速的复位信号兼容。这就要求hub必须成功复位任何设备(即使是USB 1.X的设备),以及设备必须支持能够被任何hub复位(即使是USB 1.X的hub)。

Note: 由于设备在复位协议期间不会处于Transmit状态,所以高速的Chirp信号电平不会引起断开检测。


这里写图片描述

有高速能力的hubs和设备的复位协议
1、hub检查以确保连接到其上面的设备不是低速设备(低速设备不被允许支持高速的操作,如果hub检测到连接到其上面的是低速设备,在复位期间不会执行以下高速检测协议)。

2、hub驱动SE0。在Reset Protocol 和 High-speed Detection Handshake的描述中,SE0的开始参照T0。


这里写图片描述

3、The device detects assertion of SE0

  • 如果设备从Suspend状态下被复位,在检测到SE0后不小于2.5us(TFILTSE0)的时间内开始高速设备检测握手。因为suspended的设备会禁用时钟晶振,当检测到SE0,那么就会重新起振。时钟必须能够及时检测Step 8描述的高速hub的chirp信号。
  • 如果设备不是从一个非suspend和全速的状态下复位的,那么在检测到SE0后不小于2.5us(TFILTSE0),不大于3.0ms(TWTRSTFS)的时间内开始高速设备检测握手。
  • 如果设备不是从一个非suspend和高速状态下复位的,那么设备必须在切换至全速之前等待不小于3.0ms,不大于3.125ms(TWTREV)的时间。依靠断开termination resistors并重新连接D+上的上拉电阻来完成切换至全速配置。在恢复到全速后,设备必须在TWTRSTHS(100us~875us)时间内采样总线上的状态,并且检查SE0(区分复位或者suspend)。如果检测到SE0(复位),那么设备开始高速设备检测握手。

这里写图片描述

高速设备检测握手
Note:在下面的握手中,要求hub和设备检测指定的最短持续时间的Chirp J和K。


这里写图片描述

4、高速设备断开D+上上拉电阻的连接,断开高速设备上的terminations disabled。在D-上驱动高速信号电流。这在总线上就产生看Chirp K(D+为0,D-为1)。当高速复位时间T0之后,设备的chirp必须持续不小于1.0ms(TUCH)并且结束时不超过7.0ms(TUCHEND)

5、hub在接收到Chirp K不超过2.5us(TFILT)之后必须检测到设备的chirp。如果hub检测不到设备的chirp,那么必须持续判断SE0直到reset结束。

6、当总线离开Chirp K状态之后的100us(TWTDCH)内,hub必须开始发送可选择的Chirp K和Chirp J的序列(3对KJ-KJ-KJ序列,此时为800mv左右)。这个序列必须在reset结束前持续100us~500us(TDCHSE0)。(这个可以保证总线保持active,防止设备进入高速Suspend的状态)。每个独立的Chirp K和Chirp J信号必须持续40us~60us(TDCHBIT)。

7、hub的chirp序列结束后,hub检测SE0直到reset的结束。Reset结束后,hub必须在不会导致数据线上的任何转换的前提下切换至高速Enabled状态。

8、设备结束chirp后,它要去检测高速hub的chirp。在最短时间内,设备要求能够接收到Chirp K-J-K-J-K-J的序列,用于检测有效的hub chirp。每个独立的Chirp K和Chirp J信号必须在小于2.5us(TFILT)时间内被检测到。

  • 如果设备检测到Chirp K-J-K-J-K-J的序列,在检测到的500us(TWTHS)时间内,要求设备断开D+上的上拉电阻(此时为400mv通信),使能高速terminations,设备进入高速Default状态。

  • 如果设备在完成它自己的chirp后的1.0ms~2.5ms(TWTFS)时间内没检测到Chirp K-J-K-J-K-J序列。那么设备要求切换至全速Default状态并等待reset的结束。


五、7.1.7.6 Suspending P.154(休眠)

这里写图片描述

所有的设备必须支持Suspend状态。设备可以从任何powered的状态进入Suspend状态。当检测到与Host连接总线上有超过3ms连续的Idle状态,那么设备开始过渡到Suspend状态。设备必须进入完全进入休眠,当总线上所有的端口有超过10ms没有活动,那么设备只能从总线上获取suspend的电流。在总线上任何的活动都会将设备从Suspend状态下唤醒。

当在Suspend状态下,设备必须连续的为D+(全速/高速设备)或D-(低速设备)上的上拉电阻提供power。目的是为了保持idle,让hub可以为设备保持正确的连接状态。


这里写图片描述

高速能力设备的额外要求
从设备运行在高速模式下的角度来看,在刚开始的时候,Reset和Suspend是不容易区分的,因此设备响应的第一部分与Reset一样。当设备在告诉模式下,检测到数据线有至少3ms的high-speed Idle状态。

在设备开始进入idle状态后,必须在3.125ms(TWTREV)内还原至全速配置。依靠断开termination resistors并重新连接D+上的上拉电阻来完成切换至全速配置。在恢复到全速下,设备必须在TWTRSTHS(100us~875us)时间内采样总线上的状态。如果是full-speed J(D+为“1”,D-为“0”)的状态,那么设备继续进入Suspend的动作。(SE0的状态标记hub发送reset,设备将进入“High-speed Detection Handshake”,在7.1.7.5节中定义)。