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的检测就和上文的第二段对应上了。

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值