首页 > 其他分享 >USB3.0 枚举过程

USB3.0 枚举过程

时间:2024-10-10 10:22:11浏览次数:10  
标签:USB 主机 描述符 USB3.0 枚举 链路 过程 设备

USB 3.0 枚举是指主机和设备之间通过USB协议进行初始化和通信配置的过程。在USB 3.0中,枚举过程的主要步骤包括电气连接建立、链路训练(LTSSM)、设备描述符读取等。以下是USB 3.0枚举的详细过程:

1 设备连接与电源管理

当USB设备插入USB 3.0端口时,以下步骤会开始:

供电:主机通过VBUS线为设备供电,设备检测到电压时开始工作并准备初始化。

检测拉电阻:主机通过检测USB引脚(USB 3.0使用D+/D-和SS_TX/SS_RX)上的上拉或下拉电阻,判断插入的设备是USB 2.0还是USB 3.0设备。USB 3.0设备会在其SS_RX线上保持一个特定的电压状态,以表明它是SuperSpeed设备。

2. SuperSpeed链路训练与状态管理(LTSSM)

USB 3.0使用LTSSM(Link Training and Status State Machine)来完成主机与设备之间的通信链路建立。LTSSM会经历多个状态,确保链路稳定。

  1. Rx.Detect:主机与设备互相检测差分信号对(SS_TX/SS_RX),如果检测到设备,主机进入Polling状态。

  2. Polling:主机与设备交换训练序列(TS1和TS2),并校准信号质量(如摆幅、抖动等)。当链路成功通过这些测试时,双方进入U0状态(即SuperSpeed链路激活)。

  3. U0状态:链路准备就绪,设备可以进行后续的通信。

  4. 设备复位(Reset)

在链路建立后,主机会通过发出USB总线复位信号,将设备复位到默认状态。此时设备开始准备响应主机的枚举请求。

  1. 获取设备描述符

复位之后,主机进入设备描述符读取阶段:

  1. 设置地址:主机首先通过地址0向设备发送获取设备描述符(Get Device Descriptor)请求,设备响应其基本信息,包括设备的总线类型、最大包大小等。

  2. 分配地址:主机接着会分配一个唯一的设备地址,供后续通信使用。设备接收并确认这个地址。

  3. 配置描述符读取

主机通过新的设备地址继续向设备发送请求,以获取更多信息:

  1. 获取配置描述符:主机会读取设备的配置描述符,它描述了设备的配置选项(包括接口和端点的数量及类型)。

  2. 获取接口和端点描述符:主机读取设备每个接口的详细信息,包括端点类型、方向、传输类型(如控制、批量、等时等)。

  3. 设备配置

一旦主机获取到所有的描述符,它将通过向设备发送Set Configuration请求,配置设备进入特定的工作状态。设备在此时进入完全工作的状态,主机可以使用端点进行数据传输。

  1. 正常通信

在设备被成功枚举并配置后,USB 3.0设备就准备好接受主机的各种数据传输请求。正常通信过程中可能使用批量、控制、等时或中断传输。

3. LTSSM中的其他状态

除了上面提到的关键状态,LTSSM还包含多个电源管理状态,如:

U1/U2:低功耗状态,允许链路降低能耗。设备和主机可以根据空闲时间自动进入这些状态。

U3:设备可以完全进入Suspend(挂起)模式,在这种模式下几乎不会消耗功耗,直到主机重新发出唤醒信号。

枚举中的错误检测

主机在枚举过程中还会检查各种可能的错误,包括:

超时错误:如果设备在规定时间内没有响应,主机将重新尝试或者标记枚举失败。

描述符错误:如果设备提供的描述符信息不完整或不符合规范,主机可能无法正确配置设备。

4. 总结

USB 3.0的枚举过程不仅包括基本的电气连接和设备描述符读取,还涉及到链路训练和状态管理。这个过程确保了主机和设备之间可以建立稳定的SuperSpeed链路,并配置好所有必要的通信参数。

