基于S3C6410的嵌入式系统休眠与唤醒策略设计与实现*

2014-03-23 06:02宋丽华张鑫磊鲍世昆
计算机工程与科学 2014年5期
关键词:调用功耗中断

宋丽华,战 颖,简 阳,张鑫磊,鲍世昆

(北方工业大学信息工程学院,北京100144)

1 引言

随着便携式嵌入式设备功能需求的增长,系统的电池储能能力增长速度越来越不能与之相匹配,因此对系统有限电能进行管理已成为嵌入式系统的一个重要研究方向[1]。电源管理的一个关键部分就是对系统的功耗模式进行切换,系统的休眠与唤醒则是其中的一种低功耗工作切换方式。Win-dows Embedded CE 6.0可以为多种类型的嵌入式设备构建实时操作系统,具有Windows平台兼容性、可定制性和高稳定的特点,集成部分电源管理接口[2];S3C6410是基于ARM架构的嵌入式处理器,具有低功耗、高性能的特点,支持多种功耗模式,集成内核电源管理模块[3]。基于S3C6410处理器和Windows Embedded CE 6.0操作系统的特点,实现系统休眠与唤醒,以达到通过切换功耗模式来实现电源管理的目的。系统休眠与唤醒作为电源管理的核心模块,直接调度整个嵌入式系统的电源能耗,对整个系统的电源管理起着至关重要的作用[4]。

2 休眠与唤醒策略硬件相关技术介绍

2.1 Windows Embedded CE 6.0休眠实现方式

在微软的Windows Embedded CE 6.0操作系统中,通过以下四种方式可以使得操作系统进入休眠状态:

(1)用户在操作系统桌面的开始菜单选择挂起选项;

(2)用户短按电源开关键,请求系统进入休眠;

(3)用户长时间无操作,根据嵌入式操作系统中电源管理策略将系统状态由POWER_STATE_ON转为POWER_STATE_USERIDLE、POWER_STATE_IDLE状态,最后进入POWER_STATE_SUSPEND,即休眠状态;

(4)用户可以在设备驱动或者应用程序中调用Windows Embedded CE 6.0操作系统提供的标准电源管理函数接口SetSystemPowerState来对系统电源状态进行设置[4]。

2.2 S3C6410电源控制模块分析

S3C6410芯片中的电源管理模块支持五种功耗模式:NORMAL模式、IDLE模式、STOP模式、DEEP-STOP模式和SLEEP模式。最低功耗模式的体现是:在SLEEP模式下,除了系统的唤醒源模块和实时时钟RTC以外,电源管理模块将CPU和其他具有电源控制能力的内部逻辑模块的电源关闭。S3C6410在此模式中,绝大多数内部电源都已经断电,不仅是RTC和电源管理器的内部单元ALIVE模块,其他内部所有的时钟源和外部低电压电源的供电也处于无效状态。本文采用的开发板处理器电源模块部分处于可控状态。由于ADC/DAC模块和ALIVE模块需要一直处于供电状态,因此它们是不可控的,电源可控部分包括USB OTG、Mobile DDR、PLL和系统I/O模块,它们在休眠与唤醒的过程中是可以控制的。图1为部分可控电源域的硬件连接方式。

三星S3C6410芯片内部可预先设定IO接口的状态,系统恢复要通过预设的外部事件或者指定的内部唤醒事件。系统进入休眠模式时,S3C6410按照预设的顺序关闭内部的可控电源,同时关闭外部可控逻辑的电源域,使得系统的大部分供电关闭,即将系统CPU的XPWRRGTON引脚置位,使得外部电源关闭,同时S3C6410芯片的VDD_PLL、VDD_OTG、VDD_IO等掉电。系统的休眠与唤醒模式如图2所示,CPU内部的电源控制逻辑一直处于供电状态,它通过XPWRRGTON控制外部的电源管理电路,同时外围的电源管理电路反馈控制CPU的内核系统供电,系统的休眠唤醒事件都是通过内部的电源控制逻辑对整个系统进行休眠或者唤醒。

Figure 1 Controllable power domain connecter图1 可控电源域的硬件连接方式

Figure 2 Sleep mode and wakeup mode on S3C6410图2 S3C6410系统休眠与唤醒模式

