USB3.0中的三种Reset Events
1. PowerOn Reset
PowerOn Reset被用来代指上电复位,当一个device接入到root hub或者外置hub的时候,该device检测到Vbus信号从无效变为有效,会自动执行复位。(注意,self powered device不通过Vbus供电,但是Vbus发生转变的时候它同样会执行复位)
1.1 软件设置PowerOn Reset
那么是否一定要通过物理的attach和remove来触发PowerOn Reset呢?
当然不是,PowerOn Reset是可以通过软件控制触发的,如下图所示:
该图中右边Device直接连接到roothub,左边Device则是先连接到外置hub,外置hub再连接到roothub上。
先看右边,软件可以通过写xhci寄存器PORTSC的第9bit-PP字段,从而直接关闭掉roothub连接该设备的端口的port power,再打开port power,从而触发PowerOn Reset。这种方式相当于直接控制Vbus,将Vbus拉低再拉高。
再看左边,由于device是通过外置hub连接到roothub的,roothub不能直接关闭掉端口的power,因为这将导致外置hub也复位。此时采取的方式是通过USB协议中规定的default control endpoint(EP0)以及Control Transfer来传输hub-class request从而间接关掉或者开启该外置hub的port power。如下图所示:
通过SetFeature这个标准请求,可以在Index字段中选择Port number,从而关闭或者开启外置hub的port power。注意Control Transfer分为Setup stage\Data stage\Status stage三个阶段,图中的SetFeature请求作为Setup Stage中的Data进行传输。
1.2 PowerOn Reset后的效果
- USB interface回到初始状态,memory,register均回到默认值
- Link layer的Tx和Rx的header packet buffer, counters, timers均清零
- PowerOn Reset完成后,如果检测到正确的R**RX−D**C
- 阻则可以获取150mA的电流,否则只能获得100mA的电流
特别注意,对于self powered device而言,Vbus被设置为无效后,该device的receiver termination必须对外显示为高阻抗的状态,即ZRX*−HIG**H*−IMP*−*DC*−POS*>25K
2. Warm Reset
Warm Reset是被称之为"inband reset"的一种复位方式,是一种功能复位(inband我个人理解其实就是链路双方均在线上),效果和PowerOn Reset相似。Warm Reset的流程一般是软件命令roothub的某一port执行warm reset,该Downstream port的LTSSM状态机响应并发出warm reset LFPS握手信号,Device的Upstream port检测warm reset LFPS。完成后,链路双方都会执行复位操作并且各自的LTSSM跳转到Rx.Detect状态1 。
2.1 软件设置Warm Reset
软件可以通过写xhci的寄存器PORTSC的PR和WPR字段,将这两个bit同时设置为1从而命令硬件执行Warm Reset,如下图所示:
注意:
1.如果device连接的外置hub,那么host仍然需要通过Control Transfer传输USB的标准requset给外置hub,由外置hub的Downstream port发起warm reset
2.warm reset LFPS只能由Downstream port发起
2.2 Warm Reset后的效果
- USB device address回到0,先前的配置信息全部清除
- Link layer的Tx和Rx的header packet buffer, counters, timers均清零
- Warm Reset完成后,如果检测到正确的R**RX−D**C电阻则可以获取150mA的电流,否则只能获得100mA的电流
- LTSSM回到Rx.Detect状态,链路将重新训练
3. Hot Reset
Hot Reset也是"inband reset"的一种复位方式,也属于功能复位。LTSSM专门设置了一个Hot Reset的状态来对应完成Hot Reset。
Hot Reset在链路上使用的握手信号不再是LFPS,而是TS2 ordered set,也就是说LTSSM只能在U0或者Polling.Idle的状态下才能响应软件命令的hot reset。
3.1 软件设置Hot Reset
xhci里的PORTSC寄存器PR字段对应Hot Reset,当host仅设置PR而不设置WPR时,链路将执行Hot Reset。
- USB device address 回到0
- 如果成功了LTSSM回到U0状态,如果失败了回到Rx.Detect,或者SS.Inactive或者SS.Disable
- Port configuration values得到了保留,包括Tx和Rx header buffer的数量、链路速度等
- Recevier的equalization参数得到了保留
- Link layer的Tx和Rx的header packet buffer, counters, timers均清零
- USB specified register和memory回到默认值(这一条的specified register具体包括哪些?存疑)
注意:Hot Reset的过程中链路双方要保持RRX*−D**C*满足18-30欧姆的条件