USB2.0主机设备检测过程以及信号分析

news2024/11/17 3:29:36

一,USB协议发展

USB接口自1994年推出以来,经过30年的发展,从USB1.0发展到了现在的USB4.0,传输速率也从最开始的1.5Mbps,大幅提高到了最新的40Gbps。

USB协议按照速度等级和连接方式分可分为7个版本,但是从USB3.0开始,USB-IF对之前的接口标准重命名了,导致协议名称混乱,市场中的习惯叫法和官方命名不一样,现在USB-IF正式的主版本号只有USB 2.0、USB 3.2和USB4这3个。
在这里插入图片描述
从上表可知,USB2.0根据速度分类,可分为低速(Low Speed)、全速(Full Speed)和高速(High Speed)3个版本。

二,USB2.0速度识别
根据规范,全速(Full Speed)和低速(Low Speed)很好区分,因为在设备端有一个1.5k的上拉电阻,当设备插入hub或上电(固定线缆的USB设备)时,有上拉电阻的那根数据线就会被拉高,hub根据D+/D-上的电平判断所挂载的是全速设备还是低速设备。如下两图:

2.1 USB低速设备连接器的D-接有1.5K的上拉电阻
在这里插入图片描述

2.2 USB高速设备连接器的D+接有1.5K的上拉电阻。
在这里插入图片描述
2.3 高速识别

USB全速/低速识别相当简单,但USB2.0,USB1.x就一对数据线,不能像全速/低速那样仅依靠数据线上拉电阻位置就能识别USB第三种速度:高速。因此对于高速设备的识别就显得稍微复杂些。

高速设备初始是以一个全速设备的身份出现的,即和全速设备一样,D+线上有一个1.5k的上拉电阻。USB2.0的hub把它当作一个全速设备,之后,hub和设备通过一系列握手信号确认双方的身份。在这里对速度的检测是双向的,比如高速的hub需要检测所挂上来的设备是高速、全速还是低速,高速的设备需要检测所连上的hub是USB2.0的还是1.x的,如果是前者,就进行一系列动作切到高速模式工作,如果是后者,就以全速模式工作。

下图展示了一个高速设备连到USB2.0 hub上的情形:
  在这里插入图片描述

hub检测到有设备插入/上电时,向主机通报,主机发送Set_Port_Feature请求让hub复位新插入的设备。设备复位操作是hub通过驱动数据线到复位状态SE0(Single-ended 0,即D+和D-全为低电平),并持续至少10ms。

高速设备看到复位信号后,通过内部的电流源向D-线持续灌大小为17.78mA电流。因为此时高速设备的1.5k上拉电阻还未撤销,在hub端,全速/低速驱动器形成一个阻抗为45欧姆(Ohm)的终端电阻,2电阻并联后仍是45欧姆左右的阻抗,所以在hub端看到一个约800mV的电压(45欧姆*17.78mA),这就是Chirp K信号。Chirp K信号的持续时间是1ms~7ms。

在hub端,虽然下达了复位信号,并一直驱动着SE0,但USB2.0的高速接收器一直在检测Chirp K信号,如果没有Chirp K信号看到,就继续复位操作,直到复位结束,之后就在全速模式下操作。如果只是一个全速的hub,不支持高速操作,那么该hub不理会设备发送的Chirp K信号,之后设备也不会切换到高速模式。

设备发送的Chirp K信号结束后100us内,hub必须开始回复一连串的KJKJKJ…序列,向设备表明这是一个USB2.0的hub。这里的KJ序列是连续的,中间不能间断,而且每个K或J的持续时间在40us60us之间。KJ序列停止后的100500us内结束复位操作。hub发送Chirp KJ序列的方式和设备一样,通过电流源向差分数据线交替灌17.78mA的电流实现。

再回到设备端来。设备检测到6个hub发出的Chirp 信号后(3对KJ序列),它必须在500us内切换到高速模式。切换动作有:

  1. 断开1.5k的上拉电阻。

  2. 连接D+/D-上的高速终端电阻(high-speed termination),实际上就是全速/低速差分驱动器。

  3. 进入默认的高速状态。