为使得系统执行任务时处于最优的功耗状态,S3C6410芯片在电源控制逻辑模块具备多种电源管理方案,总体上主要包括电压/时钟调节、时钟选通、电源供应选通三种方案。电压/时钟调节是指通过降低电压和时钟来减少活动功耗和静态功耗。S3C6410芯片电源管理由四个模块组成,它们分别是通用时钟门控模式、闲置模式、停止模式和睡眠模式。而所谓时钟选通就是利用这四个模块中的通用时钟门控、闲置或停止模式停止电路时钟,即让时钟从不用的电路模块断开进而减少活动功耗;电源供应选通则是利用睡眠模式,断开电路中不使用的模块电源供应。本文所使用的是上述第三种方案——电源供应选通,因此需要用到S3C6410提供的两路独立电源,一路电源给CPU及其内部逻辑供电,另一路电源单独给唤醒逻辑供电[5]。当S3C6410进入休眠时,CPU及其内部逻辑的这一路供电将会停止,仅保留唤醒逻辑的供电和RTC,系统各个电源域的情况如图3所示。

Figure 3 Power domains at sleep mode图3 Sleep模式下的电源域

S3C6410在休眠模式下,通过使用外部电源调节器,使得除了ALIVE模块和RTC模块之外的其他所有硬件逻辑都断电。休眠模式支持待机时间最长,但是用户软件必须将所有的内部状态保存到外部存储设备上或者内存的休眠信息存储区上。ALIVE模块等待外部唤醒事件,同时RTC存储时间信息。用户软件可配置内部唤醒源,也可以通过GPIO配置各个I/O引脚的状态和工作模式作为外部唤醒方式。

S3C6410的唤醒逻辑支持EINT0-15、RTC警告、TICK、键盘中断、MSM、电池故障、HSI和温复位中断,如果休眠期间产生这些中断,系统将恢复对CPU的供电并唤醒CPU。

3 系统设计与实现

本文结合Windows Embedded CE 6.0操作系统的电源管理机制和S3C6410芯片的特性,实现整个系统的休眠和唤醒过程。由于休眠与系统关机在功能上很相似:休眠只比系统关机多了保存现场(各类寄存器)和设置触发事件的步骤,因此掌握系统关机的技术后再实现休眠功能就会相对容易。而唤醒功能包括恢复休眠现场和唤醒源的触发处理,是休眠的逆过程。这一过程如图4所示。

Figure 4 Process of sleep mode and wakeup mode图4 系统休眠与唤醒的过程

下面详细介绍系统休眠与唤醒的实现过程。

3.1 系统休眠设计与实现

Windows Embedded CE 6.0操作系统在休眠之前,首先要根据电源管理的策略对那些支持电源管理的设备进行电源关闭,一般各个设备驱动中的Power Down接口函数将被系统调用实现设备电源的关闭;然后操作系统的底层函数OEMPower Off被调用,使得整个系统进入休眠状态。其中OEMPower Off函数位于三星开发包S3c6410_sec_v1\Oal\Power\off.c文件中,本系统在此文件中实现底层的系统休眠和唤醒。

进入休眠的过程是通过Windows Embedded CE 6.0嵌入式系统应用层面提供的四种方法层层调用,最终调用OEM层的OEMPower Off函数实现的。此函数依次调用BSPPower Off来禁止动态电压管理,并将其设为全速模式,同时禁用RTC控制器,进行GPIO配置和唤醒源的配置;再将特殊功能寄存器物理地址映射到虚拟地址;调用S3C6410_SaveState_VIC函数保存VIC向量中断控制寄存器;禁用所有的中断;调用S3C6410_SaveState_DMACon函数保存DMA控制寄存器;调用S3C6410_SaveState_GPIO函数保存GPIO的状态;调用S3C6410_SaveState_SysCon保存系统控制寄存器的状态;调用OALCPUPoweroff函数,使得CPU进入休眠模式。调用OALCPUPoweroff函数完成当前系统状态信息的保存,将包括SVC寄存器、CP15寄存器等在内的一些关键寄存器里的数据保存到SDRAM的休眠数据区,最后将处理器功耗模式切换到休眠模式。当内核处理器被唤醒以后,板级系统使用SDRAM中的数据恢复整个操作系统。系统休眠的过程可概括地表示为如图5所示的流程。

