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

一,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.xdnf.cn/news/1548923.html

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

相关文章

JAVAEE如何实现网页(jsp)间的数据传输?一文总结

刚刚接触到JAVAEE的WEB开发,解释不周的地方希望感谢指正!!! 情景如下: 我的使用是21版的IDEA,9.03版本的tomcat,来做一个示范。 构建项目 点击下一步 -> 完成,等待项目构建结束…

Trie树之字符串统计问题

这是C算法基础-数据结构专栏的第二十七篇文章,专栏详情请见此处。 引入 Trie树,即字典树,顾名思义,就是用类似字典的方式存储数据,而Trie树最经典也是最简单的一个应用就是字符串统计问题。 字符串统计问题就是维护一个…

华为玄玑感知系统震撼发布:智能穿戴新品引领情绪健康新纪元

在科技日新月异的今天,华为再次以其卓越的创新能力,为智能穿戴领域带来了一场革命性的变革。 8月28日,华为玄玑感知系统暨穿戴创新技术发布会圆满落幕,会上正式揭晓了这款名为“玄玑”的神秘感知系统,预示着穿戴设备将…

element 中 v-loading 更改icon颜色、字体颜色

文章目录 问题分析 问题 如下图,由于背景的原因,可以看出展示的文字不是很清楚,因此需要自定义一下文字字体大小和文字颜色。像图二一样 分析 找到对应的class。然后直接修改即可 话不多说,直接上代码 ::v-deep {.el-loading…

Linux开源网络:高性能数据平面

数据平面的性能在很大程度上取决于网络 I/O 的性能,而网络数据包从网卡到用户空间的应用程序需要经历多个阶段,本文从数据平面基础到NFV,NFC基础设施再到OVS-DPDK VPP进行概论上的描述。 部分内容来源于《Linux开源网络全栈详解:从…

008——树

目录 树: 相关概念: 1.结点: 结点和结点之间的关系 2.度 3.n叉树 4.高度/深度 5.有序树和无序树 6.空树: 树的存储结构/表示方法: 树中都需要存储什么? 1.双亲表示法 2.孩子表示法 可以将上面…

MySQL之基础篇

数据库操作 1.查看当前的数据库版本 select version(); 2.显示所有数据库 show databases; 3.创建数据库 create [if not exists] database 数据库名 character set 字符编码集 collate 排序规则; 我们这里提前说一下 被方括号括起来的代码 表示可写可不写 示例…

Linux 安装redis主从模式+哨兵模式3台节点

下载 https://download.redis.io/releases/ 解压 tar -zxvf redis-7.2.4.tar.gz -C /opt chmod 777 -R /opt/redis-7.2.4/安装 # 编译 make # 安装, 一定是大写PREFIX make PREFIX/opt/redis-7.2.4/redis/ install配置为系统服务 cd /etc/systemd/system/主服务…

spring揭秘24-springmvc02-5个重要组件

文章目录 【README】【1】HanderMapping-处理器映射容器【1.1】HanderMapping实现类【1.1.1】SimpleUrlHandlerMapping 【2】Controller(二级控制器)【2.1】AbstractController抽象控制器(控制器基类) 【3】ModelAndView(模型与视…

从零开始搭建UVM平台(三)-加入objection机制

书接上回: 从零开始搭建UVM平台(一)-只有uvm_driver的验证平台 从零开始搭建UVM平台(二)-加入factory机制 加入objection机制 需要在第一个消耗仿真时间语句前raise_objection,最后再drop_objection&…

【微服务即时通讯系统】——etcd一致性键值存储系统、etcd的介绍、etcd的安装、etcd使用和功能测试

文章目录 etcd1. etcd的介绍1.1 etcd的概念 2. etcd的安装2.1 安装etcd2.2 安装etcd客户端C/C开发库 3. etcd使用3.1 etcd接口介绍 4. etcd使用测试4.1 原生接口使用测试4.2 封装etcd使用测试 etcd 1. etcd的介绍 1.1 etcd的概念 Etcd 是一个基于GO实现的 分布式、高可用、一致…

2024年7月大众点评武汉餐饮美食店铺基础信息

在做一些城市分析、学术研究分析、商业选址、商业布局分析等数据分析挖掘时,大众点评的数据参考价值非常大,截至2024年7月,大众点评美食店铺剔除了暂停营业、停止营业后的最新数据情况分析如下。 武汉餐饮美食店铺约9.6万家,有均…

实验1.2 熟悉VRP基本操作

实验1.2 熟悉VRP基本操作 原理概述 VRP(Versatile Routing Platform,通用路由平台)是华为公司数据通信产品的通用网络操作系统平台,拥有一致的网络界面、用户界面和管理界面。在VRP操作系统中,用户通过命令行对设备下…

Kettle9连接mysql8.0.36失败处理

一、问题描述 kettle作为数据转换同步的工具,使用java开发,连接数据库使用jar的驱动包,比如oracle连接使用ojdbc8.jar,mysql连接使用mysql-connect-java-8.0.*,但是截止目前mysql8.0.33到8.0.36在官网是没有mysql驱动包的&#x…

Vue之axios请求

Vue之axios请求 axios请求, 是Vue前端框架非常重要的一部分, 今天我们就讲解axios请求, 到底有什么作用, 以及会告诉大家axios的常见用法。 axios请求, 是网页向后端发起请求, 后端吧数据给我们网页, 这是一个前后端交互的过程。当我们学会了axios, 我们可以实现前端和后端练…

PIKACHU | PIKACHU 靶场初识

关注这个靶场的其他相关笔记:PIKACHU —— 靶场笔记合集-CSDN博客 0x01:PIKACHU 靶场简介 PIKACHU 是一款开源的练习 Web 漏洞的综合靶场,使用 PHP 代码编写而成,它包含了多种常见的 Web 安全漏洞,适合不同水平的用户…

redis 中IO多路复用与Epoll函数

一 IO多路复用 1.1 IO多路复用作用

C++之Swap类

main.cpp #include <iostream> #include <vector> #include <ctime> #include "Swap.h"using namespace std;int main() {Array myArrays;srand(time(0));for (int i 0; i < 7; i) {int tempArray (rand() % 100); // 生成0到99之间的随机数…

【动态规划】最长回文子串

最长回文子串&#xff08;难度&#xff1a;中等&#xff09; 该题对应力扣网址 思路 题目分成三种情况 情况一&#xff1a;每一个字符都是长度为1的回文串 情况二&#xff1a;长度大于2的回文串&#xff1a;看从i到j的字符串包含的从i1到j-1的字符串是否是回文串&#xff08…

关于液氮罐的液氮补给方式

液氮用于低温保存生物样本&#xff0c;如细胞、组织和其他样品&#xff0c;确保其长期存储而不失活。当液氮罐中的液氮水平下降时&#xff0c;及时补给是至关重要的。补给液氮的步骤较为简单&#xff0c;但需要遵循一定的安全标准和操作规范&#xff0c;以确保样本的安全和液氮…