Android USB电源管理

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

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Android PMIC(功率管理集成电路)是指安卓系统中的功率管理芯片。功率管理芯片是一种用于控制电源供应和节能管理的关键组件,用于监控和管理移动设备中的电池和电源相关的功能。 Android PMIC主要功能有以下几点: 1. 电源管理Android PMIC负责给移动设备供电,同时监控电池的电量情况,并提供电池充电控制功能。它能够在充电器接入时,根据需要对电池进行充电,并在电池电量过低时发出警告。 2. 节能管理Android PMIC能够监测处理器和其他组件的使用情况,并根据需要动态调整电源输出以节省能源。它可以在设备不活动时进入休眠模式,减少功耗并延长续航时间。 3. 温度管理Android PMIC能够监测设备内部和外部的温度,并根据需要调整功率输出和散热策略,确保设备不会过热。 4. 电源管理Android PMIC还具备多种电源管理功能,如USB充电器检测、电流和电压保护等。它能够检测外部充电器的参数,并根据设备需求调整电源输出。 总而言之,Android PMIC是移动设备中的一种关键电路芯片,用于管理供电和节能。它监控电池状态、控制充电过程、管理功耗和温度,并确保移动设备的正常运行和延长续航时间。 ### 回答2: Android PMIC是指Android系统中的功率管理集成电路(Power Management Integrated Circuit)。 Android是一种广泛使用的移动操作系统,它运行在各种移动设备上,如智能手机、平板电脑和可穿戴设备等。为了保证这些移动设备的正常运行,需要一个专门的电源管理系统来提供电源、调节电压和电流,以及控制各种电源模式。 PMIC是这个电源管理系统的核心部件。它是一种专用的集成电路芯片,具有多个功能模块,包括DC-DC转换器、充电管理、电池监测和电池保护等。PMIC负责从电源或电池获取电能,并将其转换为设备所需的稳定电压和电流。它还可以监测电池的状态,以预测电池寿命和提供适当的保护措施。 Android PMIC可以根据设备的使用需求,动态地调节电源模式以提供最佳的电池寿命和性能。当设备处于待机状态时,PMIC可以将电源电压降低到最低限度,以节省电池能量。而在设备进入高负载操作时,PMIC可以提供更高的电源电压和电流,以确保设备正常工作。 总之,Android PMIC是Android系统中的一个重要部件,它负责设备的电源管理和供电控制。通过优化电源管理,PMIC可以提供更长的电池寿命和更高的性能,为用户提供更好的移动体验。 ### 回答3: Android PMIC(Power Management Integrated Circuit)是一种用于管理和控制电源的集成电路,主要用于Android设备。 Android PMIC主要功能包括电源管理、电池管理和充电管理。它负责监控设备的电池电量,并通过电池管理器来管理电池的充放电过程,以确保电池的安全使用和延长寿命。同时,Android PMIC还能够提供电源给设备内部的各个模块,如处理器、内存、无线模块等,保证它们能正常工作。 Android PMIC在电源管理方面的功能主要包括采集电池电量信息、电池电压和电流监测、电池保护(如过充、过放、短路保护等)、电源模块的开关控制和转换(如DC-DC转换器)等。它能够根据实际需要,自动调整设备的供电模式,以提高电池的使用效率和续航时间。 在充电管理方面,Android PMIC负责监控设备的充电状态和过程,确保安全且高效的充电。它能够根据电池的状态和充电需求,智能调整充电电流和电压,同时还能提供快速充电(如QC)、无线充电等功能。 Android PMIC的设计和选择对于Android设备的性能和使用体验至关重要。一个高质量的PMIC能够提供稳定的电源供应,延长电池寿命,同时最大程度地提高设备的性能和效率。因此,在Android设备的开发过程中,PMIC的选择和优化是非常重要的一环。 总之,Android PMIC是一种集成电路,用于管理和控制电源的功能,包括电源管理、电池管理和充电管理。它对于Android设备的性能和续航时间有重要影响,是Android设备开发过程中需要重视的一部分。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值