Figure 5 Process of sleep mode图5 系统休眠过程

由于S3C6410处理器内核在休眠期间是掉电的,当它被唤醒后将会从地址0x00000000重新开始执行指令。也就是说,这时候CPU已经脱离了Windows Embedded CE 6.0的执行空间,运行的是Boot Loader,即Boot Loader中的OALCPUPoweroff函数,其具体实现在Startup.s文件中。

S3C6410内部系统进入休眠模式的顺序是:

(1)PWR_CFG[6:5]被用户软件置位为系统休眠模式;

(2)用户软件通过MCR指令(MCR P15,0,Rd,C7,C0,4)产生STANDBYWFI信号;

(3)SYSCON系统控制器要求总线控制器完成当前AHB总线处理任务;

(4)当前AHB总线处理任务完成后,AHB总线控制器向SYSCON发送已经完成的确认信息;

(5)SYSCON要求域V完成当前AXI总线任务;

(6)当前AXI总线任务完成后,AXI控制器向SYSCON发送已经完成的确认信息;

(7)外部存储器如SDRAM必须在休眠模式下保存好当前系统信息,即保护系统现场,然后SYSCON要求外部存储控制器进入自刷新模式,如若不能保存当前信息,系统唤醒时将不能恢复现场;

(8)外部存储控制器(即内存SDRAM)进入自刷新模式以后将向SYSCON发送确认信息;

(9)如果PLL被使用,SYSCON将以外部振荡器替代内部的PLL作为时钟源输出;

(10)SYSCON禁用PLL的操作和晶体振荡器;

(11)SYSCON为实现内部逻辑而配置XPWRRGTON管脚为低电平状态,以此断开外部电源作为内部源,XPWRRGTON管脚控制外部调节器,以达到控制外部电源的目的。

3.2 系统唤醒策略实现

唤醒过程是休眠过程的逆过程,唤醒流程图如图6所示。同样,在OALCPUPoweroff函数唤醒中System_Wait ForInterrupt函数检测到唤醒源的中断,则恢复对SDRAM的供电,然后从SDRAM的休眠数据区中将先前的CPU寄存器数据导入,返回Windows Embedded CE 6.0的执行空间;回到Windows CE 6.0的执行空间,调用S3C6410_RestoreState_SysCon恢复系统控制寄存器的数据;然后调用S3C6410_RestoreState_GPIO函数恢复GPIO的状态;再调用S3C6410_RestoreState_DMACon函数恢复DMA控制寄存器的状态;调用S3C6410_RestoreState_VIC函数恢复VIC状态;然后初始化串口调试;再调用OEMInitializeSystem Timer函数初始化系统时钟;调用InitializeOTGCLK函数开启USB;调用BSPPower On函数判断唤醒源等。

Figure 6 Process of wakeup mode图6 系统的唤醒过程

以上是一个嵌入式系统整体的唤醒过程。S3C6410处理器内部系统控制器控制部分的唤醒过程如下:

(1)SYSCON将XPWRRGTON管脚置于高电平状态,以此使能外部电源,同时通过设置寄存器PWR_STABLE等待时钟稳定;

(2)SYSCON生成系统时钟HCLK、PCLK、ARMCLK;

(3)SYSCON发出系统复位信号HRESETn和PRESETn;

(4)SYSCON发出ARM的复位信号。

在实际产品应用中,用户可根据不同的需求采用不同的唤醒源。例如,以休眠模式待机,在需要周期性地唤醒休眠系统的情况下,用户就需要设置RTC时钟作为唤醒源,如果仅仅在想唤醒设备的时候再唤醒,则可以设置一个触摸屏触发的外部中断来实现。S3C6410就提供了多种唤醒实现方式,如EINT0-15、TICK、键盘中断、MSM、电池故障、HSI、温复位。三星S3C6410芯片所支持的不同功耗模式下的唤醒源如图7所示。

Figure 7 Wakeup sources in different power modes图7 S3C6410不同功耗模式下的唤醒源

典型的唤醒源实现方式有两种:基于普通外部中断的实现方式和基于键盘事件的实现方式。

3.2.1 基于外部中断的系统唤醒实现方式

