Android USB电源管理

news2025/1/10 10:55:06

The USB peripheral detects the lack of 3 consecutive SOF packets as a suspend request from the USB host.

1 驱动shutdown顺序
系统关机或重启的过程中,会调用设备驱动的shutdown函数来完成设备的关闭操作,有需要的设备可以在驱动中定义该函数。其调用流程如下:
kernel_restart
kernel_restart_prepare
device_shutdown // 逆向遍历devices_kset->list所有device
dev->driver->shutdown

由此可见,各个驱动shutdown的顺序由设备在链表中的位置决定,后添加的先调用。设备添加到链表中的流程如下:

device_initialize
device_add
kobject_add
kobj_kset_join
list_add_tail(&kobj->entry, &kobj->kset->list)

由此可见,设备注册时,会把节点添加到devices_kset->list末尾。因此驱动的shutdown顺序是设备注册的逆序,而在通过dts创建设备的系统中,设备的注册顺序是设备节点在dts中的前后顺序。

2 USB主机PORTSC寄存器
2.1 EHCI
Connected:
PORTSC1.CCS (bit 0) - Current Connection Status
PORTSC1.CSC (bit 1) - Connection Status Change

Reset - Great Than 10ms:
PORTSC1.PR (bit 8) - Port Reset
PORTSC1.PE (bit 2) - Port Enable

Disconnected:
PORTSC1.CCS (bit 0) 
PORTSC1.CSC (bit 1)
PORTSC1.PEC(bit 3) - Port Enable Change

2.2 xHCI
Connected:
PORTSC.CCS (bit0 ) - Current Connection Status

Reset - Great Than 10ms:
PORTSC.PR (bit4) - Port Reset
PORTSC.PED (bit1) - Port Enabled/Disabled

echo "file xhci-hub.c +p" > /d/dynamic_debug/control
dmesg -n4
wPortStatus & 0x03表示复位成功

3 EHCI电源管理
3.1 休眠唤醒流程

suspend usb_device时,先suspend usb interface,再挂起整个设备,也就是调用generic.c(类似于Windows CCGP)驱动的generic_suspend();
resume usb_device时,先唤醒整个设备,也就是调用generic.c(类似于Windows CCGP)驱动的generic_resume(),再resume usb interface。

3.2 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.

3.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.

3.4 HS Device Suspend和Resume
Suspend:
1)高速设备在收到挂起信号(3ms空闲)后,应在0.125ms内切换到全速状态,也就是说要把下拉终端电阻45Ω移除,并在D+数据线上重新挂上1.5k上拉电阻。
2)设备在随后的100-875μs内检测数据线上的状态。如果该状态是一个Full speed J,那么说明host发下来的是一个挂起信号;如果此时该状态是SE0,说明是host drive数据线D+/D-到0,这是一个复位信号(复位信号会持续至少10ms时间)。
Resume:
因为设备挂起时处于全速状态,当host需要设备退出suspend状态时,先发送一个持续时间超过20ms的Fulll Speed K状态,设备看到K状态结束的1.3us(持续2个 LS bit位时间)内醒过来,而host需要在3ms内发送uSOF信号以维持正常的高速信号模式,否则设备又将进入suspend。

4 xHCI电源管理

4.1 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);

4.2 HS LPM
L0:means ON
L1:means SLEEP
L2:traditional USB 2.0 suspend
L3:means OFF

4.3 SS LPM
U0: normal work
U1/U2: 一般都不支持的,Linux DT直接禁止了,因为绝大部分的USB3的U1/U2都是有问题的。
U3: suspend

4.4 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 Interface for PCI Express)接口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)。

4.5 全局禁止运行时autosuspend
echo -1 >/sys/module/usbcore/parameters/autosuspend

4.6 autosuspend
Intel APL (Gen9, A39X0) 8-port MPH xHCI会注册2个host,一个是usb1(LS/FS/HS),另一个是usb2(SS)。
禁止usb1电源管理:
echo on > /sys/bus/usb/devices/usb1/power/control
禁止usb2电源管理:
echo on > /sys/bus/usb/devices/usb2/power/control

