當(dāng)前位置:首頁 > 嵌入式 > 嵌入式軟件
[導(dǎo)讀]便攜嵌入式設(shè)備電源管理解決方案

前言

隨著各種便攜嵌入式設(shè)備性能的日益提高,功能日益豐富,其電源緊張的問題也日益突出,國內(nèi)新推出的某些具有PDA等多種功能的智能電話在密集使用下只能維持半天,多數(shù)攝像機(jī)和數(shù)碼相機(jī)在一次充電后都只有一個(gè)小時(shí)左右的累積工作時(shí)間。Linux作為一個(gè)開放源代碼的操作系統(tǒng),擁有非常豐富的軟件資源和平臺(tái)支持,這使得嵌入式系統(tǒng)開發(fā)的周期大大縮短,越來越多的商用和通用嵌入式系統(tǒng)都采用Linux作為軟件平臺(tái)。因此有必要對Linux系統(tǒng)的電源管理機(jī)制進(jìn)行深入研究。

Linux內(nèi)核電源管理機(jī)制分析

Linux作為一個(gè)強(qiáng)大而成熟的操作系統(tǒng),本身提供了一套從用戶空間到系統(tǒng)空間的,由上而下的軟件電源管理機(jī)制。

電源管理子系統(tǒng)

Linux內(nèi)核實(shí)現(xiàn)了一個(gè)電源管理子系統(tǒng)用于統(tǒng)一管理每個(gè)設(shè)備。源代碼pm.h和pm.c中定義和實(shí)現(xiàn)了主要的接口函數(shù)。如表1所示。

通過這些接口函數(shù)就可以將自己的硬件設(shè)備納入電源管理子系統(tǒng)使其成為系統(tǒng)電源管理的一部分。這需要在編寫設(shè)備驅(qū)動(dòng)程序的時(shí)候完成下面的工作:

1)在初始化驅(qū)動(dòng)時(shí),使用pm_ regiSTer對設(shè)備的每個(gè)實(shí)例( instance)進(jìn)行注冊;在清除驅(qū)動(dòng)時(shí)使用pm_unregister來取消設(shè)備的注冊。

(2)在對硬件進(jìn)行操作之前調(diào)用pm_access (這樣會(huì)保證設(shè)備已被喚醒并且處于ready狀態(tài)) 。

(3)編寫自己的pm _callback函數(shù)。開發(fā)人員應(yīng)該在設(shè)備或系統(tǒng)進(jìn)入suspend狀態(tài)時(shí)保留設(shè)備和系統(tǒng)的上下文到安全的地方,并在設(shè)備或系統(tǒng)re -sume時(shí)恢復(fù)其上下文,使之能夠繼續(xù)運(yùn)行,編寫pm_callback函數(shù)是驅(qū)動(dòng)實(shí)現(xiàn)設(shè)備電源管理的重點(diǎn)。

(4)當(dāng)設(shè)備不在被使用的時(shí)候調(diào)用pm_dev_idle函數(shù),這個(gè)操作是可選的,可以增強(qiáng)設(shè)備idle狀態(tài)的監(jiān)測能力。

電源管理設(shè)備

將設(shè)備加入到電源管理子系統(tǒng)后,該設(shè)備就已經(jīng)有了處理電源管理請求的能力,但是系統(tǒng)的電源管理行為并不會(huì)主動(dòng)發(fā)生。因此還需要一個(gè)電源管理設(shè)備來接受用戶請求,產(chǎn)生電源管理行為。這里所指的設(shè)備并不是一個(gè)真實(shí)的硬件設(shè)備,而是一個(gè)在Linux系統(tǒng)空間里接受用戶控制的虛擬設(shè)備,它可以是一個(gè)簡單的字符型設(shè)備。有了這個(gè)設(shè)備,就可以方便的實(shí)現(xiàn)來自于用戶空間的電源管理請求和方案。Linux電源管理行為過程如圖1所示。

圖1 Linux電源管理行為過程

Linux的電源管理機(jī)制在iPAQ上的應(yīng)用

iPAQ是康柏公司(現(xiàn)在已和惠普公司合并)推出的基于StrONgARM CPU 的高性能掌上電腦,不僅提供了卓越的個(gè)人信息管理工具,還集成了較為強(qiáng)大的多媒體功能和其他娛樂功能。Linux 2.4的內(nèi)核已經(jīng)被成功的移植到上面,基于Linux系統(tǒng)眾多的應(yīng)用軟件也已經(jīng)或正在被移植。

iPAQ硬件耗電量分析

要實(shí)現(xiàn)對iPAQ 耗電量的有效調(diào)節(jié),就必須清楚各個(gè)硬件耗電量,從而確定出需要管理和調(diào)節(jié)的對象。iPAQ上的各種硬件的耗電量比例如圖2所示。

圖2 iPAQ上的各種硬件的耗電量比例

