USB host是如何区分reset、disconnect以及suspend?

2023-12-10 16:28

本文主要是介绍USB host是如何区分reset、disconnect以及suspend?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

如题。

reset和disconnect

在OTG2.0中,当其配置程host模式,当host发送reset时D+/D-线都为低电平,这是USB协议侧的复位(与上电复位不同,协议上的复位是为了对连接的dev进行枚举,例如对端点0进行set address,set config等);在dev插入host之前,或者当与host连接的dev拔出后,插入D+和D-也为0。如何区分他俩?

对于全速和低速的dev,当其没有数据传输时,处于IDLE状态,D+或者D-的某一根线会被dev的上拉电阻拉高。当host发送复位,D+和D-都会被驱动为0,持续一段时间后,dev会检测D+和D-状态,确定此情况是host发送的复位信息;而当断开连接后,FS情况下,D+无驱动,变为0,LS情况下D-无驱动,变为0,dev没有电源供电了,即使D+D-都为0,dev自然不会再去检测这两根线代表什么含义了。同时,host这时候还是上电状态,其通过检测D+或者D-的拉低情况,能够立马判断出这是断开连接了。

对于HS情况,当其没有数据传输时,处于IDLE状态,D+和D-都为0,也就是SE0状态。这时候,又该如何区分reset和断开连接?

这里搬运USB中文网的结论。目前在RTL中没有看到检测差分信号的电平差值的代码,并且对于数字电路来说,波形上只有0/1之分,如何确定差分差值?并且,在当前生成的RTL的情况下,无法模拟dev disconnect的情况,尝试了好几天都不成功。只能存疑,日后补充。
在这里插入图片描述

suspend

当主机3ms内没有活动时(每隔1ms或者125us发送SOF也算作总线活动),dev应该将其当作一个挂起信号,并在规定的时间内挂起,同时将dev的电流降低到一定值。在挂起状态中,dev需要向D+/D-的上拉电阻提供电压以维持idle态,对于高速dev,收到挂起信号后,移除45欧的终端电阻,并在D+上重新挂载1.5k欧的上拉电阻(高速dev用全速信号进入挂起状态)。

对于host发送挂起命令,host自己当然知道自己处于要让设备进入挂起状态,所以此时host不会对D+/D-线进行检测,直到dev挂起后,才会对disconnect进行检测。

这个时候的disconnect的检测就和上文的第二段对应上了。

这篇关于USB host是如何区分reset、disconnect以及suspend?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/477638

相关文章

nginx 8051#0: *4 recv() failed (104: Connection reset by peer) while reading response header from u

环境    php7   nginx1.8.0    nginx   报错  500  GATWAY网关错误 2017/08/28 10:45:42 [error] 7975#0: *333 recv() failed (104: Connection reset by peer) while reading response header from upstream, clien

CloudStack基本概念-Zone,Pod,Cluster,Host

ZonePodClusterHost Zone Zone(资源域)是CloudStack部署中第二大的组织单元。Zone一般对应一个数据中心,虽然一个数据中心也可以有多个Zone。 把基础设施组织进Zone的一个好处就是可以提供物理隔离和冗余。 例如每个Zone可以有自己的电源供应和网络线路,并且zone之间可以远远地隔离开(虽然不是必须的) 一个zone包括:

USB - USB在消费领域的应用

Switching in USB Consumer Applications 通用串行总线(USB)已成为满足终端设备之间日益增长的快速数据传输需求的主流接口--例如,在个人电脑和便携式设备(如手机、数码相机和个人媒体播放器)之间下载和上传数据。 The universal serial bus (USB) has become a dominant

离线linux通过USB连接并使用手机网络

离线linux通过USB连接并使用手机网络 引场景 引 离线环境要安装一些软件特别麻烦,要自己去官网下载对应的包,然后上传到服务器上,再解压,编译,执行,配置变量等等,错一步都可能安装失败。有网络的话使用yum或者是docker镜像来安装就非常方便。这里记录一下之前在centos上通过USB连接手机并使用手机网络来做这些基础工作时所遇到的网络问题。 场景 首先手机连上服务器主

AG32 MCU是否支持DFU下载实现USB升级

1、AG32 MCU是否支持DFU下载实现USB升级呢? 先说答案是NO. STM32 可以通过内置DFU实现USB升级,AG32 MCU目前不支持。但用户可以自己写一个DFU, 作为二次boot. 2、AG32 MCU可支持的下载方式有哪些呢? 我们AG32裸机下载只支持uart和jtag. 用户可以通过UART实现ISP升级。所以虽然不支持DFU,但是用户仍然可以通过UART实现升级。 3

关于linux下/srv、/var和/tmp的职责区分

/srv :主要用来存储本机或本服务器提供的服务或数据。(用户主动生产的数据、对外提供服务) /srv contains site-specific data which is served by this system. /var :系统产生的不可自动销毁的缓存文件、日志记录。(系统和程序运行后产生的数据、不对外提供服务、只能用户手动清理)(包括mail、数据库文件、日志文件) /

前端vite+vue3——利用环境变量和路由区分h5、pc模块打包(从0到1)

⭐前言 大家好,我是yma16,本文分享 前端vite+vue3——利用环境变量和路由对前端区分h5和pc模块打包(从0到1)。 背景: 前端本地开发pc和h5的项目,发布时需要区分开h5和pc的页面 vite Vite 通过在一开始将应用中的模块区分为 依赖 和 源码 两类,改进了开发服务器启动时间。 依赖 大多为在开发时不会变动的纯 JavaScript。一些较大的依赖(

数组与张量中[]和[][]怎么区分含义

要区分张量(Tensor)和数组(Array)中单层索引(例如 `[]`)与多层索引(例如 `[[]]`)的使用,可以类比到生活中的一些例子来更直观地理解。我们将从基本概念开始,然后结合生活中的例子详细解释这些区别和用法。 ### 基本概念 - **单层索引 `[]`**:用于在一个维度上进行索引。 - **多层索引 `[[]]`**:用于在多个维度上进行索引。 ### 生活中的类比:书架和

计算机基础:公司usb被禁用了该怎么恢复使用

主要有两个方法: (1):win+r键,弹出cmd命令框后,在输入gpedit.msc------》计算机配置或者用户配置---------------------》管理模板---------》系统------》可移动存储访问,然后查看可移动磁盘的配置权限,如果状态不是未配置,就双击修改为未配置 (2):win+r键,弹出cmd命令框后,在输入regedit,然后找到如下位置:HKEY_LOC

java实现线程的三种方式, stop()和suspend()方法为何不推荐使用

文章目录 1 线程的实现1.1 继承Thread类1.2 实现Runnable类1.3 继承和实现区别1.4 线程池写法 2 stop和suspend方法 1 线程的实现 java5以前,有如下两种: 有两种实现方法,分别使用new Thread()和new Thread(runnable)形式,第一种直接调用thread的run方法,所以,我们往往使用Thread子类,即new