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

发布者:MoonlightStar最新更新时间:2007-09-12 来源: 电子设计信息网关键字:内核  接口  函数  调用 手机看文章 扫描二维码
随时随地手机看文章

前 言

随着各种便携嵌入式设备性能的日益提高,功能日益丰富,其电源紧张的问题也日益突出,国内新推出的某些具有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所示。

图1 Linux电源管理行为过程

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

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

iPAQ硬件耗电量分析

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


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

可见, 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电源管理和耗电量调节

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

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

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

SA - 1110进入Sleep模式的代码片断如下:

extern void cpu_sa1110_resume ( void) ; /3 SA - 1110返回函数3 /
extern int cpu_sa1110_do_suspend ( void) ; /3 SA - 1110睡眠函数3 /
int sa1110_suspend ( void)
{
. . .
cli ( ) ; /3 关闭中断3 /
sys_ctx. osmr0 = OSMR0; /3 保存重要的寄存器3 /
. . .
sys_ctx. p sdr = PSDR;
. . .
PSPR = virt_to_phys ( cpu_sa1100_resume) ; /3 设置返回函数地址3 /
cpu_sa1110_do_suspend ( ) ; /3 进入睡眠3 //3 退出睡眠3 /
GPDR = sys_ctx. gpdr; /3 恢复寄存器3 /
GRER = sys_ctx. grer;
GFER = sys_ctx. gfer;
GAFR = sys_ctx. gafr;
. . .
sti ( ) ; /3 启动中断3 /
return 0;
}

(2)实现各个外设的电源管理代码

利用Linux内核提供电源管理子系统,可以将iPAQ中的每个需要实现电源管理的外部设备纳入统一的管理。这需要在各个设备的驱动程序中使用电源管理子系统的接口函数(如2. 1所描述)和实际的硬件操作代码,这里将以显示设备为例:

/3 SA - 1110 frame buffer电源管理请求处理函数3 /
static int sa1110fb_pm_callback ( struct pm_dev 3 pm_dev, pm
_request_t req, void 3 data)
{
struct sa1110fb_info 3 fbi = pm_dev - > data;
if ( req = = PM_SUSPEND | | req = = PM_RESUME) {
int state = ( int) data;
if ( state = = 0) {
set_ctrlr_ state ( fbi, C_ENABLE) ; /3 进入D0 模式,开启LCD控制器3 /
} else {
set_ctrlr_state ( fbi, C_D ISABLE) ; /3 进入D1 - D3模式关闭LCD 控制器. 3 /
} }
return 0;
}
/3 SA - 1110 frame buffer驱动初始化函数3 /
int __init sa1110fb_init ( void)
{
struct sa1110fb_info 3 fbi;
int ret;
. . .
/3 在电源管理子系统中注册3 /
fbi - > pm = pm _ register ( PM _SYS_DEV, PM _SYS_VGA,
sa1110fb_pm_callback) ;
if ( fbi - > pm)
fbi - > pm - > data = fbi; /3 设置私有数据3 / . . .
return ret;
}

(3)实现电源管理设备

这个设备实际是用于接受用户空间程序的控制所用,所以只需要简单的实现“ioctl”调用就可以了。
 
/3 ioctl调用方法3 /
static int do_ioctl ( struct inode 3 inode, struct file 3 filp, u_int
cmd, u_long arg)
{ . . .
switch ( cmd) {
case APM_ IOC_STANDBY: {
pm_send_all ( PM_SUSPEND, ( void 3 ) 2) ; /3 外设挂起3 /
} break;
case APM_ IOC_RESUME: {
pm_send_all ( PM_RESUME, ( void 3 ) 0) ; /3 外设唤醒3 /
} break;
case APM_ IOC_SUSPEND: {
pm_send_all ( PM_SUSPEND, ( void 3 ) 2) ; /3 外设挂起3 /
sa1110_suspend ( ) ; /3 CPU进入休眠模式3 /
/3 CPU醒来,继续执行3 /
pm_send_all ( PM_RESUME, ( void 3 ) 0) ; /3 唤醒外设3 /
} break;
default:
return - EINVAL;
}
return 0;
}

最后,使用命令“mknod /dev/ apm c 254 0”,可以在文件系统中建立起该设备的访问节点。该节点名为/dev/ apm,是一个字符设备( c) ,主设备号为254,此设备号为0。