可見,F(xiàn)rontlight、LCD、SDRAM、Audio、CPU等是主要的耗電設(shè)備,應(yīng)該盡可能的減少這些設(shè)備的工作時(shí)間和強(qiáng)度,以減少耗電量,其關(guān)鍵步驟如下:首先,開啟SDRAM的自動(dòng)節(jié)能模式。iPAQ所使用的SA -1110支持SDRAM的自動(dòng)節(jié)能模式;在這種模式中,當(dāng)內(nèi)存不被使用時(shí), CPU 將關(guān)閉輸入到內(nèi)存的時(shí)鐘信號(hào),內(nèi)存停止工作;這樣將減少大約190mW的功率。

接著,調(diào)節(jié)顯示驅(qū)動(dòng)??梢赃x擇( 1)在必要的時(shí)候關(guān)閉背光; ( 2)降低LCD的刷新率。LCD在正常情況下刷新率是60Hz,通過調(diào)節(jié)LCD 定時(shí)器可以調(diào)節(jié)LCD的刷新率使其低于60Hz。降低LCD刷新率后,可以減少SDRAM,總線的使用和減少功耗; (3)在不使用屏幕的時(shí)候關(guān)閉LCD控制器。

隨后,降低時(shí)鐘頻率。SA - 1110的時(shí)鐘頻率可以在57. 3MHz到214. 8MHz之間動(dòng)態(tài)調(diào)節(jié)。降低CPU時(shí)鐘頻率可以減少CPU本身的功耗,同時(shí)也能減少時(shí)鐘由CPU提供的其他硬件的功耗。例如: SA- 1110工作在最低頻率時(shí)可比工作在最高頻率時(shí)減少100mW到200mW的功耗。

最后,關(guān)閉音頻芯片。在不使用聲音的時(shí)候,盡量關(guān)閉音頻芯片,并保持CPU 到音頻芯片的低輸入。

通過Linux電源管理機(jī)制及上層應(yīng)用實(shí)現(xiàn)對iPAQ電源管理和耗電量調(diào)節(jié)

確定了要調(diào)控的對象和方法后,需要通過L inux的電源管理機(jī)制和上層應(yīng)用軟件來實(shí)現(xiàn)對這些硬件設(shè)備的控制。這包括編寫CPU電源管理代碼、外設(shè)驅(qū)動(dòng)程序及電源管理代碼、電源管理設(shè)備實(shí)現(xiàn)代碼和用戶空間控制應(yīng)用代碼。

(1)實(shí)現(xiàn)SA - 1110進(jìn)入Sleep電源模式的代碼

SA -1110有Normal, Idle, Sleep 等幾種電源模式,其中在Sleep模式下, SA -1110具有最小的電力消耗。由于SA -1110 進(jìn)入Sleep 模式后,到外設(shè)和SDRAM的時(shí)鐘將停止,多數(shù)的寄存器信息將丟失。因此需要事先將重要的寄存器值保存到內(nèi)存中,并將SDRAM設(shè)置為自刷新模式,以保持SDRAM中的數(shù)據(jù)。當(dāng)SA -1110 收到硬件中斷等喚醒源退出Sleep模式后不會(huì)接著執(zhí)行先前未執(zhí)行的指令,而是回到初始狀態(tài)去執(zhí)行啟動(dòng)代碼。因此為了讓CPU在喚醒后能夠持續(xù)的工作,需要將返回代碼的地址保存到PowerManager Scratch Pad Register ( PSPR)寄存器中,使得啟動(dòng)代碼能讓CPU重新跳到返回代碼的地址處,執(zhí)行返回代碼從而回到睡眠前的工作。[!--empirenews.page--]

SA - 1110進(jìn)入Sleep模式的代碼片斷如下:

extern void cpu_sa1110_resume ( voi 
d) ; /3 SA - 1110返回函數(shù)3 /
       extern int cpu_sa1110_do_suspend ( void) ; /3 SA - 1110睡眠函數(shù)3 /
       int sa1110_suspend ( void)
       {
       . . .
       cli ( ) ; /3 關(guān)閉中斷3 /
       sys_ctx. osmr0 = OSMR0; /3 保存重要的寄存器3 /
       . . .
       sys_ctx. p sdr = PSDR;
       . . .
       PSPR = virt_to_phys ( cpu_sa1100_resume) ; /3 設(shè)置返回函數(shù)地址3 /
       cpu_sa1110_do_suspend ( ) ; /3 進(jìn)入睡眠3 //3 退出睡眠3 /
       GPDR = sys_ctx. gpdr; /3 恢復(fù)寄存器3 /
       GRER = sys_ctx. grer;
       GFER = sys_ctx. gfer;
       GAFR = sys_ctx. gafr;
       . . .
       sti ( ) ; /3 啟動(dòng)中斷3 /
       return 0;
       }

(2)實(shí)現(xiàn)各個(gè)外設(shè)的電源管理代碼

