便携嵌入式设备电源管理解决方法

2020-06-16      968 次浏览

前言


随着各种便携嵌入式设备性能的日益提高,功能日益丰富,其电源紧张的问题也日益突出,国内新推出的某些具有pDA等多种功能的智能电话在密集使用下只能维持半天,多数摄像机和数码相机在一次充电后都只有一个小时左右的累积工作时间。Linux作为一个开放源代码的操作系统,拥有非常丰富的软件资源和平台支持,这使得嵌入式系统开发的周期大大缩短,越来越多的商用和通用嵌入式系统都采用Linux作为软件平台。因此有必要对Linux系统的电源管理机制进行深入研究。


Linux内核电源管理机制分析


Linux作为一个强大而成熟的操作系统,本身供应了一套从用户空间到系统空间的,由上而下的软件电源管理机制。


电源管理子系统


Linux内核实现了一个电源管理子系统用于统一管理每个设备。源代码pm.h和pm.c中含义和实现了重要的接口函数。如表1所示。


通过这些接口函数就可以将自己的硬件设备纳入电源管理子系统使其成为系统电源管理的一部分。这要在编写设备驱动程序的时候完成下面的工作:


1)在初始化驱动时,使用pm_regiSTer对设备的每个实例(instance)进行注册;在清除驱动时使用pm_unregister来取消设备的注册。


(2)在对硬件进行操作之前调用pm_access(这样会保证设备已被唤醒并且处于ready状态)。


(3)编写自己的pm_callback函数。开发人员应该在设备或系统进入suspend状态时保留设备和系统的上下文到安全的地方,并在设备或系统re-sume时恢复其上下文,使之能够继续运行,编写pm_callback函数是驱动实现设备电源管理的重点。


(4)当设备不在被使用的时候调用pm_dev_idle函数,这个操作是可选的,可以增强设备idle状态的监测能力。


电源管理设备


将设备加入到电源管理子系统后,该设备就已经有了处理电源管理请求的能力,但是系统的电源管理行为并不会主动发生。因此还要一个电源管理设备来接受用户请求,出现电源管理行为。这里所指的设备并不是一个真实的硬件设备,而是一个在Linux系统空间里接受用户控制的虚拟设备,它可以是一个简单的字符型设备。有了这个设备,就可以方便的实现来自于用户空间的电源管理请求和方法。Linux电源管理行为过程如图1所示。


图1Linux电源管理行为过程


Linux的电源管理机制在ipAQ上的应用


ipAQ是康柏公司(现在已和惠普公司合并)推出的基于StrONgARMCpU的高性能掌上电脑,不仅供应了卓越的个人信息管理工具,还集成了较为强大的多媒体功能和其他娱乐功能。Linux2.4的内核已经被成功的移植到上面,基于Linux系统众多的应用软件也已经或正在被移植。


ipAQ硬件耗电量分析


要实现对ipAQ耗电量的有效调节,就必须清楚各个硬件耗电量,从而确定出要管理和调节的对象。ipAQ上的各种硬件的耗电量比例如图2所示。


图2ipAQ上的各种硬件的耗电量比例


可见,Frontlight、LCD、SDRAM、Audio、CpU等是重要的耗电设备,应该尽可能的减少这些设备的工作时间和强度,以减少耗电量,其关键步骤如下:首先,开启SDRAM的自动节能模式。ipAQ所使用的SA-1110支持SDRAM的自动节能模式;在这种模式中,当内存不被使用时,CpU将关闭输入到内存的时钟信号,内存停止工作;这样将减少大约190mW的功率。


接着,调节显示驱动。可以选择(1)在必要的时候关闭背光;(2)降低LCD的刷新率。LCD在正常情况下刷新率是60Hz,通过调节LCD按时器可以调节LCD的刷新率使其低于60Hz。降低LCD刷新率后,可以减少SDRAM,总线的使用和减少功耗;(3)在不使用屏幕的时候关闭LCD控制器。


随后,降低时钟频率。SA-1110的时钟频率可以在57.3MHz到214.8MHz之间动态调节。降低CpU时钟频率可以减少CpU本身的功耗,同时也能减少时钟由CpU供应的其他硬件的功耗。例如:SA-1110工作在最低频率时可比工作在最高频率时减少100mW到200mW的功耗。


最后,关闭音频芯片。在不使用声音的时候,尽量关闭音频芯片,并保持CpU到音频芯片的低输入。


通过Linux电源管理机制及上层应用实现对ipAQ电源管理和耗电量调节


确定了要调控的对象和方法后,要通过Linux的电源管理机制和上层应用软件来实现对这些硬件设备的控制。这包括编写CpU电源管理代码、外设驱动程序及电源管理代码、电源管理设备实现代码和用户空间控制应用代码。


(1)实现SA-1110进入Sleep电源模式的代码


SA-1110有Normal,Idle,Sleep等几种电源模式,其中在Sleep模式下,SA-1110具有最小的电力消耗。由于SA-1110进入Sleep模式后,到外设和SDRAM的时钟将停止,多数的寄存器信息将丢失。因此要事先将重要的寄存器值保存到内存中,并将SDRAM设置为自刷新模式,以保持SDRAM中的数据。当SA-1110收到硬件中断等唤醒源退出Sleep模式后不会接着执行先前未执行的指令,而是回到初始状态去执行启动代码。因此为了让CpU在唤醒后能够持续的工作,要将返回代码的地址保存到powerManagerScratchpadRegister(pSpR)寄存器中,使得启动代码能让CpU重新跳到返回代码的地址处,执行返回代码从而回到睡眠前的工作。

相关文章

推荐品类

为您推荐

东莞市钜大电子有限公司 粤ICP备07049936号