数码电源管理:Windows Mobile电源管理分析与实现
如今在以数码消费产品为代表的嵌入式系统领域,大多数系统采用电池供电,由于电池容量有限,这使得实现产品的低功耗,延长待机时间成为一个重要的课题。在已确定硬件电路功耗的情况下,提高电池电源的使用效率是实现低功耗的一个重要任务,其基本思想是在系统中没有任务等待运行时,把系统置于尽可能低的能量状态,等到有任务需要执行时,再将其快速唤醒,尽可能有效地利用功耗。
1 Windows Mobile中的电源管理
WinCE系列操作系统中的电源管理模块正是出于后者的考虑而出现的,图1为电源管理(Power Manager)的运行机制。该模块根据系统实际运行情况,以CPU为中心,管理器件和外设的功耗状态,实现系统在不同电源状态间的转换,从而在保证系统性能的前提下降低功耗。而Windows Mobile系统针对其专用于移动通信平台的特点,对电源管理部分做了进一步的定制,使其具有更好的效能,进一步提高系统的电源效率。
Power Manager的实现在软件上需要OS内核、驱动层及应用层的协作,对于预先定义好的系统电源状态,Power Manager将这些状态映射到具体的CPU电源状态和设备电源状态,在系统电源状态切换时就会执行对应的CPU和外设的电源状态切换操作。
1.1 电源管理与系统其他部分的交互
在Windows Mobile中Power Manager以名为PM.dll的动态链接库形式在启动时被设备管理器De-vice.exe加载,如图2所示。
应用程序可通过API申请将系统电源置于一定的状态,同时也可申请将指定设备设置于特定的电源状态,应用程序也可以申请电源状态通知,以便在系统电源状态切换时收到消息以执行对应的操作。当需要切换系统电源状态时,电源管理模块与电源管理的设备通信,进而调用这些设备的电源相关函数,实现对这些设备的电源管理,同时如果有应用程序或设备驱动申请了电源状态通知,则电源管理模块会向消息队列中发送消息。
1.2 Windows Mobile中的电源状态以及状态间的切换
Windows Mobile有两个版本,SmartPhone和Pocket PC,这里采用是Windows Mobile 6的PocketPC,它定义了以下几个电源状态(Windows Mobile的电源状态是不能像WinCE那样再定制的):
ON:用户与系统交互时的状态;
Backlight OFF:在一段时间内(默认15 s),如果一直没有用户操作就关闭背光,这时其他的设备都没变化;
Screen OFF:一般由某些程序指定,才进入这个状态。比如音乐播放器程序,当你听音乐时按下某个键可以将屏幕关闭;
Suspend:Pocket PC的睡眠模式,几乎所有设备都被关闭,直到某个硬件设备触发中断才将系统唤醒,这是Pocket PC系统中功耗最低的一个状态,对这个状态的实现直接影响到待机时间;
Resuming:Pocket PC被唤醒后的状态,这时屏幕是关闭的,并启动一个15 s的计时器,在这段时间内决定接下来进入哪个状态,如果计时器超时则重新回到睡眠状态;
Unattended:这个状态只在Pocket PC中被使用,用户对其不会有所察觉,即程序在后台执行。
这里可以用系统电源状态机来简单地描述Win-dows Mobile的电源管理策略。以Pocket PC为例,系统电源状态机如图3所示。
系统内部的电源管理器负责协调电源状态的转换,电源状态的转换主要由计时器超时(Timeout)、电源键事件(ON/OFF Event)、用户操作(User Activity)等方式触发。
2 PXA270平台上电源管理的实现
电源管理的实现,涉及到系统中软件硬件的互相配合。对于软件来说,涉及到各个层面,包括Windows Mobile内核和设备驱动,这二者主要负责电源管理在处理器和物理外设等硬件上的实现,另外有些应用程序也会有涉及,这主要是系统电源状态与具体应用需求之间的协调。这里应用的平台是开发的基于PXA270的Windows Mobile智能手机平台,该平台搭载了NXP的基带处理器及其外围电路。以实现GSM通信。另外,还有蓝牙、摄像头等功能模块,因此对该平台进行电源管理优化是十分必要的。
2.1 内核电源管理的实现
2.1.1 Suspend/Restlume模型
对于SmartPhone,采用的是AlwaysOn模型,只是在工作一段时间后关闭背光和屏幕,但是系统仍在运行。该平台实现的是Pocket PC,采用Suspend/Re-sume模型,在系统处于空闲时,可将系统置于Staspend状态,此时系统处于最低的功耗状态,在必要时再将其唤醒。在两个模型之间需要权衡,虽然Always On没有休眠模式,但是Suspend/Resume在Suspend和ON之间切换也是需要消耗大量能量的。系统电源状态的切换最终会导致内核中OEM函数的调用,下面重点介绍内核中电源管理的实现,在Windows Mobile的样例BSP中有示例代码框架在Off.c和Xllp_SuspendAn-d
- 电源设计小贴士 1:为您的电源选择正确的工作频率(12-25)
- 用于电压或电流调节的新调节器架构(07-19)
- 超低静态电流电源管理IC延长便携应用工作时间(04-14)
- 电源设计小贴士 2:驾驭噪声电源(01-01)
- 负载点降压稳压器及其稳定性检查方法(07-19)
- 电源设计小贴士 3:阻尼输入滤波器(第一部分)(01-16)