标签:USB,主机,描述符,USB3.0,枚举,链路,过程,设备
From: https://www.cnblogs.com/linhaostudy/p/18455807

相关文章

  • SQL server 存储过程与函数
    一、SQL的存储过程:存储过程其实就是一系列SQL语句的集合体,我们可以理解为一个封装单元,这个单元可以有出入参数,也可以没有。我们举几个简单的例子:(1)无入参无出参的存储过程:createprocusp_testasupdatestusetssex='0'wheressex=''returnexecusp_test(2)无入......
  • 面向象和面向过程的区别
    银行账户管理用户:intbalance=0;voiddeposit(intamount){balance+=amount;}voidwithdraw(intamount){if(amount<=balance){balance-=amount;}}解释代码ChatGPT:这段代码是一个简单的银行账户管理示例,使用了C++或类似语言的语法。下面是对代码的逐......
  • MySql数据库---存储过程
    存储过程概念MySQL5.0版本开始支持存储过程。简单的说,存储过程就是一组SQL语句集,功能强大,可以实现一些比较复杂的逻辑功能,类似于JAVA语言中的方法,类似Python中的函数;存储过就是数据库SQL语言层面的代码封装与重用入门案例语法:delimiter自定义结束符号createpro......
  • 【网络】初识https协议加密过程
    初识https协议加密过程为什么不用http而要使用https常见的加密方式对称加密非对称加密数据摘要&&数据指纹https的工作过程探究方案一:只使用对称加密方案二:只使用非对称加密方案三:双方都使用对称加密方案四:非对称加密+对称加密中间人攻击如何确认密钥是否被修改理解数......
  • 【MySQL】视图、存储过程、触发器
    目录一、视图1.创建视图2.视图的使用3.查看视图4.删除视图5. 视图的作用二、存储过程 1.存储过程的创建2.使用存储过程3.带参数的存储过程3.1 分页4.存储过程与函数的区别5.存储过程的缺陷三、触发器 --隐式执行1.创建触发器2.查看库中所有......
  • 在K8S中,Deployment 升级过程有哪些?
    在Kubernetes(K8s)中,Deployment的升级过程是一个受控且平滑的过程,用于将应用的新版本无缝地替换旧版本。以下是Deployment升级过程的详细步骤:1.更新Deployment配置准备新版本镜像或配置:确定新版本的应用程序镜像或需要更改的配置。更新Deployment的YAML配置文件,例如更改镜像......
  • Java中枚举的学习
    枚举目录枚举枚举的定义声明枚举枚举类EnumMap类EnumSet类枚举使用场景枚举的定义Java枚举是一个特殊的类,一般表示一组常量,比如一年的4个季节,一年的12个月份,一个星期的7天,方向有东南西北等。Java枚举类使用enum关键字来定义,各个常量使用逗号,来分割。声明枚举......
  • 订单交易平台五:短信登录验证界面(从0到1的过程)
    1.短信验证界面(版本一)1.1视图函数accont.py中#先定义form类classSmsLoginForm(forms.Form):role=forms.ChoiceField(required=True,label='角色',choices=(('2','客户'),('1','管理员')),w......
  • PhpStrom2024.1永久激活及激活过程中出现的问题
    PhpStrom2024.1及激活工具下载激活工具:https://www.alipan.com/s/Aj5EEMxgLZCPhpStrom:https://www.alipan.com/s/cx69krtGXaw PhpStrom安装与激活1、下载并根据提示安装PhpStrom2、下载激活工具并将文件夹放在常用位置(文件夹名称与文件夹路径不可有中文)3、打开scripts文件......
  • lightdb pllua存储过程实测
    根据对pl/lua的相关介绍和一些说明如http://www.pgsql.tech/project_305_10000096,其性能相比plpgsql和plsql快不少,那实际到底如何呢?下面拿demo和一些实际的来对比下。1、lua安装。从https://www.lua.org/download.html下载最新版。因为pllua需要依赖lua.so动态库,所以不......