(4)编写用户空间电源管理程序

用户可以在适当的时候选择是否改变CPU的时钟频率和显示刷新率,是否关闭某些外部设备,是否使整个系统进入睡眠模式等等。这只需要使用系统调用“ioctl”对电源管理设备( /dev/ apm)发送命令就可以了。
int fd;
. . .
fd = open ( " /dev/ apm" , O_RDONLY) ; /3 打开电源管理设备3 /
ioctl ( fd, APM_ IOC_SUSPEND,NULL) ; /3 发送电源管理命令3 /
close ( fd) ; /3 关闭电源管理设备3 /

实现iPAQ电源管理前后耗电量比较

实现电源管理以前:开启LCD, CPU 处于空闲状态,大多数其他芯片关闭,功耗为470mW。实现电源管理以后:在电源管理前的基础上开启SDRAM 的自动节能模式,功耗下降到280mW。然后降低LCD刷新率到30Hz, 功耗下降到238mW。再把CPU频率降低到57. 3MHz,功耗下降到172mW。最后关闭LCD,功耗下降到98mW。可见,通过本文方案的调节和优化, iPAQ的耗电量确实可以得到有效地改善,最大优化后的耗电量仅为优化前的五分之一,从而大大提高了iPAQ的电池使用时间。

结 论

在嵌入式设备中,电源管理是一个硬件和软件相结合的系统工程。本文介绍了已有的节能方法和Linux电源管理的机制, 并且以iPAQ 为例通过Linux的电源管理机制和上层应用软件,设计和实现了一个较完整和有效的电源管理方案,为众多基于Linux系统的嵌入式设备的电源管理提供了一个有用的参考。

关键字:内核  接口  函数  调用 引用地址:便携嵌入式设备电源管理解决方案

上一篇:电源瞬时波动对微机的影响及防护
下一篇:大功率便携式设备的电源管理挑战及其解决方案

推荐阅读最新更新时间:2024-05-13 18:38