根据系统休眠唤醒的原理,S3C6410芯片在休眠之前必须在OALCPUPoweroff函数中正确设置外部中断作为唤醒源,芯片系统才能被正常唤醒。正确设置作为唤醒源的中断有以下三个重要步骤:

(1)把作为外部唤醒源的GPIO接口设置为复用的中断功能,本文把GPN[11]设为中断口。

(2)实际操作能满足外部中断触发条件,如果将某种唤醒使用的中断源所对应的接口与一个电平变化的器件相连,比如按键,需要通过判断此接口上电平的变化来触发这个中断。在powerbutton.c文件中将电源GPN[11]设为EINT11,代码如下:

3.2.2 基于键盘事件中断的系统唤醒实现方式

基于键盘中断的方式实现休眠唤醒是通过调用键盘驱动来实现的。操作系统必须具备键盘驱动机制,Windows Embedded CE 6.0是可定制键盘接口的。当键盘有按键按下时,键盘驱动检测并触发键盘消息中断,当内核电源管理模块检测到键盘中断,再将整个系统唤醒起来。对于键盘这样的唤醒源的设置如下:

4 结果分析

4.1 功能测试

本文通过实验多种唤醒源中的两种典型唤醒方式,验证系统休眠与唤醒是否成功。当Windows Embedded CE 6.0操作系统在基于S3C6410的视障者阅读辅助器完全启动后,按下开始菜单中的“挂起”键,屏幕将关闭,系统大多数设备停止工作,此时开始测试。测试方法如下:

(1)通过按下电源开关键,整个系统被唤醒启动起来,重新进入Windows Embedded CE 6.0系统桌面;

(2)用微软的ActiveSync同步连接工具以USB的方式连接已经启动的Windows Embedded CE 6.0系统,检测当系统挂起时,检测同步连接功能是否有效,同时用万用表测试核心板上S3C6410芯片的VCC_OTG电压是否正常。

测试结果:即按即启,没有延迟,同时同步工具ActiveSync在休眠时断开,VCC_OTG的电压为0 V,当系统唤醒以后VCC_OTG电压为3.3 V,恢复正常,同步工具也能正常连接。通过键盘事件或者外部中断可以正常唤醒休眠中的系统,效果理想。

4.2 性能分析

嵌入式系统的系统级电源管理的基本思路是调整芯片的工作电压和工作频率,而S3C6410芯片的内核处理器支持动态电压和频率的调节。根据CMOS电路功耗的理论公式[6,7]:

其中,P表示功耗;C表示系统的电容,是一个常量;V表示工作电压;F表示工作频率。工作电压和工作频率又成正比例关系,频率的提高需要以电压的提高作为基础。

其中,E表示能耗,t表示时间。对于一个指定的处理任务,F*t是常量,因此根据公式可知,在降低处理器工作频率的同时降低处理器的工作电压,这样才能达到降低功耗的目的。

本文所研究的系统休眠与唤醒过程对处理器的工作频率和动态电压的调节符合以上理论原理。典型的处理器电压调节在于唤醒时S3C6410内部控制器SYSCON生成系统时钟HCLK、PCLK、ARMCLK时对系统时钟的静态配置,同时采用LTC3714电源开关稳压控制器配合系统进行动态电压的调节,以此达到有效控制系统级功耗的目的。

休眠唤醒作为基本的电源管理方式之一,对系统电压的极端控制达到的效果如表1所示。

Table 1 Change of power modes in sleep mode and wakeup mode表1 系统休眠唤醒过程中部分电源域变化情况 V

据表1可知,由于本文所采用的开发板的部分设备电源,如ADC,未进行电源控制,则整个过程中电压不可控,无任何改变,而OTG等设备电源域可控,这形成了一个对比的效果。这里ALIVE是不在这个范畴的,它在设计之时就必须处于长期供电的状态,是CPU的关键电源域,关系到整个设备的休眠与唤醒。

作为电源管理方式之一的LCD屏幕背光控制,用万用表测量所得到的效果如表2所示。

Table 2 Comparison of the backlight brightness and voltage表2 屏幕背光亮度及电压对比

根据屏幕背光原理,控制的机制是通过PWM脉宽调制电压值,以此达到对屏幕背景光电压输出的控制,从而形成亮度调节。开关电压输出的值一定,而脉宽调制信号的频率和占空比则决定了实际有效输出电压值。实际值的有效控制真正达到了系统能耗的有效管理。

