鉅大鋰電 | 點擊量:0次 | 2020年06月16日
便攜嵌入式設備電源管理解決方法
前言
隨著各種便攜嵌入式設備性能的日益提高,功能日益豐富,其電源緊張的問題也日益突出,國內新推出的某些具有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所示。
圖1Linux電源管理行為過程
Linux的電源管理機制在ipAQ上的應用
ipAQ是康柏公司(現在已和惠普公司合并)推出的基于StrONgARMCpU的高性能掌上電腦,不僅供應了卓越的個人信息管理工具,還集成了較為強大的多媒體功能和其他娛樂功能。Linux2.4的內核已經被成功的移植到上面,基于Linux系統眾多的應用軟件也已經或正在被移植。
ipAQ硬件耗電量分析
要實現對ipAQ耗電量的有效調節,就必須清楚各個硬件耗電量,從而確定出要管理和調節的對象。ipAQ上的各種硬件的耗電量比例如圖2所示。
圖2ipAQ上的各種硬件的耗電量比例
可見,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電源管理和耗電量調節
確定了要調控的對象和方法后,要通過Linux的電源管理機制和上層應用軟件來實現對這些硬件設備的控制。這包括編寫CpU電源管理代碼、外設驅動程序及電源管理代碼、電源管理設備實現代碼和用戶空間控制應用代碼。
(1)實現SA-1110進入Sleep電源模式的代碼
SA-1110有Normal,Idle,Sleep等幾種電源模式,其中在Sleep模式下,SA-1110具有最小的電力消耗。由于SA-1110進入Sleep模式后,到外設和SDRAM的時鐘將停止,多數的寄存器信息將丟失。因此要事先將重要的寄存器值保存到內存中,并將SDRAM設置為自刷新模式,以保持SDRAM中的數據。當SA-1110收到硬件中斷等喚醒源退出Sleep模式后不會接著執行先前未執行的指令,而是回到初始狀態去執行啟動代碼。因此為了讓CpU在喚醒后能夠持續的工作,要將返回代碼的地址保存到powerManagerScratchpadRegister(pSpR)寄存器中,使得啟動代碼能讓CpU重新跳到返回代碼的地址處,執行返回代碼從而回到睡眠前的工作。
上一篇:全新的LED驅動――去電源化技術
下一篇:使用高壓LED提高燈泡效率










