USB协议的第9章讲到USB可见设备状态[Universal Serial Bus Specification, Section 9.1.1, Pg 239],分为连接(Attached),上电(Powered),默认(Default),地址(Address),配置(Configured)和挂起(Suspended)6个状态。所谓可见,即USB系统和主机可见的状态,其他状态属于USB设备内部而不可见。其中有关电源的,大致可分下面三类:

1. 连接状态(Attached):设备连接,但未提供电源。

2. 上电状态(Powered):设备被复位(Reset),或者说处于地址、配置状态。(参见USB枚举过程,USB Specification, page 241)

3. 挂起状态(Suspended):3 ms未见总线活动而处于省电状态,设备不可用,但仍然保持原有的USB地址和配置。

设备的挂起

我们知道,在USB系统中,正常状态下hub或root hub会一直周期性地发送SOF包(Start Of Frame,全速USB每1ms发送一个,高速USB则是125μs发送一个)。根据USB协议,如果USB线上一直处于空闲(Idle)状态超过3ms,设备应该把它当作一个挂起(Suspended)信号,要求设备在10ms内进入挂起状态,并把设备所需的电流大小降到规定的值(对于low-power设备,要求是500 μA,而对于high-power或支持远程唤醒(remote wakeup)功能的设备是2.5mA【Section 7.2.3, Pg176】)。在挂起状态中,设备必须继续向数据项D+/D-的上拉电阻提供电压以维持Idle状态。而对于USB2.0高速设备,还有些额外的要求:

1. 高速设备在收到挂起信号(3ms空闲)后,应在0.125ms内切换到全速状态,也就是说要把终端电阻移除,并在D+数据线上重新挂上1.5k上拉电阻。

2. 设备在随后的100-875μs内检测数据线上的状态。如果该状态是一个Full speed J,那么说明host发下来的是一个挂起信号;如果此时该状态是SE0,说明是host drive数据线D+到0,这是一个复位信号(复位信号会持续至少10ms时间)。

要注意的是高速设备在挂起状态时处于高速模式,只是所用的是全速信号。一旦从挂起状态恢复回来,会马上进入高速工作状态而无需进行复位操作。

如上图所示,Host在a点停止发送SOF,系统处于SE0状态,b点是3ms时间点,之后的125μs内,设备移除终端电阻,并挂上1.5k上拉。此时如host发送的是suspend信号,那它就不会不drive D+数据线,导致D+被设备拉高,形成一个Full Speed J状态。在c点之后100-875μs内设备检测此时host行为,发现是suspend信号,设备内部进入低功耗的挂起(suspend)状态。(假如hsot发送的是复位信号,那么当设备在c点挂1.5k电阻之后,由于host对D+线的drive作用,D+线无法被拉高,仍然处于SE0状态,设备在c点之后的检测,发现的还是SE0状态,等到10ms后就可判断这是一个复位信号,进行设备复位操作。)

设备的唤醒

设备处于挂起状态时,任何总线上的活动(非空闲信号)都可以把设备唤醒/恢复,从而退出低功耗模式。(同样,设备也可以换醒host,比如电脑待机时通过USB键盘来换醒主机,这种功能称之为“远程唤醒”(remote wakeup),不在本文的讨论范围内。)

因为设备挂起时处于全速信号,在当host需要把将设备退出suspend状态时,需要先发送一个持续时间超过20ms的Fulll Speed K状态。设备看到K状态结束的1.3us内醒过来,而host需要在3ms内发送uSOF信号以维持正常的高速信号模式,否则设备又将进入suspend。如下图所示:

本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

