USB PM
来源:互联网 发布:小型企业网络项目ppt 编辑:程序博客网 时间:2024/06/04 04:48
1 USB-RuntimePM
1.1 XHCI USB 2.0 LPM
L0 means ON.
L1 means SLEEP.
Traditional USB 2.0 suspend was called L2.
L3 means OFF.
1.2 XHCI USB 3.0 LPM
U0: normal work
U1/U2: 一般都不支持的,Linux DT直接禁止了,因为绝大部分的USB3的U1/U2都是有问题的。
U3: suspend
1.3 Gadget Runtime-PM APIs
@ include/linux/usb/gadget.h
static inline int usb_gadget_autopm_get(struct usb_gadget *gadget);
static inline void usb_gadget_autopm_put(struct usb_gadget *gadget);
2 USB-EHCI-PM-Call-Flow
3 External Hub reset-resume Issue
hub_port_connect_change()
usb_detect_quirks(), which will set“udev->persist_enabled = 1”
hub_activate(), which checks“udev->persist_enabled == 1”, then sets
“udev->reset_resume = 1;”the“reset_resume”flag will cause EHCI stack calls
usb_port_resume() to reset the external hub when the system exits
suspend-to-RAM.
4 LS/FS/HS Early Suspend Interrupt
DWC2 databook indicates if the core sets "ErlySusp" bit, an idle state has been detected on the USB for 3 ms. This situation can be occurred when waiting a request from user daemon. So, we should keep the connection between udc and gadget even though this interrupt is occurred.
HS Device Suspend Flow:
1. 高速设备在收到挂起信号(3ms空闲)后,应在0.125ms内切换到全速状态,也就是说要把下拉终端电阻45Ω移除,并在D+数据线上重新挂上1.5k上拉电阻。
2. 设备在随后的100-875μs内检测数据线上的状态。如果该状态是一个Full speed J,那么说明host发下来的是一个挂起信号;如果此时该状态是SE0,说明是host drive数据线D+/D-到0,这是一个复位信号(复位信号会持续至少10ms时间)。
HS Device Resume Flow:
因为设备挂起时处于全速状态,当host需要设备退出suspend状态时,先发送一个持续时间超过20ms的Fulll Speed K状态,设备看到K状态结束的1.3us(持续2个 LS bit位时间)内醒过来,而host需要在3ms内发送uSOF信号以维持正常的高速信号模式,否则设备又将进入suspend。
5 USB3 Resume
1. LTSSM处于U3状态;
2. PHY收到LFPS WAKEUP信号,通知Link层LTSSM,LTSSM指导PHY也发送LFPS给对端设备;
3. LTSSM进入Recovery状态,包括TS1,TS2,IDLE训练;
4. 持续发送TS1直到成功接收到对端发送的8个TS1,然后进入TS2阶段;在TS2阶段,需要接收到对端发送的至少8个TS2,并且自己给对端至少也发送了16个TS2,此时TS1,TS2训练成功;
5. 确认TS1和TS2训练是否成功,如果TS1和TS2都成功,转入下一步;否则,如果TS1或者TS2训练失败,转入SS.Inactive;
6. LTSSM指导PHY进行IDLE训练,接收到对端发送的至少8个空闲符号时,确保自己也同时至少发送了16个IDLE符号给对端;
7. 确认上一步是否成功,如果成功,转入U0;否则转入SS.Inactive。
注意:
LFPS和IDLE都是PIPE接口PHY实施的;
而TS1,TS2训练序列是LTSSM生成的数据;
LGOOD_0 to LGOOD_7的发送表示Link层已成功收到对端发送的数据(CRC校验正确);
LCRD_A to LCRD_D(CRD means Credit)的发送表示Link层已成功将接收的数据push入protocol层,说明Link层LCRD_X对应的buffer可用了(USB3协议实施时,Link层最多可缓存接收到的4个packets)。
- USB PM
- pm
- PM
- PM
- PM
- pm
- PM
- 浅谈PM
- pm.inc
- AM PM
- PM Framework
- 浅谈PM
- PM开始
- pm.inc
- PM论文
- mx51 pm
- pm.inc
- PM terms
- 围观阿里云最会赚钱的人!价值2万元邀请码不限量发送
- JQuery toggle 转换事件
- HBuilder app 状态栏 颜色问题
- Codeforces Olesya and Rodion
- 从大四开始的职业生涯
- USB PM
- 书籍-Docker 容器与容器云
- Centos7配置JAVA_HOME
- 微信小程序里为什么我设置了数据却不显示
- CCM-ESPRIT,L型阵列二维角度配对算法
- gulp-用gulp做一个略完整的前端打包工作
- CAS 5.0.0的安装及配置
- solr索引库添加新的索引,使用json文件或者xml文件的数据
- JProfiler的详细使用介绍(JVM对象内存线程监测工具)