填补产品空缺 AMD计划推出三内核处理器
9月19日消息,据国外媒体报道,AMD公司打算在当前双内核处理器和即将推出的四内核台式机处理器的基础上再增加三内核台式机处理器。 三内核处理器的功能设计与双核处理器相同,它们都基于将于2008年第一季度推出的Phenom架构。 目前,英特尔公司是惟一提供四内核台式机处理器的芯片制造商,英特尔公司没有在公开场合提到有关销售三内核处理器的计划。 AMD公司声称,三内核处理器将具有竞争力,因为对普通台式机而言,AMD的四内核产品过于强大。市场份额数据表明,在台式机市场上,四内核处理器还不到2%。 AMD公司负责营销与战略的副总裁Brewer在旧金山举行的新闻发布会上表示:“我们自己的多内核设计将提供无缝程度更高的系列产品,以便满
[新品]
基于FPGA的电台接口转换模块
摘要: 目前市场上电台接口转换模块大多都采用模拟电路,其带来稳定性差,工艺复杂等缺陷。通过采用数字信号处理技术来处理信号通信,提高信号的传输速率和降低传输的误码率,并提高系统的稳定性,节省信道资源。这里采用FPGA作为核心芯片来设计和开发,利用DSP Builder来仿真FFT实验,用OuartusⅡ软件开发设计此接口转换模块,最终获得的模块电路系统稳定,PTT信号更纯净。 一般来说,无线电台通信采用半双工通信方式,一方在发送话音信号的同时,不能接收另一方的话音信号。因此电台的通信接口分为两部分,一部分为话音信号接口,用于发送接收话音,另一部分为PTT控制信号接口,用于控制电台的发送接收状态。然而,目前有许多通信设备,
[嵌入式]
基于FPGA的电台<font color='red'>接口</font>转换模块
脑机接口让失语者以意念准确“发声”
《自然》23日发表的两篇论文报告了新的脑机接口装置,其不仅能将大脑活动解码为语言,而且比当前所有技术都更迅速、更准确且覆盖词汇量更大。这一成果展示了在帮助严重瘫痪人群恢复沟通能力方面的技术进步。 研究进行中。 图片来源:《自然》网站 由美国斯坦福大学团队开发的脑机接口装置,可以通过插入大脑的细电极阵列收集单个细胞的神经活动,并训练人工神经网络来解码病人想说的话。在该装置的帮助下,一名肌萎缩性侧索硬化症病人能以每分钟62个词的速度进行交流,这种语速是此前类似装置的3.4倍,更加接近自然对话(每分钟约160个词)。该装置在50个单词的词汇量下错误率为9.1%,比此前最先进的语言脑机接口装置低至约1/3。在使用12500词汇量时,
[医疗电子]
脑机<font color='red'>接口</font>让失语者以意念准确“发声”
STM32程序无法进入main函数的解决方法
很多人在基于STM32单片机项目开发过程中,会遇到STM32程序无法进入main的现象,在这篇文将分享STM32程序无法进入main函数的解决方法,希望对用户有所帮助。 1.printf等函数采用了半主机模式 解决方法:关掉半主机模式,将输入输出端重定向到ARM器件上,重写fputc和fgetc函数。 2.系统滴答systick中断导致无法进入main函数 解决方法有两种: 1)在bootloader程序跳转到app层时就关闭系统滴答中断:SysTick-》CTRL &= ~SysTick_CTRL_ENABLE_Msk; 2)在SystemInit函数关闭系统滴答中断:SysTick-》CTRL &= ~SysTick_CT
[单片机]
MSP430F5438中断函数两种编写方法
以USCI0为例,说明该两种不同方法。 1.switch-case方法 #pragma vector=USCI_A0_VECTOR __interrupt void USCI_A0_ISR(void) { switch(__even_in_range(UCA0IV,4)) { case 0: break; case 2: // 接收中断 // do something here break; case 4: // 发送中断 // do something here break; def
[单片机]
ADSP-TS201的系统设计及外部总线接口技术
  1 引言   随着雷达技术发展,大带宽高分辨力、多种信号处理方式的采用,使得实时信号处理对数据的处理速度大大提高。同时在雷达信号处理中运算量大,数据吞吐量急剧上升,对数据处理的要求不断提高。随着大规模集成电路技术的发展,作为数字信号处理的核心数字信号处理器(DSP)得到了快速的发展和应用。ADSP-TS201DSP是美国模拟器件(ADD公司继TSl01之后推出的一款高性能处理器。此系列DSP性价比很高,兼有FPGA和ASIC信号处理性能和指令集处理器的高度可编程性,适用于大存储量、高性能、高速度的信号处理和图像处理。如雷达信号处理、无线基站、图像音频处理等。   2 ADSP-TS201简介   ADSP-TS201采用
[嵌入式]
一种基于DSP与FPGA的高速通信接口设计方案
在雷达信号处理、数字图像处理等领域中,信号处理的实时性至关重要。由于 FPGA 芯片在大数据量的底层算法处理上的优势及 DSP 芯片在复杂算法处理上的优势, DSP + FPGA 的实时信号处理系统的应用越来越广泛。ADI公司的TigerSHARC系列 DSP 芯片浮点处理性能优越,故基于这类。DSP的DSP+ FPGA 处理系统正广泛应用于复杂的信号处理领域。同时在这类实时处理系统中,FPGA与DSP芯片之间数据的实时通信至关重要。 TigerSHARC系列DSP芯片与外部进行数据通信主要有两种方式:总线方式和链路口方式。链路口方式更适合于FPGA与DSP之间的实时通信。随着实时信号处理运算量的日益
[嵌入式]
一种基于DSP与FPGA的高速通信<font color='red'>接口</font>设计方案
英特尔32内核芯片将于明年上半年推出
英特尔展示了其即将推出的Larrabee芯片的图片,表明这种芯片是一个32内核的图形处理引擎。 正如各个地方的报道所说的那样,Larrabee是英特尔对Nvidia和AMD图形处理器芯片的回应。Larrabee将是一个32个内核的处理器。每一个内核都是一个x86内核。每一个内核都配置一个矢量处理单元。Larrabee将有一个共享的缓存池,芯片的周边有内存接口。 在德国萨尔大学可视化计算研究所的揭幕仪式上,英特尔企业技术事业部副总裁和微处理器技术实验室经理Joseph Schultz说,Larrabee芯片将在明年上半年推出,比原来预测的2009年晚些时候推出的日期推迟了。 英特尔强调了这种处理器的可编程性,称这种处理器芯片比
[嵌入式]
小广播
最新应用文章
换一换 更多 相关热搜器件

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 安防电子 医疗电子 工业控制

词云: 1 2 3 4 5 6 7 8 9 10

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved