EC FW - FanControl
Fan Control – 系統風扇控制機制
EC Firmware 對於系統溫度的控管可分為以下三個主要部分:- 溫度感測與讀取:從 CPU 晶片中讀取即時溫度資訊。
- 風扇控制邏輯:根據不同系統架構判斷最準確或最高的溫度值,進而調整風扇轉速以達到散熱目的。
- 風扇運作狀態監控:定期檢查風扇實際轉速是否落在預期的範圍內,確保硬體正常運作,並在異常時啟動保護機制。
- 讀取系統溫度:PollingThermal 函式 :
PollingThermal
為負責輪詢與監控 CPU 溫度的主要函式,其運作可再細分為以下三個子階段:
- ReadCPUTemp – 讀取 CPU 溫度:透過 DTS(Digital Thermal Sensor)或 Thermal Diode 等方式,讀取 CPU 核心或整體封裝的即時溫度。
- Validate Temperature – 溫度值檢查:證所讀取的溫度數據是否有效,包括過熱異常值(如 TJ 限制)、資料未更新、或失效的感測器狀況。
- Trigger Notification – 異常或變動處理:若溫度變化已跨越預設閾值(如上下階級),則需通知系統並觸發風扇控制調整流程。
ReadCPUTemp 函式 – 溫度讀取流程說明
ReadCPUTemp
是 EC Firmware 中負責讀取 CPU 溫度的主要函式。其執行邏輯如下:
-
建立 Thermal Diode Table:
EC Firmware 會預先定義一份 Thermal Diode Table,該表格中包含所有支援的 Thermal Diode 裝置資訊,例如:-
SMBus 的 Slave Address
-
對應的 溫度讀取命令(Command)
-
-
查詢與傳送溫度讀取指令:
當 EC 透過 SMBus 介面讀取 CPU 溫度前,會根據目前的 Thermal Index 查詢 Thermal Diode Table,取得對應的 Address 與 Command,並將這些資訊傳送給 Thermal Diode 裝置。 -
驗證讀取是否成功:
-
若該組 Slave Address 與 Command 正確,將可成功讀取到有效的 CPU 溫度值。
-
若讀取失敗(如無回應或回傳無效數據),EC 將自動將
Thermal Index
遞增,指向下一筆表格資料,並於下一次讀取時嘗試另一組裝置位址與指令。
-
-
異常處理機制:
-
若循環嘗試表格中所有支援的 Thermal Diode 組合仍無法成功取得溫度,則判定系統不支援現有設計的 Thermal Diode,需修改 EC Firmware 以納入支援對應的硬體組件。
-
model |
salve addr |
command |
model 0: LM75 |
0x90 |
0x00 |
model 1: MAX6657/6648 |
0x98 |
0x01 |
model 2: G781 |
0x98 |
0x01 |
model 3: MIC280 (.05) |
0x |
0x01 |
溫度監控與風扇控制的進階處理流程
第二階段:驗證 Remote Thermal Diode 的溫度資料
當 EC 透過 Remote Thermal Diode 讀取到 CPU 溫度後,會先判斷數值是否為有效範圍。根據 SMBus 資料格式:
-
0x00 – 0x7F 表示正值(對應溫度為 0°C 至 127°C)
-
0x80 – 0xFF 表示負值(通常不會出現在常見運行環境)
原始設定中,僅接受 10°C 至 127°C 為有效溫度範圍。然而,某些 CPU 在 0°C 環境下開機時,溫度讀值可能低於 10°C。為確保相容性,多數平台會將有效溫度範圍調整為 0°C 至 127°C。
過溫處理:
-
若偵測到 CPU 溫度高於系統定義的 Shutdown 閾值,且該狀況持續 超過 5 秒以上,則:
-
EC Firmware 將主動執行 系統關機(Shutdown),以避免因過熱造成損壞。
-
第三階段:溫度變化觸發保護事件(Q-Event)
為使系統能夠即時回應熱變化,EC Firmware 會根據溫度波動觸發相對應的 Q-Event:
-
當系統溫度上升或下降超過預設門檻(例如 ±5°C)時,EC 發送 Q-Event 通知 BIOS。
-
BIOS 可依據此事件執行相應保護動作(如:調整功耗模式、降低亮度、限制 CPU 功能等)。
-
-
當溫度繼續上升至 100°C,EC 會再度發送一個 Q-Event,明確指示系統必須進行 降頻(Throttling),由 BIOS 執行 CPU 降速操作,以保護系統安全。
風扇控制邏輯
EC Firmware 採用階數式風扇控制邏輯來因應不同溫度階段,具體如下:
-
讀取風扇階數設定:
-
從
ECRAM
中取得FanxStep
(風扇的最大階數),並依此作為風扇轉速變化的基準。
-
-
判斷模式與溫度參數:
-
根據當前所屬模式(如 TJ100、TJ85、Silent Mode 或 Performance Mode),取得每階對應的 上限/下限溫度值。
-
-
控制風扇升/降階:
-
若目前溫度高於所屬階段的 上限溫度,且風扇階數未達最高階,則:
-
風扇階數 +1
-
-
若目前溫度低於所屬階段的 下限溫度,且風扇階數大於 0,則:
-
風扇階數 -1
-
-
EC 即透過這樣的動態調節機制,精準控制風扇轉速,達成降溫與靜音間的平衡。
風扇轉速監控 – 利用 Timer 模組
EC Firmware 透過 MFT16(Multi-Function Timer 16-bit)模組 來精準計算風扇的實際轉速。其原理與運算邏輯如下:
1. 取得脈波寬度(Pulse Width)
-
風扇的轉速通常會透過 TACH 回授訊號(Tachometer Feedback)以脈波方式傳回至 EC。
-
EC 使用 Timer 模組的計時功能,偵測從 訊號由 HIGH → LOW 開始計數,直到下次訊號再度由 HIGH → LOW 為止,即完成一次完整脈波週期的測量。
-
此脈波週期對應到風扇轉動的一部分行程(通常為二分之一圈,視風扇設計而定)。
2. 計算轉一圈所需時間
-
假設風扇轉一圈需要
N
個 TACH 脈波,則:
3. 換算為每分鐘轉速(RPM)
-
風扇轉速的單位為 RPM(Revolutions Per Minute)。
-
所以需將「一圈所需時間(秒)」換算成每分鐘可轉幾圈:
-
風扇轉速計算與控制演算法
一、風扇轉速計算公式
EC 利用內建的 Timer 模組 來計算風扇實際轉速,其基本計算公式如下:
1. 單圈時間計算:
32768
為 Timer 時脈頻率(Hz)-
TxCRA/B
為 Timer 計數值(由 MFT 模組取得) -
每圈所需的 脈波數 視風扇設計而定,常見為 2 脈波/轉
2. RPM(轉速)計算:
二、轉速區間表機制
為確保風扇運作在期望範圍內,EC Firmware 根據每 100RPM 的偏差範圍對應建立一份 TxCRA/B 上下限對照表。
-
若計算得出的
TxCRA/B
值落在該對照表的上下限範圍內,則視為轉速正常。 -
若偏離該範圍,表示風扇速度異常,需進行電壓調整或錯誤處理。
三、風扇轉速控制邏輯(func_FanSpeed 演算法)
func_FanSpeed
為控制風扇速度的核心函式,其邏輯如下:
1. 控制條件判斷:
-
若系統處於 DOS 模式 且執行 PE 測試程式(如風扇驗證工具),則:
-
EC 暫停對風扇的轉速控制,由 PE 程式主導風扇調整。
-
-
否則進入正常控制流程:
2. 正常控制邏輯:
-
EC 讀取當前風扇的實際轉速,並與對照表的範圍進行比較。
-
若轉速低於下限值 → 提高風扇控制電壓(PWM duty up)。
-
若轉速高於上限值 → 降低風扇控制電壓(PWM duty down)。
3. 異常處理(Fail-safe):
-
若風扇 持續未轉動達 60 秒以上,即便已調整電壓:
-
EC 將直接送出 最高控制電壓(最高 PWM Duty) 強制啟動風扇。
-
若仍無法轉動 → 判定風扇異常。
-
留言
張貼留言