执行1,2两步后,USB信号线上看到的现象就发生变化了:hub发送出来的Chirp KJ序列幅值降到了原先的一半,400mV。这是因为设备端挂载新的终端电阻后,配上原先hub端的终端电阻,并联后的阻抗是22.5欧姆。400mV就是由17.78mA*22.5Ohm得来。以后高速操作的信号幅值就是400mV而不像全速/低速那样的3V。

至此,高速设备与USB2.0 hub握手完毕,进行后续的480Mbps高速信号通信。

2.4 信号电平

在分析USB2.0设备的检测过程之前,需要先了解一下低速、全速、高速设备信号电平及电气参数。

低速、全速设备使用电压信号,总线状态对应的电平范围如下表所示。
在这里插入图片描述
2.5 低速设备/全速设备的识别

低速设备/全速设备的识别发生在上电过程中,即Attached–>Powered转换的过程,在usb设备进入Powered状态后就已经确定好速率,速率的确定依赖于Rpu上拉电阻。

在下游设备未插入的情况下,总线受Rpd下拉电阻的影响均处于被拉低的状态,将总线此时的状态称为Single-ended 0 (SE0),当设备插入后Rpu被供电,此时若Rpd上拉电阻连接D+,D+将被拉高,此时总线上的状态被称为Differential “1”;此时若Rpd上拉电阻连接D-,D-将被拉高,此时总线上的状态被称为Differential “0”

低速设备的IDLE信号,J信号,都是使用Differential “0”来表示的,全速设备的IDLE信号,J信号,都是使用Differential “1”来表示的,将总线idle信号(J信号)维持超过2ms的状态称为connect信号,下游设备产生connect信号之后便进入Powered状态,此时设备支持的速率已经确定;即D+被拉高的时间超过2ms,便认为设备进入Powered模式且处于全速模式,若D-被拉高的时间超过2ms,便认为设备进入Powered模式且处于低速模式

简单来说,即usb下游设备在插入usb上游设备后,上拉电阻Rpu将D+/D-持续拉高超过2ms(协议中将这一行为称为connect信号),设备便进入Powered状态(进入Powered状态,设备便已经被识别为低速设备/全速设备),下图是上述描述的简化图:
在这里插入图片描述
2.6 低速设备/全速设备的断开

针对上游设备的信号,上游设备检测到SE0信号维持超过2.5us的信号称为disconnect信号,上游低速/全速设备检测到disconnect信号便认为设备已经断开,下游设备故障或被拔出后,在失去了上拉电阻Rpu后,D+/D-会全部变为低(SE0信号),SE0信号维持超过2.5us,上游设备便认为下游低速/全速设备已经断开。

2.7 高速设备的识别

高速设备的识别发生在Powered–>Default的过程,Powered–>Default的转化首先由上游设备发送一个reset信号(SE0信号维持超过10ms),之后的行为分为两种情况:

    下游设备此时被识别为低速设备,在接受到上游设备发送的reset信号后直接进入Default状态,等待下一阶段的地址设置,此时不会去识别设备是否支持高速模式。
    设备此时被识别为全速设备,此时由上游设备发送reset信号,之后双方协商是否支持高速模式,待速率协商完成后进入Default状态,等待进行地址设置,Default状态速率已经识别完成,但还没有进行地址分配,此时使用0地址进行下一步通信。只有进入到Default状态后设备才有了使用packet通信的能力。

注:下游设备处于Default状态之后的状态,上游设备也可通过发送reset信号重新使设备进入Default状态,然后按照usb状态切换图重新驱动设备。

下面描述高速设备的识别过程:

