作者 主題: [分享] 嵌入式電源管理概念  (閱讀 14856 次)

0 會員 與 1 訪客 正在閱讀本文。

thyme

  • 老人組
  • 俺是博士!
  • *****
  • 文章數: 1281
    • 檢視個人資料
[分享] 嵌入式電源管理概念
« 於: 2005-05-24 11:18 »
最近被太陽公公曬得很黑,忙著漂白,一時沒空上來灌水 :(

這篇要和大家聊的是嵌入式系統的電源管理,如果你沒玩過嵌
入式系統,你可能不知道電源管理有多麼重要。在一般 PC 上,
一般人都會想盡辦法提高運作效能,至於要消耗多少電能,完
全不在乎,跑得快就好了,在嵌入式上觀念就要改了,主要原
因不在於節約能源,而在於嵌入式系統有很多是用電池來供應
電源,無法長期保有足夠的電能可供使用,舉例來說,大家常
用的大哥大,如果待機時間只有半天,就算你功能再好,也帶
不出門,最低限度是能使用一天,晚上回家能充電,這樣的實
用價值才高。

電源管理和硬體設計有很大的關連,如果 CPU、主機板沒有這
麼設計,那一切都是白搭的,x86 的我不熟 ;p,我們用 ARM7
來說明,其實也只能聊聊,因為我手邊沒有詳細資料。

電源管理並不是只有簡單的螢幕保護而已,一般嵌入式都是用
LCD螢幕,只要不開背光,就很省電了,真正吃電的怪獸在於
CPU 及 DRAM ,真正省電就要關閉這兩個。一般設計都會有好
幾個模式,一是正常模式,一是 standby 及 suspend 模式,
suspend 也就是通稱的 sleep 模式,最省電就是這個模式,
一切在「冬眠」,但是也最不容易「醒來」,而 standby 只
能算是坐著休息而已。

standby一般只是關閉週邊,而 CPU 及 RAM 還在正常模式跑,
能省的電不多,軟體設計上也容易些,問題並不大,suspend
則比較麻煩些,通常嵌入式的主機板都會包含了必備的週邊,
但仍然會有廠商要另外加入的硬體,例如無線網卡等,這時
也要考慮進去,由於主機板不知道你週邊要接什麼,所以週邊
的 I/O port 的電源要自己去控制,就算是空接,設 0 和設1
的耗電量都不一樣,這都要考慮進去。

suspend 的進入及醒來都不太容易,當初我也是研究了好久,
ARM7 設計的 suspend 模式是 CPU、Clock 全部關閉,完全不
耗電。而 RAM 比較麻煩一點,RAM 要不斷的充電才能保有資
料,此時就要讓 RAM 進入另外一種模式,使用另外較慢的
Clock 來充電,但此時是不能做資料存取的動作,我特別提到
這個是跟進入 suspend 有關,當初沒有想到這一層,才會花
了我好多精神在這上面,你可以想像一下電腦怎麼跑程式的,
磁碟資料放入 RAM 上,再後 CPU 由 RAM 載入二進位程式碼
來執行,如果 RAM 關了,不能存取,那 CPU 怎麼執行 suspend
的必要動作?若 CPU 關了,那就沒法叫 RAM 進入 suspend了。

在這情形下,就要用到 CPU 的 cache 了,如果程式碼不多,
那一般情形下,要執行的程式片斷會先放在 CPU cache 去,
cache 的電源是和 CPU 同進退的,所以就算 RAM 關了,也不
會影響到程式的執行的,再來就是一些執行所需的資料,要先
載入 CPU 的暫存器內,不能臨時再跑去 RAM 裡面拿,因為關
閉 RAM 了,所以一拿就會當了。

再來就是醒來的動作了,醒來是用按 power 鍵的動作,這個
power 鍵一按就是從位址零開始執行,它是不管你是被吵醒還
是重開機,都由零關始執行,所以你放在位址零的程式就要先
自己判斷,要檢查一下狀態,是普通開機還是 suspend 的醒
來,如果是 suspend 的醒來,那就要先還原 RAM 的正常狀態
然後載入 CPU 暫存的 suspend 前的一些資料,如剛剛的執行
位址點,然後再由 suspend 前的下一行程式開始執行。通常
這些動作都在 kernel 內完成,而且要用組合語言來寫,因為
很多動作有一定的順序,順序錯了,一切都掛了。

會不會覺得好像還蠻麻煩的?沒錯,嵌入式就是比較麻煩些,
而且不僅要懂軟體,硬體也要懂一些,不然很難理解,為什麼
要這麼做,而軟體也要出動古老的組合語言,不然就搞不定了。

--
本文章可非營利自由轉載,需註明文章作者及來源。