ARM体系结构的便携式电子产品功耗分布如图8所示[8],本课题采用的S3C6410系统即为ARM体系结构。其中处理器功耗和屏幕功耗占整个系统的绝大部分。

Figure 8 Power distribution of the ARM architecture portable electronics图8 ARM体系结构便携式电子产品功耗分布

根据ARM体系结构电子产品功耗可知,CPU耗电约为整个系统的30%。根据表1中CPU休眠时电源域的电压变化情况可知,其中40%的功耗接入休眠唤醒控制以后处于可控状态。同理,由图8可知,屏幕功耗达到42%,且由表2可知不同的背光程度功耗节省度不同。最终的功耗节省情况如表3所示。

Table 3 Effect after using the power management program表3 系统引入电源管理前后效果对照表

由表3可知,如果系统在控制策略中加入系统的休眠唤醒步骤将降低系统功耗,极端的情形下系统功耗最低,这将在单位时间内为CPU节省12%的功耗;同时,由于休眠与唤醒属于系统电源管理范畴,将对设备电源等产生一系列的映射控制关系,这使得应用休眠与唤醒策略将显著地降低整个嵌入式系统的功耗。

5 结束语

本文根据S3C6410处理器模块的特性和Windows Embedded CE 6.0电源管理驱动结构,研究并实现了嵌入式系统休眠与唤醒,并对唤醒源设置等问题进行了研究。实验结果表明,应用本文设计的休眠与唤醒策略显著地降低了系统功耗,并且项目成果已成功应用于实际项目之中,实际使用测试表明该策略有效提升了系统续航能力。

[1] Xing Xiang-lei,Zhou Yu,Du Si-dan.Power management software based on embedded Linux system[J].Computer Engineering,2010,36(1):253-255.(in Chinese)

[2] Wang Bing.Embedded advanced programming and detailed examples of Windows CE[M].Beijing:China Water Power Press,2008.(in Chinese)

[3] S3C6410X user manual[M].Samsung Electronics,2008.

[4] Jian Yang.The research and implement of the technology of power management on embedded system[D].Beijing:North China University of Technology,2012.(in Chinese)

[5] Chu Shuai,Du Jiang,Cai Chang,et al.Design of portable terminal power management system based on ARM[J].E-lectronic and Electro-optical Systems,2011,36(1):56-59.(in Chinese)

[6] Pouwelse J,Langendoen K,Sips H.Dynamic voltage scaling on a low-power microprocessor[J].ACM SIGMOBILE,2001,7:251-259.

[7] Li Lin-gong.Low power consumption design for embedded system[J].Application Research of Computers,2004,31(2):177-180.(in Chinese)

[8] Power management in portable ARM based systems accelent systems[M].Cliff Brake,2002.

[9] Xiao Kun.The unified driver framework research and implementation of embedded systems on cross-platform[D].Chengdu:University of Electronic Science and Technology of China,2008.(in Chinese)

附中文参考资料:

[1] 邢向磊,周余,都思丹.基于嵌入式Linux系统的电源管理软件[J].计算机工程,2010,36(1):253-255.

[2] 汪兵.Windows CE嵌入式高级编程及其实例详解[M].北京:中国水利水电出版社,2008.

[4] 简阳.嵌入式系统电源管理关键技术研究与实现[D].北京:北方工业大学,2012.

[5] 褚帅,杜江,蔡昌,等.基于ARM便携式终端电源管理系统设计[J].电光系统,2011,36(1):56-59.

[7] 李林功.嵌入式系统的低功耗设计[J].计算机应用研究,2004,31(2):177-180.

[9] 肖堃.嵌入式系统跨平台统一驱动框架技术研究与实现[D].成都:电子科技大学,2008.

猜你喜欢
调用功耗中断
基于任务映射的暗硅芯片功耗预算方法
核电项目物项调用管理的应用研究
LabWindows/CVI下基于ActiveX技术的Excel调用
跟踪导练(二)(5)
千里移防,卫勤保障不中断
揭开GPU功耗的面纱
基于系统调用的恶意软件检测技术研究
数字电路功耗的分析及优化
IGBT模型优化及其在Buck变换器中的功耗分析
利用RFC技术实现SAP系统接口通信