注:前提是usb已经被识别为全速设备且处于Powered状态。

    上游设备在下游设备进入Powered状态后便会主动发送reset信号,(SE0信号维持超过10ms)。
    事实上在此时发送reset信号及之后进入高速模式的通信中,Rpu电阻便会一直处于断开状态,高速模式已经不需要Rpu电阻了,而是依赖另外一种电阻**Rs(45Ω),Rs(45Ω)在主从设备上都存在,D+ D-各一个,在之后的高速模式通信 高速模式断开检测 Rpu电阻都处于断开状态,电气层信号依赖Rs(45Ω),**但在高速模式的识别过程中,Rpu上拉电阻还是处于工作状态的。
    下游设备在检测到上游设备发送的reset信号后,若下游设备支持高速模式则发出Chirp K 信号,上游设备在接受到Chirp K信号后,上游设备便知道下游设备支持高速模式,若上游设备也支持高速模式,就发出连续的Chirp K Chirp J信号,用来通知下游设备Hub也能支持高速模式。之后上游设备继续维持SE0信号直到10ms,断开Rpu电阻,便进入Default状态(高速模式),若速率协商阶段上下游设备中有任何一方不支持高速模式,便终止速率协商进入Default状态(全速模式)

2.8 高速设备的断开

高速设备 断开,即Rs(45Ω)电阻也会断开,此时电气层信号会发生变化,高速设备基于此判断设备的断开。

三,检测过程

Hub识别设备的过程,同时也是检测设备速度的过程,具体流程如下:

3.1 由于低速设备D-接有1.5K上拉电阻,当设备接入Hub时,Hub的D-会被拉高,此时Hub会检测到有低速设备接入,而全速和高速设备D+接有1.5K上拉电阻,当USB设备接入USB Hub时,Hub的D+会被拉高,此时Hub会检测到有全速或高速设备接入。D-或D+拉高最少为2V。

3.2 当D-或D+被拉高后,主机识别到有设备接入,会将D+和D-拉到低于0.3V,使总线处于SE0状态,并持续2.5us以上,将设备复位。此时Hub已经能区分低速和全速/高速设备。

3.3 若是高速设备,则会向D-灌入电流,在总线上形成Chirp K状态,至少持续1毫秒,但不超过7毫秒。Hub检测到Chirp K信号持续的时间至少为2.5微秒。若Hub没检测到Chirp K信号或Hub只支持低速或全速,则会一直保持SE0状态,直到复位完成。

3.4 若Hub支持高速,则在总线退出Chirp K状态的100微秒内,Hub开始发送交替的Chirp K和Chirp J序列(K-J-K-J-K-J),Chirp K和Chirp J状态必须连续,无空闲状态。Chirp K和Chirp J序列持续时间范围为100微秒-500微秒。每个Chirp K和Chirp J持续的时间不小于40微秒,不超过60微秒(Hub发送交替的Chirp K和Chirp J序列的目的是使总线保持活跃状态,避免设备进入Suspend状态)。

3.5 如果设备检测到了Hub发送的Chirp K和Chirp J序列,设备将在500微秒内断开D+的上拉电阻,使能高速功能并进入高速默认状态。如果设备在1毫秒-2.5毫秒内没检测到Hub发送的Chirp K和Chirp J序列,设备将进入全速状态并等待复位完成。

上述流程对应于Linux里面的操作如下:
3.6. 当Hub某个port(设备接入的port)的D+或D-被拉高时,port检测到设备接入,会设置USB_PORT_STAT_C_CONNECTION状态,然后触发xHCI中断,最后系统会调用Hub的中断函数轮询Hub的port状态,找到有设备接入的port。

3.7. 主机向有设备接入的port发送USB_PORT_FEAT_RESET命令,此时port会拉低对应的总线,使其进入SE0状态,发起复位流程。

3.8. 此使Hub会和设备进行一系列的信号交互,此过程由硬件完成,无需软件参与。当复位完成后,主机使用HUB_PORT_STATUS命令获取设备连接状态、速度等信息,然后读取设备的描述符走枚举流程。

下图是使用示波器抓到的USB2.0设备检测过程的波形图。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2171589.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

docker -私有镜像仓库 - harbor安装

文章目录 1、镜像仓库简介2、Harbor简介3、下载与安装3.1、下载3.2、安装3.2.1、上传harbor-offline-installer-v2.8.2.tgz到虚拟机中解压并修改配置文件3.2.2、解压tgz包3.2.3、切换到解压缩后的目录下3.2.4、准备配置文件3.2.5、修改配置文件 4、启动Harbor5、启动关闭命令6、…

为什么这款智能在线派单软件成为行业首选?

智能在线派单软件通过自动化任务分配等提升效率,ZohoDesk因其全方位服务管理、智能分配、定制性强、数据分析等功能,成为企业优选。实例涵盖物流、家政、维修、医疗等行业,提高效率和客户满意度。 一、智能在线派单软件有什么功能 在深入探讨…

【Java】包装类【主线学习笔记】

文章目录 前言包装类基本数据类型与包装类之间的转换基本数据类型转换为包装类可以通过以下几种方式:包装类转换为基本数据类型可以通过以下几种方式:初始化值不同与String之间的转换 前言 Java是一门功能强大且广泛应用的编程语言,具有跨平台…

带你重新深入了解STM32单片机

目录 一. 前言 二. 片上资源外设 三. 单片机命名规则 四. STM32的系统结构 五. STM32F103C8T6的引脚定义 六. 启动配置 一. 前言 本篇文章主要讲述对STM32单片机的介绍,包括片上资源和外设,STM32产品系列,内存存储器容量以及STM32的系统…

Java每日面试题(JVM)(day15)

目录 Java对象内存布局markWord 数据结构JDK1.8 JVM 内存结构JDK1.8堆内存结构GC垃圾回收如何发现垃圾如何回收垃圾 JVM调优参数 Java对象内存布局 markWord 数据结构 JDK1.8 JVM 内存结构 程序计数器: 线程私有,记录代码执行的位置. Java虚拟机栈: 线程私有&#…

服务器操作系统【sar 命令】

sar 安装、语法参数说明以及示例 文章目录 功能概述一、功能介绍1.安装配置2. 配置3. 启动二、sar 语法及参数说明三、示例及释义1.汇报 io 传输速率信息2.内存分页信息3.块设备状态信息4.hugepages 利用率统计信息5.列长度和负载平均值6.内存利用率统计信息7.swap 交换空间利用…

中国的互联网电商,终于还是“连上了”

什么才是更好的互联网? 答案很简单:真正的互联。 9月26日,据市场消息,京东物流和菜鸟速递将分别接入淘天、京东平台。同时,京东也将在“双11”前开通支付宝支付,时隔13年再度携手阿里支付体系。 消息一出…

【Redis入门到精通八】Redis事务与MySQL事务对比

目录 事务 1.MySQL中事务的特性 2.Redis事务与MySQL事务的区别 3.Redis事务操作演示 事务 什么是事务呢?事务的概念其实就是把一系列操作绑定成一组,让这一组操作能够批量执行,不过在MySQL中有复杂的机制能够保证这一组操作执行并且一定能…

降AI率不再难:芝士AI去痕工具,让论文原创性飙升~~~

降AI率不再难:芝士AI去痕工具,让你的论文原创性飙升 如何有效降低AIGC论文的重复率,也就是我们说的aigc如何降重?AIGC疑似度过高确实是个比较愁人的问题。 如果你用AI帮忙写了论文,就一定要在交稿之前做一下AIGC降重…

征程6 上基于 DEB 工具实现包管理

1.引言 在开发、调测过程中,开发人员需要将系统软件、应用软件部署到 Soc 板端,以用于运行调试。传统的部署方式是通过解压复制或者调用部署脚本。这样的部署方式需要有着方式不统一、维护投入大的缺点。 在 linux 系统上,大多采用包管理的…

【CSS】背景

