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欧姆的条件

【USB3.0协议学习】Topic3·三种Reset Events分析的更多相关文章

  1. RedHat 7.0及CentOS 7.0禁止Ping的三种方法

    作者:荒原之梦 原文链接:http://zhaokaifeng.com/?p=538 前言: "Ping"属于ICMP协议(即"Internet控制报文协议") ...

  2. Selenium学习之==>三种等待方式

    在UI自动化测试中,必然会遇到环境不稳定,网络慢的情况,这时如果你不做任何处理的话,代码会由于没有找到元素,而报错.这时我们就要用到wait(等待),而在Selenium中,我们可以用到一共三种等待, ...

  3. python学习Day8 三种字符类型、文件操作

    复习 类型转换 1.数字类型:int() | bool() | float() 2.str与int:int('10') | int('-10') | int('0') | float('-.5') | ...

  4. [ 原创 ]学习笔记-三种向ListView中填充简单文本的方法

    Android 中ListView是很重要的一块内容 掌握ListView的基本用法 对学习安卓起着举足轻重的作用 今天就介绍一下三种向ListView 填充简单文本的方法 填充其他数据类型的用法之后 ...

  5. MyEclipse10.0安装SVN的三种方法

    最简单的一种: 首先下载zip包(svn:http://subclipse.tigris.org) 1.直接在MyEclipse10安装目录下的dropins文件夹下新建一个svn文件夹 2.把解压出 ...

  6. 蓝牙 BLE 协议学习: 3种蓝牙架构实现方案(蓝牙协议栈方案)

    导言 不同的蓝牙架构可以用在不同的场景中.从而协议帧的架构方案也会不同. 转载自:<三种蓝牙架构实现方案(蓝牙协议栈方案)> 蓝牙架构实现方案有哪几种?我们一般把整个蓝牙实现方案叫做蓝牙协 ...

  7. Spark学习笔记-三种属性配置详细说明【转】

    相关资料:Spark属性配置  http://www.cnblogs.com/chengxin1982/p/4023111.html 本文出处:转载自过往记忆(http://www.iteblog.c ...

  8. Scala学习2 ———— 三种方式完成HelloWorld程序

    三种方式完成HelloWorld程序 分别采用在REPL,命令行(scala脚本)和Eclipse下运行hello world. 一.Scala REPL. 按照第一篇在windows下安装好scal ...

  9. (六)C#中判断空字符串的三种方法性能分析

    三种方法分别是: string a=""; 1.if(a=="") 2.if(a==string.Empty) 3.if(a.Length==0) 三种方法是等 ...

  10. Apache2 三种MPM对比分析

    就最新版本的Web服务器Apache(版本是Apache 2.4.10,发布于2014年7月21日)来说,一共有三种稳定的MPM(Multi-Processing Module,多进程处理模块)模式. ...

随机推荐

  1. Nuxt.js 环境变量配置与使用

    title: Nuxt.js 环境变量配置与使用 date: 2024/7/25 updated: 2024/7/25 author: cmdragon excerpt: 摘要:"该文探讨了 ...

  2. 【SQL】 去掉最后一段,只保留前段

    需求描述: 例如给出这样一个地址或者其他字符: 10.11.12.13 192.168.177.209101.102.103.104.105 ... 要求只保留前面的部分,去掉最后一部分 10.11. ...

  3. 【C3】04 工作原理

    我们已经知道了CSS是做什么的以及怎么写简单的样式这样基础的CSS, 接下来我将了解到浏览器如何获取CSS.HTML和将他们加载成网页. 前置知识: 基础计算机知识.基本软件安装.简单文件知识.HTM ...

  4. 【IDEA】回退操作记录

    参考自: https://www.cnblogs.com/zeussbook/p/9207970.html 找不到代码错误,又有很多已经写好的东西,不好全部删除 只要能记得确切的操作时间就行了 可以翻 ...

  5. 鹏程实验室,启智平台,openI平台,积分兑换新标准

    2024-02-13 11:12:21 星期二 地址: https://openi.pcl.ac.cn/reward/point/rule

  6. 为python安装扩展模块时报错——error: invalid command 'bdist_wheel'

    具体过程: devil@hp:~/lab$ ./bazel-bin/python/pip_package/build_pip_package /tmp/dmlab_pkg2022年 10月 03日 星 ...

  7. java多线程之-不可变final

    1.背景 final这个关键字相信大家不陌生吧... 看看下面的案例 2.时间格式化之线程不安全SimpleDateFormat package com.ldp.demo08final; import ...

  8. java中sleep与 yield 区别

    1.背景 在多线程的使用中你会看到这个两个方法sleep()与yield()这两方法有什么作用呢? 请看下面案例演示 2.测试 package com.ldp.demo01; import com.c ...

  9. 8月5日CSP-S模拟赛赛后总结

    8月5日CSP-S模拟赛赛后总结 \[8月5日 \ \ CSP-S模拟赛 \ \ 赛后总结 \\ 2024年8月5日 \\ by \ \ \ uhw177po \] 一.做题情况 第一题比赛 \(10 ...

  10. FreeSWITCH对接http协议的tts服务

    操作系统 :CentOS 7.6_x64 FreeSWITCH版本 :1.10.9   FreeSWITCH里面有个mod_tts_commandline模块,可以用来对接http协议的tts服务,今 ...