5 Abbreviations
ARC:Argonant RISC Core
CCGP:Windows USB Common Class Generic Parent,Linux内核类似的驱动就是usb_generic_driver(generic.c)
CCGP MI_:Common Class Generic Parent Multi Interface
DWC2:Design Ware Controller 2,Apple的嵌入式设备,包括iPad和iPhone都是使用的DWC2
ISP1161:Philips' Integrated host Solution Pairs 1161,“Firms introduce USB host controllers”,https://www.eetimes.com/document.asp?doc_id=1290054
MDATA:More DATA,USB双缓冲(ep_kind配置使能)切换机制对应到DATA0和DATA1
Quirks:the attributes of a device that are considered to be noncompliant with expected operation
SL811HS:Cypress/ScanLogic 811 Host/Slave,性能上与ISP1161(Integrated host Solution Pairs 1161)相当
TDI:TransDimension Inc.,该公司首先发明了将TT集成到EHCI RootHub中的方法,这样对于嵌入式系统来说,就省去了OHCI/UHCI的硬件,同时降低了成本,作为对该公司的纪念,Linux内核定义了宏ehci_is_TDI(ehci);产品UHC124表示USB Host Controller;收购了ARC USB技术;现已被chipidea收购,chipidea又被mips收购
TT:Transaction Translator(事务转换器,将USB2.0的包转换成USB1.1的包)
USB BH reset:Bigger Hammer or Brad Hosler,表示warm reset;you may be confused why the USB 3.0 spec calls the same type of reset "warm reset" in some places and "BH reset" in other places. "BH" reset is supposed to stand for "Big Hammer" reset, but it also stands for "Brad Hosler". Brad died shortly after the USB 3.0 bus specification was started, and they decided to name the reset after him. The suggestion was made shortly before the spec was finalized, so the wording is a bit inconsistent.
USB Host枚举时-71错误码可能原因:DP和DM走线太长导致眼图差;DP和DM接反了
USB KVM:KVM是键盘(Keyboard)、显示器(Video)、鼠标(Mouse)的缩写;KVM端口是25-pin,包含VGA接口和USB接口
uSOF:micro Start of Frame,125us

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/999557.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【实操干货】如何开始用Qt Widgets编程?(五)

Qt 是目前最先进、最完整的跨平台C开发工具。它不仅完全实现了一次编写,所有平台无差别运行,更提供了几乎所有开发过程中需要用到的工具。如今,Qt已被运用于超过70个行业、数千家企业,支持数百万设备及应用。 在本文中&#xff0…

PHPWord 模板输出checkbox复选框和checked已勾选状态,以及 模板替换时数据如何分行

PHPWord 模板输出checkbox复选框和checked已勾选状态,以及 模板替换时数据如何分行 期望目标 和 模板配置复选框代码数据分行显示在使用PHPWORD模板替换时,经常会有 动态渲染选择项 和 选择项需要被勾选的要求,以及动态数据分行显示等要求。 本文根据 空复选框、勾选复选框…

加强身份验证安全性:深入了解身份证二要素核验API

前言 在数字化时代,随着在线业务和电子交易的不断增加,确保用户的身份安全变得至关重要。身份验证是许多行业的核心要素,从金融机构到电子商务,从社交媒体到医疗保健,都需要有效的方式来确认用户的真实身份。传统的用…

《向量数据库指南》——向量数据库的底层原理是什么?

向量数据库的底层实现原理可以根据具体的数据库系统和索引方法而有所不同。不同的向量数据库可能使用不同的数据结构和算法来支持高效的向量存储和相似性搜索。以下是一些常见的底层实现原理和概念: 1、向量存储: 数据结构:向量数据库通常使用数据结构来存储向量数据。这些数…

MOTOROLA MVME5500 电源模块

MOTOROLA MVME5500 MOTOROLA MVME5500 电源模块通常是用于 MVME5500 控制主板模块的附属设备,其主要功能是为主板和相关外围设备提供电力供应和管理。以下是通常情况下MOTOROLA MVME5500 电源模块的产品功能: 电源输出:MOTOROLA MVME5500 电源…

在Ubuntu上建立博客网站,利用Cpolar+Inis快速实现专业写作

文章目录 前言1. Inis博客网站搭建1.1. Inis博客网站下载和安装1.2 Inis博客网站测试1.3 cpolar的安装和注册 2. 本地网页发布2.1 Cpolar临时数据隧道2.2 Cpolar稳定隧道(云端设置)2.3.Cpolar稳定隧道(本地设置) 3. 公网访问测试总…

从 Clickhouse 到 Apache Doris:有赞业务场景下性能测试与迁移验证

本文导读: 当前,电商运营的主要痛点不仅来自多变的市场和客户需求,也受困于碎片化用户触达等带来的竞争与挑战。为了深度挖掘用户价值、培养用户忠诚度、实现业绩增长,有赞为商家搭建了全方位 OLAP 分析系统,提供实时…

mysql技术文档--mysql锁专精--锁全解!!!