利用Linux內(nèi)核提供電源管理子系統(tǒng),可以將iPAQ中的每個(gè)需要實(shí)現(xiàn)電源管理的外部設(shè)備納入統(tǒng)一的管理。這需要在各個(gè)設(shè)備的驅(qū)動(dòng)程序中使用電源管理子系統(tǒng)的接口函數(shù)(如2. 1所描述)和實(shí)際的硬件操作代碼,這里將以顯示設(shè)備為例:

  /3 SA - 1110 frame buffer電源管理請求處理函數(shù)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 進(jìn)入D0 模式,開啟LCD控制器3 /
       } else {
    
    set_ctrlr_state ( fbi, C_D ISABLE) ; /3 進(jìn)入D1 - D3模式關(guān)閉LCD 控制器. 3 /
       } }
       return 0;
       }
       /3 SA - 1110 frAME buffer驅(qū)動(dòng)初始化函數(shù)3 /
       int __init sa1110fb_init ( void)
       {
       struct sa1110fb_info 3 fbi;
       int ret;
       . . .
       /3 在電源管理子系統(tǒng)中注冊3 /
       fbi - > pm = pm _ register ( PM _SYS_DEV, PM _SYS_VGA,
       sa1110fb_pm_callback) ;
       if ( fbi - > pm)
       fbi - > pm - > data = fbi; /3 設(shè)置私有數(shù)據(jù)3 / . . .
       return ret;
       }

3)實(shí)現(xiàn)電源管理設(shè)備

這個(gè)設(shè)備實(shí)際是用于接受用戶空間程序的控制所用,所以只需要簡單的實(shí)現(xiàn)“ioctl”調(diào)用就可以了。

  /3 ioctl調(diào)用方法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 外設(shè)掛起3 /
 

;     } break;
       case APM_ IOC_RESUME: {
       pm_send_all ( PM_RESUME, ( void 3 ) 0) ; /3 外設(shè)喚醒3 /
       } break;
       case APM_ IOC_SUSPEND: { [!--empirenews.page--]
       pm_send_all ( PM_SUSPEND, ( void 3 ) 2) ; /3 外設(shè)掛起3 /
       sa1110_suspend ( ) ; /3 CPU進(jìn)入休眠模式3 /
       /3 CP 
U醒來,繼續(xù)執(zhí)行3 /
       pm_send_all ( PM_RESUME, ( void 3 ) 0) ; /3 喚醒外設(shè)3 /
       } break;
       default:
       return - EINVAL;
       }
       return 0;
       }

最后,使用命令“mknod /dev/ apm c 254 0”,可以在文件系統(tǒng)中建立起該設(shè)備的訪問節(jié)點(diǎn)。該節(jié)點(diǎn)名為/dev/ apm,是一個(gè)字符設(shè)備(c) ,主設(shè)備號(hào)為254,此設(shè)備號(hào)為0。

(4)編寫用戶空間電源管理程序

用戶可以在適當(dāng)?shù)臅r(shí)候選擇是否改變CPU的時(shí)鐘頻率和顯示刷新率,是否關(guān)閉某些外部設(shè)備,是否使整個(gè)系統(tǒng)進(jìn)入睡眠模式等等。這只需要使用系統(tǒng)調(diào)用“ioctl”對電源管理設(shè)備( /dev/ apm)發(fā)送命令就可以了。
       int fd;
       . . .
       fd = open ( " /dev/ apm" , O_RDONLY) ; /3 打開電源管理設(shè)備3 /
       ioctl ( fd, APM_ IOC_SUSPEND,NULL) ; /3 發(fā)送電源管理命令3 /
       close ( fd) ; /3 關(guān)閉電源管理設(shè)備3 /

實(shí)現(xiàn)iPAQ電源管理前后耗電量比較

實(shí)現(xiàn)電源管理以前:開啟LCD, CPU 處于空閑狀態(tài),大多數(shù)其他芯片關(guān)閉,功耗為470mW。實(shí)現(xiàn)電源管理以后:在電源管理前的基礎(chǔ)上開啟SDRAM 的自動(dòng)節(jié)能模式,功耗下降到280mW。然后降低LCD刷新率到30Hz, 功耗下降到238mW。再把CPU頻率降低到57. 3MHz,功耗下降到172mW。最后關(guān)閉LCD,功耗下降到98mW??梢姡ㄟ^本文方案的調(diào)節(jié)和優(yōu)化, iPAQ的耗電量確實(shí)可以得到有效地改善,最大優(yōu)化后的耗電量僅為優(yōu)化前的五分之一,從而大大提高了iPAQ的電池使用時(shí)間。

結(jié)論

在嵌入式設(shè)備中,電源管理是一個(gè)硬件和軟件相結(jié)合的系統(tǒng)工程。本文介紹了已有的節(jié)能方法和Linux電源管理的機(jī)制, 并且以iPAQ 為例通過Linux的電源管理機(jī)制和上層應(yīng)用軟件,設(shè)計(jì)和實(shí)現(xiàn)了一個(gè)較完整和有效的電源管理方案,為眾多基于Linux系統(tǒng)的嵌入式設(shè)備電源管理提供了一個(gè)有用的參考。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動(dòng)力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