<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 便攜嵌入式設(shè)備電源管理解決方案

          便攜嵌入式設(shè)備電源管理解決方案

          作者: 時間:2012-03-16 來源:網(wǎng)絡(luò) 收藏

          前言

          本文引用地址:http://www.ex-cimer.com/article/149404.htm

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

          Linux內(nèi)核機(jī)制分析

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

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

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

          Linux電源管理子系統(tǒng)接口函數(shù)

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

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

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

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

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

          電源管理設(shè)備

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

          Linux電源管理行為過程

          圖1 Linux電源管理行為過程

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

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

          iPAQ硬件耗電量分析

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

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

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

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

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

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

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

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

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

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

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

          linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

          上一頁 1 2 3 下一頁

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();