便攜嵌入式設備電源管理解決方案
前言
本文引用地址:http://dyxdggzs.com/article/149404.htm隨著(zhù)各種便攜嵌入式設備性能的日益提高,功能日益豐富,其電源緊張的問(wèn)題也日益突出,國內新推出的某些具有PDA等多種功能的智能電話(huà)在密集使用下只能維持半天,多數攝像機和數碼相機在一次充電后都只有一個(gè)小時(shí)左右的累積工作時(shí)間。Linux作為一個(gè)開(kāi)放源代碼的操作系統,擁有非常豐富的軟件資源和平臺支持,這使得嵌入式系統開(kāi)發(fā)的周期大大縮短,越來(lái)越多的商用和通用嵌入式系統都采用Linux作為軟件平臺。因此有必要對Linux系統的電源管理機制進(jìn)行深入研究。
Linux作為一個(gè)強大而成熟的操作系統,本身提供了一套從用戶(hù)空間到系統空間的,由上而下的軟件電源管理機制。
電源管理子系統
Linux內核實(shí)現了一個(gè)電源管理子系統用于統一管理每個(gè)設備。源代碼pm.h和pm.c中定義和實(shí)現了主要的接口函數。如表1所示。
通過(guò)這些接口函數就可以將自己的硬件設備納入電源管理子系統使其成為系統電源管理的一部分。這需要在編寫(xiě)設備驅動(dòng)程序的時(shí)候完成下面的工作:
1)在初始化驅動(dòng)時(shí),使用pm_ regiSTer對設備的每個(gè)實(shí)例( instance)進(jìn)行注冊;在清除驅動(dòng)時(shí)使用pm_unregister來(lái)取消設備的注冊。
(2)在對硬件進(jìn)行操作之前調用pm_access (這樣會(huì )保證設備已被喚醒并且處于ready狀態(tài)) 。
(3)編寫(xiě)自己的pm _callback函數。開(kāi)發(fā)人員應該在設備或系統進(jìn)入suspend狀態(tài)時(shí)保留設備和系統的上下文到安全的地方,并在設備或系統re -sume時(shí)恢復其上下文,使之能夠繼續運行,編寫(xiě)pm_callback函數是驅動(dòng)實(shí)現設備電源管理的重點(diǎn)。
(4)當設備不在被使用的時(shí)候調用pm_dev_idle函數,這個(gè)操作是可選的,可以增強設備idle狀態(tài)的監測能力。
電源管理設備
將設備加入到電源管理子系統后,該設備就已經(jīng)有了處理電源管理請求的能力,但是系統的電源管理行為并不會(huì )主動(dòng)發(fā)生。因此還需要一個(gè)電源管理設備來(lái)接受用戶(hù)請求,產(chǎn)生電源管理行為。這里所指的設備并不是一個(gè)真實(shí)的硬件設備,而是一個(gè)在Linux系統空間里接受用戶(hù)控制的虛擬設備,它可以是一個(gè)簡(jiǎn)單的字符型設備。有了這個(gè)設備,就可以方便的實(shí)現來(lái)自于用戶(hù)空間的電源管理請求和方案。Linux電源管理行為過(guò)程如圖1所示。
圖1 Linux電源管理行為過(guò)程
Linux的電源管理機制在iPAQ上的應用
iPAQ是康柏公司(現在已和惠普公司合并)推出的基于StrONgARM CPU 的高性能掌上電腦,不僅提供了卓越的個(gè)人信息管理工具,還集成了較為強大的多媒體功能和其他娛樂(lè )功能。Linux 2.4的內核已經(jīng)被成功的移植到上面,基于Linux系統眾多的應用軟件也已經(jīng)或正在被移植。
iPAQ硬件耗電量分析
要實(shí)現對iPAQ 耗電量的有效調節,就必須清楚各個(gè)硬件耗電量,從而確定出需要管理和調節的對象。iPAQ上的各種硬件的耗電量比例如圖2所示。
圖2 iPAQ上的各種硬件的耗電量比例
可見(jiàn),Frontlight、LCD、SDRAM、Audio、CPU等是主要的耗電設備,應該盡可能的減少這些設備的工作時(shí)間和強度,以減少耗電量,其關(guān)鍵步驟如下:首先,開(kāi)啟SDRAM的自動(dòng)節能模式。iPAQ所使用的SA -1110支持SDRAM的自動(dòng)節能模式;在這種模式中,當內存不被使用時(shí), CPU 將關(guān)閉輸入到內存的時(shí)鐘信號,內存停止工作;這樣將減少大約190mW的功率。
接著(zhù),調節顯示驅動(dòng)??梢赃x擇( 1)在必要的時(shí)候關(guān)閉背光; ( 2)降低LCD的刷新率。LCD在正常情況下刷新率是60Hz,通過(guò)調節LCD 定時(shí)器可以調節LCD的刷新率使其低于60Hz。降低LCD刷新率后,可以減少SDRAM,總線(xiàn)的使用和減少功耗; (3)在不使用屏幕的時(shí)候關(guān)閉LCD控制器。
隨后,降低時(shí)鐘頻率。SA - 1110的時(shí)鐘頻率可以在57. 3MHz到214. 8MHz之間動(dòng)態(tài)調節。降低CPU時(shí)鐘頻率可以減少CPU本身的功耗,同時(shí)也能減少時(shí)鐘由CPU提供的其他硬件的功耗。例如: SA- 1110工作在最低頻率時(shí)可比工作在最高頻率時(shí)減少100mW到200mW的功耗。
最后,關(guān)閉音頻芯片。在不使用聲音的時(shí)候,盡量關(guān)閉音頻芯片,并保持CPU 到音頻芯片的低輸入。
通過(guò)Linux電源管理機制及上層應用實(shí)現對iPAQ電源管理和耗電量調節
確定了要調控的對象和方法后,需要通過(guò)L inux的電源管理機制和上層應用軟件來(lái)實(shí)現對這些硬件設備的控制。這包括編寫(xiě)CPU電源管理代碼、外設驅動(dòng)程序及電源管理代碼、電源管理設備實(shí)現代碼和用戶(hù)空間控制應用代碼。
(1)實(shí)現SA - 1110進(jìn)入Sleep電源模式的代碼
SA -1110有Normal, Idle, Sleep 等幾種電源模式,其中在Sleep模式下, SA -1110具有最小的電力消耗。由于SA -1110 進(jìn)入Sleep 模式后,到外設和SDRAM的時(shí)鐘將停止,多數的寄存器信息將丟失。因此需要事先將重要的寄存器值保存到內存中,并將SDRAM設置為自刷新模式,以保持SDRAM中的數據。當SA -1110 收到硬件中斷等喚醒源退出Sleep模式后不會(huì )接著(zhù)執行先前未執行的指令,而是回到初始狀態(tài)去執行啟動(dòng)代碼。因此為了讓CPU在喚醒后能夠持續的工作,需要將返回代碼的地址保存到PowerManager Scratch Pad Register ( PSPR)寄存器中,使得啟動(dòng)代碼能讓CPU重新跳到返回代碼的地址處,執行返回代碼從而回到睡眠前的工作。
linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)
評論