usb 进入suspend_USB的挂起和唤醒 (Suspend and Resume)相关推荐

  1. wince挂起和唤醒(suspend/wakeup)

    管任何方式的系统挂起,最终都会调用OEMPowerOff()函数来实现.OEMPowerOff()函数由OEM来完成,这个函数也许会位于 power.c或者off.c的文件中.OEMPowerOff( ...

  2. 四极管 整理wince挂起和唤醒(suspend/wakeup)以及实现关机功能文章

    学习wince挂起和唤醒以及关机功能,后面再把自己调试心得记下来. 以下文章来源: http://hi.baidu.com/mikenoodle/blog/item/3d659a16bb9ef656f ...

  3. java线程挂起唤醒_java线程技术6_线程的挂起和唤醒[转]

    转自:http://blog.chinaunix.net/uid-122937-id-215913.html 1. 线程的挂起和唤醒 挂起实际上是让线程进入"非可执行"状态下,在这 ...

  4. wince挂起和唤醒

    欢迎加入Wince技术讨论群QQ#326444254 不管任何方式的系统挂起,最终都会调用OEMPowerOff()函数来实 现.OEMPowerOff()函数由OEM来完成,这个函数也许会位于 po ...

  5. wince挂起和唤醒_relayon

    不管任何方式的系统挂起,最终都会调用OEMPowerOff()函数来实 现.OEMPowerOff()函数由OEM来完成,这个函数也许会位于 power.c或者off.c的文件中.OEMPowerOf ...

  6. C# 线程的挂起与唤醒 (AutoResetEvent,ManualResetEvent)

    如果说C#和C++有什么不同,博主不得不说,对于异步的支持程度是C#的一一个伟大的进步. 其实早期的C++都没有异步,并发的概念.博主第一次使用C++创建异步程序的时候,是使用boost库的内容进行实 ...

  7. 关于Qt中线程的挂起和唤醒问题

    为了平台的可移植性,现在好多公司或开发者都在用Qt开发,但是Qt开发文档有一个不非常理想的问题是,有些问题描述的不是太详细,特别是涉及到线程的挂起,唤醒.和sleep()等问题. 在Qt开发中,有许多 ...

  8. usb 进入suspend_解决了USB中suspend和resume的一个问题 | 学步园

    我们公司GSM部门有个双模智能手机的项目.MTK平台和EVDO平台通过USB进行通信.结果在项目测试过程中发现,当MTK做HOST控制EVDO做Device时,HOST控制Device进行suspen ...

  9. Linux中usb的UDC驱动挂和usb端口设置

    背景 Linux 可能有多个usb,想要把指定usb口提供某些功能,这时候就会存在问题.有的驱动会因为usb 的模式自动挂载到其他口,有的功能只能挂在到host或者device模式,usb口A想要用某 ...

最新文章

  1. 在Ubuntu 14.04 64bit上编译安装xbt tracker
  2. Win2008远程多用户登陆的配置方法
  3. “编码 5 分钟,命名 2 小时”,这道题究竟怎么解? | 问题征集
  4. linux系统空间不足,lsof看到异常的delete状态的文件。
  5. .net讀取指定節點的值
  6. 被遗忘的 10 个Linux命令,很实用!
  7. A new ABAP HTTP test client RSICFCLTST01
  8. WCF配置报错 在 ServiceModel 客户端配置部分中,找不到名称 和协定
  9. 嵌入式软件工程师笔试题
  10. 500万用户 表_500万用户的社交电商平台社群分层运营模型「第219期触电夜话」...
  11. mysql 1067 win7,大师练习win7系统无法启动MySQL服务错误1067的设置教程
  12. 一篇 vSAN 入门,送给大家
  13. 仓库管理软件,仓库管理系统,希创条码,wms仓库管理软件
  14. 玉石直播招商团队薪酬绩效方案
  15. 学习java.awt
  16. Qt Creator vs2022 构建 Disney BRDF Explorer 项目
  17. 十大安卓应用商店推广渠道排行榜
  18. YAML格式与Three dashes(hyphen) ---
  19. 基于verilog的CRC校验(汇总)
  20. PTA 02-线性结构3 Reversing Linked List 题目解析

热门文章

  1. html 物流状态,css+html如何实现物流进度样式(代码示例)
  2. php中如何比较数组和字符串,PHP中数组和字符串的相互转换-PHP数组和字符串互相转换方法-吾爱编程网...
  3. c语言农夫过河游戏代码解释,农夫过河C++代码
  4. 计算机学校都有哪些怎么联系方式,计算机应用专业学校联系方式推荐
  5. BUUCTF-reverse3
  6. Python基础入门:常用的os操作
  7. 王者荣耀连接不上服务器最新赛季排名,王者荣耀新赛季连掉三段 初期不能打排位是有原因的...
  8. html隐藏元素的方式,Web前端:CSS3——3种隐藏元素方法的区别
  9. Python__数据结构与算法——图
  10. Haproxy + Pacemaker 实现高可用负载均衡(一)