當能耗增加, 熱也會伴隨增加. 電子產品必須有電流通過才能運作, 所以只要使用時就會產生發熱現象. 工業界有定義一個安全的溫度範圍, 主要目的是為了避免使用者在使用時被燙傷. 根據文獻(ISO 13732-1 or EN 563 or UL/IEC 62368-1)中記載, 不管事塑膠, 陶瓷或是金屬, 只要在溫度48度握著超過10分鐘都會有被燙傷的機會.
根據國際安全標準UL/IEC 62368-1的規定, 手持式裝置的表面溫度僅可達到攝氏48℃, 倘若過熱就可能會有燙傷,電池損害..等安全疑慮. 換言之,智慧型手機使用時溫度不能超過攝氏48℃, 否則就是過熱, 有安全問題.
手機過熱的原因 :
手機只要使用, 因為產生功耗, 就會有溫度. 智慧型手機在一般上網或通話使用時手機溫度在攝氏35~40℃微溫狀態是正常的, 但若持續超過40℃以上就算過熱現象, 若超過48℃以上則有安全性的疑慮. 手機為何會過熱? 主要原因如下:
A. 高耗能的APP軟體運作(如玩3D遊戲或播放影片)或大量資料傳輸造成CPU持續以高負載運行
B. 邊充電邊玩遊戲或通話
C. 使用不良的鋰電池
D. 手機通訊軟體故障(拉住wakelock)
E. 訊號不好(-100dB)
由於目前智慧型手機大都具備多工功能, 使用耗能的APP軟體(如遊戲、Flash、相機、看影片或大量資料傳輸), 若Thermal的部分沒處理好, 手機溫度將會持續飆高到40~50度.
Thermal工作行為
當溫度上升時要達到降溫的效果, 最直接的做法就是將熱源降低. 而在手機中主要的熱源有:
1. CPU
2. GPU
3. WLAN
4. LCD
5. Modem
6. Battery
7. Camcorder
主要熱源 :
上述所有的熱源最主要的就是CPU, Modem, Battery,
Camcorder. GPU的部分雖然也是會熱, 但是與CPU相比卻小很多. 此外GPU通常能調整的範圍不多(通常只有3~4種Freq.可選擇), 所以只要降GPU頻率, 使用者就會很容易就會感受到. 因此除非是真的過熱(表面超過40 ~ 41度)才會對GPU做throttle.
Modem的部分也很類似, 當訊號不佳時Modem會打出高功率尋找基地台. 而Modem的throttle手段也只有降Tx降throughput. 但是卻不會讓打Power找基地台的Modem降溫.
LCD方面的Throttle手段是降低LCD亮度, 效果也不錯, 但是使用者會感覺到畫面變暗. 因此目前Qcom的Project都沒導入. (因為有較多的控溫手段)
CPU :
CPU是手機內最熱的一個元件, 比較高階的CPU(例如8974或8939)如果用最高頻運行很輕鬆就會衝破100度C. 因此CPU會是Thermal第一個需要調整的原件. 而CPU能夠被調整的也就是所謂的降頻, 當頻率被降低所產生的熱也會同步降低. 而每個Chip能調整的頻率不一定相同, 主要定義在CPU DCVS中(dtsi中). 這部分Thermal不會去修改, 主要由Performance
Team主導.
qcom,msm-cpufreq@0 {
reg = <0 4>;
compatible = "qcom,msm-cpufreq";
qcom,cpufreq-table =
< 200000 >,
< 400000 >,
< 533330 >,
< 800000 >,
< 998400 >,
< 1094400 >,
< 1152000 >,
< 1209600 >;
};
當DCVS設定好後, 就可以在devices上得到資訊.
cat
/sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies
如此就可以知道目前有哪些CPU Freq.可以調整了.
GPU :
GPU又稱顯示晶片,是一種專門在個人電腦、工作站、遊戲機和一些行動裝置(如平板電腦、智慧型手機等)上實作圖像運算工作的微處理器. GPU分擔了部分原本是由CPU所擔當的工作, 尤其是在進行3D處理時, 功效更加明顯. 在手機方面GPU主要負責畫圖&圖形運算, 因此不會像一般電腦顯卡一樣這麼有力, 通常提供的GPU的Freq.都不會太高. 以MSM8916為例GPU的部分能調整的頻率有400MHz, 310MHz 200MHz. 此外在玩遊戲時會大量地使用到GPU的資源, 如果這時候對GPU做降頻的話, 使用者很有可能就會感覺到遊戲會變卡頓. 因此GPU這部分除非溫度快到超過SPEC的範圍, 否則基本上都不會主動降頻.
qcom,gpu-pwrlevels {
#address-cells = <1>;
#size-cells = <0>;
compatible = "qcom,gpu-pwrlevels";
qcom,gpu-pwrlevel@0 {
reg = <0>;
qcom,gpu-freq = <400000000>;
qcom,bus-freq = <3>;
};
qcom,gpu-pwrlevel@1 {
reg = <1>;
qcom,gpu-freq = <310000000>;
qcom,bus-freq = <2>;
};
qcom,gpu-pwrlevel@2 {
reg = <2>;
qcom,gpu-freq = <200000000>;
qcom,bus-freq = <1>;
};
qcom,gpu-pwrlevel@3 {
reg = <3>;
qcom,gpu-freq = <19200000>;
qcom,bus-freq = <0>;
};
};
詳細的頻率可以從下面的node得到.
cat
/sys/class/kgsl/kgsl-3d0/gpu_available_frequencies
Battery :
Thermal對電池會做的動作是限制電池的充電電流, 停止快充. 最主要會發熱的因素是快充.
最近的Project開始在導入快充, 很容易發現在快充時手機會明顯發燙, 在Suspend下大約表面會到37度左右. 如果一邊快充又一邊使用手機, 溫度可能會來到40度左右. 此時CPU會被降頻, 使用者在操作上就可能會覺得卡頓. 能傳送的訊息為0, 1, 2, ...等數值, 而後續要做甚麼是Battery的同仁去實現, 例如停快充, 限制充電電流. 而Thermal這邊需要做的就是要溝通好並確認每個值對應的Action是對的.
Camcorder :
Camcorder是Thermal對Camera發出的通知. 當開啟Camera時, Camera會到Thermal這邊註冊Client. 當達到需要對Camera做控制時就會發送Event到Camera那邊. 能傳送的值為0 ~ 10, 而定義要做甚麼事則是在Camera Driver那邊決定, 可以限制FPS在多少等等. 因此Camcorder的Action定義, 每個Project有可能會不一樣.
Thermal運行架構 :
Qcom的架構主要由三個部分組成, BTM,
KTM, ThermalEngine.
這三個分類主要是為了整個開機到開機完成階段而分成的三個Level.
沒有留言:
張貼留言