首页 > 其他分享 >【USB3.0协议学习】Topic3·三种Reset Events分析

【USB3.0协议学习】Topic3·三种Reset Events分析

时间:2024-09-16 10:01:56浏览次数:7  
标签:Reset hub Topic3 外置 USB3.0 Hot PowerOn port

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后的效果

  1. USB interface回到初始状态,memory,register均回到默认值
  2. Link layer的Tx和Rx的header packet buffer, counters, timers均清零
  3. PowerOn Reset完成后,如果检测到正确的R**RXD**C
  4. 阻则可以获取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后的效果

  1. USB device address回到0,先前的配置信息全部清除
  2. Link layer的Tx和Rx的header packet buffer, counters, timers均清零
  3. Warm Reset完成后,如果检测到正确的R**RXD**C电阻则可以获取150mA的电流,否则只能获得100mA的电流
  4. 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。

  1. USB device address 回到0
  2. 如果成功了LTSSM回到U0状态,如果失败了回到Rx.Detect,或者SS.Inactive或者SS.Disable
  3. Port configuration values得到了保留,包括Tx和Rx header buffer的数量、链路速度等
  4. Recevier的equalization参数得到了保留
  5. Link layer的Tx和Rx的header packet buffer, counters, timers均清零
  6. USB specified register和memory回到默认值(这一条的specified register具体包括哪些?存疑)

注意:Hot Reset的过程中链路双方要保持RRX*−D**C*满足18-30欧姆的条件

标签:Reset,hub,Topic3,外置,USB3.0,Hot,PowerOn,port
From: https://www.cnblogs.com/linhaostudy/p/18416034

相关文章

  • Git缓冲区理解:`index`,`add`和`reset`,`staged`和`unstaged`
    在git里面,有一个叫index的区域,你把东西加到那里叫add,把东西再从哪里撤回来叫reset;已经在里面的我们形容它是staged,还没有加进去的我们形容它是unstaged。其实index区就是一个纯粹的缓冲区,也叫stagingarea,是正式提交之前给我们的一个缓冲,还有犹豫的余地。因为一旦正式commit提交......
  • 开发nodejs RESETful api 创建项目流程
    开发nodejsRESETfulapi创建项目流程1.安装vm-windows、node.js和npm安装Node.js时,建议使用版本管理器,因为版本变更速度非常快。你可能需要根据所使用的不同项目的需要在多个Node.js版本之间进行切换。Node版本管理器(通常称为nvm)是安装多个版本的Node.js的最......
  • 【USB3.0协议学习】Topic1·USB3.0Hub的一些机制
    一、USB3.0Hub的单播(非广播)机制Hub通过解析下行packetheader中的RouteString字段识别packet要传递的终点,其中4'b0000代表hub本身,4'b0001-4'b1111分别代表hub的各downstreamport,由于USB3.0规定HostController最多级联5级hub,所以每个packetheader中的RouteString字段共有4x5......
  • USB总线-Linux内核USB3.0 Hub驱动分析(十四)
    1.概述USBHub提供了连接USB主机和USB设备的电气接口。USBHub拥有一个上行口,至少一个下行口,上行口连接上一级的Hub的下行口或者USB主机,连接主机的为RootHub,下行口连接下一级Hub的上行口或者USB设备。经过Hub的扩展,一个USB主机可以和多个USB设备通信。USBHub有如下特性:良好的......
  • USB总线-Linux内核USB3.0设备控制器中断处理程序分析(九)
    1.概述USB设备枚举、请求处理、数据交互都涉及USB设备控制器中断。当有事件发生时,USB设备控制器首先将事件信息通过DMA写入到事件缓冲区中,然后向CPU发出中断,随后CPU调用中断处理函数开始处理中断事件。2.事件dwc3USB设备控制器事件使用dwc3_event数据结构描述,由4个字节组成。......
  • USB总线-Linux内核USB3.0主机控制器驱动框架分析(十二)
    1.概述如下图所示,Linux内核中USB主机体系结构由五部分组成,分别为ApplicationSoftware、USBClassDriver、USBCore((USBDriver)、USBHostControllerDriver、USBHostController。应用程序处于用户空间,通过系统调用访问ClassDriver,从而间接的访问USB设备,如主机端的应用程......
  • kex_exchange_identification: read: Connection reset
    问题截图解决手贱把这个禁用了(打开就行)其它参考https://stackoverflow.com/questions/69394001/how-can-i-fix-kex-exchange-identification-read-connection-reset-by-peer......
  • requests.exceptions.ConnectionError: (‘Connection aborted .’, ConnectionResetE
    requests.exceptions.ConnectionError:(‘Connectionaborted.’,ConnectionResetError(10054,"远程主机强迫关闭了一个现有的连接。',None,1656,None)欢迎来到英杰社区https://bbs.csdn.net/topics/617804998        欢迎来到我的主页,我是博......
  • 【QNX+Android虚拟化方案】121 - Android 侧 USB3.0 插拔过程
    【QNX+Android虚拟化方案】121-Android侧USB3.0插拔过程基于原生纯净代码,自学总结纯技术分享,不会也不敢涉项目、不泄密、不传播代码文档!!!本文禁止转载分享!!!汇总链接:《【QNX+Android虚拟化方案】00-系列文章链接汇总》本文链接:《【QNX+Android虚拟化方案】1......
  • 忘记PbootCMS后台用户账号密码时进行重置resetpw.php
    <?php/***@copyright(C)2016-2099HnaoyunInc.*@licenseThisisnotafreeware,useissubjecttolicenseterms*@authorXingMeng*@[email protected]*@date2018年11月17日*重置PbootCMS用户密码*///设置字符集编码、IE文档模式header('Co......