background-color 颜色background-image 图像background-size 缩放background-repeat 平铺background-position 定位background-clip 裁剪区域background-origin 开始区域background-attachment 滚动方式 background-color 颜色 <style>div{width: 200px;height: 100px;…

TOF系列—深度图滤波

本篇文章主要介绍TOF深度图的后处理&#xff0c;鉴于自身水平所限&#xff0c;如有错误&#xff0c;欢迎批评指正。&#xff08;欢迎进Q群交流&#xff1a;874653199&#xff09; TOF由于其本身的特性&#xff0c;导致其所获得的深度图存在以下问题&#xff1a; 1.对空的地方存…

SpringBoot与MyBatis-Plus的整合与综合实例

MyBatis 是一款优秀的持久层框架&#xff0c;它支持定制化SQL、存储过程、以及高级映射。MyBatis3 提供的注解可以取代 XML。例如&#xff0c;使用注解 Select 直接编写 SQL 完成数据查询。MyBatis-Plus 是一个对 MyBatis 进行增强的工具&#xff0c;在 MyBatis 的基础上只做增…

剑指 offer 刷题集

目录 数组 1. LCR 121. 寻找目标值 - 二维数组 2. LCR 120. 寻找文件副本 3. LCR 128. 库存管理 I 4. LCR 131. 砍竹子 I 5. LCR 132. 砍竹子 II 6. LCR 135. 报数 7. LCR 139. 训练计划 I 8. LCR 158. 库存管理 II 9. LCR 159. 库存管理 III 10. LCR 160. 数据流中…

从GPS接收机灵敏度出发--理论计算GPS最低的跟踪灵敏度

思博伦售后团队 对射频工程师来说&#xff0c;自己设计的接收机灵敏度&#xff08;Receiver Sensitivity&#xff09;是最关注也是最重要的参数之一。所以我们首先来看看接收机灵敏度的定义&#xff1a; 在满足一定误码率的条件下&#xff0c;接收机能容许接受到的最小信号电平…

FPGA学习(3)-38译码器实现

目录 1.38译码器概述 2.VIVADO步骤 2.1创建工程&#xff0c;添加源文件 2.2添加仿真文件&#xff0c;并进行仿真 ​2.3添加管脚约束 2.4生成bit文件 2.5 烧录程序 3.实验结果 1.38译码器概述 即三个输入A2A1A0&#xff0c;输出的十进制数&#xff0c;例如LHL(010)2…

class 026 哈希表、有序表和比较器的用法

这篇文章是看了“左程云”老师在b站上的讲解之后写的, 自己感觉已经能理解了, 所以就将整个过程写下来了。 这个是“左程云”老师个人空间的b站的链接, 数据结构与算法讲的很好很好, 希望大家可以多多支持左程云老师, 真心推荐. https://space.bilibili.com/8888480?spm_id_f…

Docker实践与应用:深度探索与丰富案例

一、引言 在当今的软件开发和运维领域&#xff0c;Docker已经成为了一种不可或缺的技术。它以容器化的方式改变了软件的开发、部署和运行模式&#xff0c;为企业和开发者带来了前所未有的便利和效率提升。本文将深入探讨Docker的实践操作以及丰富的应用举例&#xff0c;带您全面…

点餐小程序实战教程12菜品展示

目录 1 点餐界面2 显示菜品分类2.1 创建变量2.2 数据绑定 3 显示菜品总结 我们上一篇介绍了数据源的设计方法&#xff0c;讲解了菜品分类和菜品数据源的创建以及后台功能的开发。有了后台功能并且准备好数据之后&#xff0c;我们就需要开发小程序部分。 现实中你看到的想到的绝…

基于SpringBoot+Vue3的在线报名系统

一、项目介绍 1.1 项目介绍 本项目为一个报名系统&#xff0c;实现了基本的报名流程&#xff0c;功能完善&#xff0c;前后端皆有个人独立开发&#xff0c;功能相对不是特别难&#xff0c;但该有的功能还是都已经实现。 1.2 技术架构 主要技术栈&#xff1a; SpringBoot2 …