简单认识: 在使用MySQL数据库时,锁可用于控制并发访问和修改数据库中的数据。它们确保在某个事务正在读取或修改数据时,其他事务不能同时对同一数据进行读取或修改操作。 MySQL提供了多种类型的锁,包括共享锁(Shared …

Spring Cloud学习笔记【消息总线-SpringCloud Bus】

SpringCloud Bus概述 概述 Spring Cloud Bus是Spring Cloud生态系统中的一个组件,用于实现微服务架构中的消息总线。它利用了轻量级消息代理(如RabbitMQ或Kafka)作为通信中间件,实现了在分布式系统中的消息传递和事件广播。 Sp…

FOXBORO FBM230 P0926GU通讯卡

通信接口:FBM230 P0926GU 通讯卡通常支持多种通信接口,如以太网、Modbus、Profibus、DeviceNet 等,以便与其他设备和控制系统进行数据通信和集成。 数据传输:它们用于在自动化系统中传输数据,包括监测和控制数据、传感…

网安周报|Chaes恶意软件的新Python变种针对银行和物流行业

1、Chaes恶意软件的新Python变种针对银行和物流行业 银行和物流业正受到名为Chaes的恶意软件的重新设计变种的冲击。Chaes于2020年首次出现,它的目标是拉丁美洲(尤其是巴西)的电子商务客户,以窃取敏感的财务信息。该恶意软件的最新…

Xcode 真机调试之Unable to install “xxx“,Code: -402653103

背景 Xcode14.0,使用Cocoapods引入三方库后编译成功运行项目报无法安装 Details DetailsUnable to install "HHTestGenerate" Domain: com.apple.dt.MobileDeviceErrorDomain Code: -402653103 User Info: {DVTErrorCreationDateKey "2023-09-11 0…

Pytorch框架详解

文章目录 引言1. 安装与配置1.1 如何安装PyTorch1.2 验证安装 2. 基础概念2.1 张量(Tensors)2.1.1 张量的基本特性2.1.2 创建张量2.1.3 张量操作 2.2 自动微分(Autograd)2.2.1 基本使用2.2.2 计算梯度2.2.3 停止追踪历史2.2.4 自定…

uniapp h5 微信缓存,解决版本更新还是旧版本

文章目录 一、微信缓存是什么?二、如何解决1.打包入口文件解决2.给请求url加时间戳3.给打包的js文件添加时间戳并修改打包后的css文件夹 总结 一、微信缓存是什么? 微信缓存是指微信客户端为了提高用户的使用体验,会在用户使用微信过程中将一…

张量的连续性、contiguous函数

在pytorch中,tensor的实际数据以一维数组(storage)的形式存储于某个连续的内存中,以“行优先”进行存储。 tensor的连续性 tensor连续(contiguous)是指tensor的storage元素排列顺序与其按行优先时的元素排…

非科班菜鸡算法学习记录 | 代码随想录算法训练营完结!

这俩月终于结束了233333,之后就是反复复习和背八股了吧,然后整整项目春招再投投投,感觉大部分题都有思路了但是做过的题也会没思路,还是要复习 总结 数组: 双指针用的很多,一般一个指向遍历位置&#xff0…

解决微信开发者工具企业微信小程序模式下模拟器白屏问题

前一天晚上没有关电脑,第二天发现电脑自己重启了,然后微信开发者工具就出了问题,在企业微信小程序模式下,模拟器出现了白屏,只有上方title可以正常显示。点击模拟器右上角三个点都不出弹出菜单,并且在调试器…

VPS使用环境受限?亚马逊云科技Amazon Lightsail为开发者提供更多选择

对于开发者而言,当你想构建系统架构时,你的面前就出现了两种选择,选择一是花时间去亲手挑选每个亚马逊云科技组件(云服务器、存储、IP地址等),然后自己组装起来;选择二是只需要一个预先配置且预…

NFTScan | 09.04~09.10 NFT 市场热点汇总

欢迎来到由 NFT 基础设施 NFTScan 出品的 NFT 生态热点事件每周汇总。 周期:2023.09.04~ 2023.09.10 NFT 热点资讯 01/ 数据:Blend 交易总额突破 20 亿美元,较六月底增长一倍 9 月 4 日,据数据显示,Blur 旗下 NFT 借…

Aztec的隐私抽象:在尊重EVM合约开发习惯的情况下实现智能合约隐私

1. 引言 Aztec的架构,不同于当前“通过EVM兼容执行环境”所实现的区块链水平扩容趋势。Aztec内部笑称其构建的为首个非zkEVM协议。 Aztec专注于实现: 成为理解和需要智能合约隐私的开发者的终极解决方案。 Aztec为开发者提供构建隐私优先app所需的网…