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

相关文章

Usb Audio Device Descriptor(10) Hid Device

对于 Standard Interface Descriptor, 当 bInterfaceClass=0x03时,即为HID设备。Standard Interface Descriptor如下 struct usb_standard_interface_descriptor{U8 bLength; /*Size of this descriptor in bytes*/U8 bDescrip

Android rk3399 UAC(USB Audio)开发笔记

一、UAC有1.0和2.0,因Windows对2.0支持不好,我使用的是UAC1.0驱动 内核配置:CONFIG_USB_CONFIGFS_F_UAC1          ---这个宏配置无需物理codec,使用虚拟 alsa codec  驱动路径:"kernel\drivers\usb\gadget\function\f_uac1.c" 内核配置:CONFIG_USB_CONFIGFS_

多款式随身WiFi如何挑选,USB随身WiFi、无线电池随身WiFi、充电宝随身WiFi哪个好?优缺点分析!

市面上的随身WiFi款式多样琳琅满目,最具代表性的就是USB插电款、无线款和充电宝款。今天就来用一篇文章分析一下这三种款式的优缺点。 USB插电款 优点:便宜,无需充电,在有电源的地方可以随时随地插电使用,比如中兴的USB随身WiFi。 缺点:无电源的情况下,无法带出门使用,部分品牌考虑到这个问题,会配备一个充电仓,这个充电仓相对来说就有点累赘了。网速上也不太稳定,波动比较大。

MySQL表名区分大小写设置

打开 mysql配置文件mysqld.cnf 打开文件,找到[mysqld]在下面增加一行 lower_case_table_names=0 (0:大小写敏感;1:大小写不敏感) 重启mysql服务 docker restart mysqlserver

基于FPGA的开源项目:FOC/SHA/USB/JPEG等

文章目录 [1. USB 1.1控制器](https://github.com/WangXuan95/FPGA-USB-Device)[2. FOC控制算法](https://github.com/WangXuan95/FPGA-FOC)[3. BSV高级硬件描述语言入门指南](https://github.com/WangXuan95/BSV_Tutorial_cn)[4. 基于XDMA的

Circuit Design 贴片晶振的区分

贴片晶振脚位的区分(非常详细,尤其是如何区分四脚的有源无源晶振): http://ruitairt.com/Article/tiepian_1.html 如何区分有源和无源晶振: http://ruitairt.com/Article/yzjddbfqsq_1.html

Redis 命令不区分大小写,键值区分大小写Redis

今天才知道   Redis 命令不区分大小写   但键值区分大小写的

计算两个字符串的最大公共字符串的长度,字符不区分大小写

/*** */package testString;import java.util.Scanner;/***@author: Administrator*@date: 2016-12-28 下午01:08:30*/public class Main {public static void main(String[] args){Scanner sc=new Scanner(Syste

linux下 ping: unknown host www.baidu.com” 解决方法

问题现象 :   ping 和 telnet 都无法正常使用   而nslookup 可以正常解析到域名 $ ping  www.baidu.com  ping: unknown host  www.baidu.com $ telnet baidu.com 80  baidu.com/80: Name or service not known

ssh问题:Connection closed by foreign host. Disconnected from remote host

放通一个远程ip能够ssh服务器,但是报错: Connection closed by foreign host.   Disconnected from remote host。。。   解决办法: firewall防火墙放通ip。 /etc/ssh/sshd_config文件修改,运行root用户密码登,再重启sshd服务。 /etc/hosts.allow和/etc/hos