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 溫度的主要函式。其執行邏輯如下:

  1. 建立 Thermal Diode Table:
    EC Firmware 會預先定義一份 Thermal Diode Table,該表格中包含所有支援的 Thermal Diode 裝置資訊,例如:

    • SMBus 的 Slave Address

    • 對應的 溫度讀取命令(Command)

  2. 查詢與傳送溫度讀取指令:
    當 EC 透過 SMBus 介面讀取 CPU 溫度前,會根據目前的 Thermal Index 查詢 Thermal Diode Table,取得對應的 Address 與 Command,並將這些資訊傳送給 Thermal Diode 裝置。

  3. 驗證讀取是否成功:

    • 若該組 Slave Address 與 Command 正確,將可成功讀取到有效的 CPU 溫度值。

    • 若讀取失敗(如無回應或回傳無效數據),EC 將自動將 Thermal Index 遞增,指向下一筆表格資料,並於下一次讀取時嘗試另一組裝置位址與指令。

  4. 異常處理機制:

    • 若循環嘗試表格中所有支援的 Thermal Diode 組合仍無法成功取得溫度,則判定系統不支援現有設計的 Thermal Diode,需修改 EC Firmware 以納入支援對應的硬體組件。



Thermal Table 如下表 –

model

salve addr

command

model 0: LM75

0x90

0x00

model 1: MAX6657/6648

0x98

0x01

model 2: G781

0x98

0x01

model 3: MIC280 (.05)

0x9C

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 採用階數式風扇控制邏輯來因應不同溫度階段,具體如下:

  1. 讀取風扇階數設定:

    • ECRAM 中取得 FanxStep(風扇的最大階數),並依此作為風扇轉速變化的基準。

  2. 判斷模式與溫度參數:

    • 根據當前所屬模式(如 TJ100TJ85Silent ModePerformance Mode),取得每階對應的 上限/下限溫度值

  3. 控制風扇升/降階:

    • 若目前溫度高於所屬階段的 上限溫度,且風扇階數未達最高階,則:

      • 風扇階數 +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 脈波,則:

      一圈所需時間(秒)=單一脈波時間×N

    3. 換算為每分鐘轉速(RPM)

    • 風扇轉速的單位為 RPM(Revolutions Per Minute)。

    • 所以需將「一圈所需時間(秒)」換算成每分鐘可轉幾圈:

      RPM=60一圈所需時間(秒)=60Pulse Width×N\text{RPM} = \frac{60}{\text{一圈所需時間(秒)}} = \frac{60}{\text{Pulse Width} \times N}

風扇轉速計算與控制演算法

一、風扇轉速計算公式

EC 利用內建的 Timer 模組 來計算風扇實際轉速,其基本計算公式如下:

1. 單圈時間計算:

風扇完成一轉所需時間=每圈脈波數×(132768×(0xFFFFTxCRA/B))\text{風扇完成一轉所需時間} = \text{每圈脈波數} \times \left( \frac{1}{32768} \times (0xFFFF - \text{TxCRA/B}) \right)
  • 32768 為 Timer 時脈頻率(Hz)

  • TxCRA/B 為 Timer 計數值(由 MFT 模組取得)

  • 每圈所需的 脈波數 視風扇設計而定,常見為 2 脈波/轉

2. RPM(轉速)計算:

RPM=60風扇完成一轉所需時間\text{RPM} = \frac{60}{\text{風扇完成一轉所需時間}}

二、轉速區間表機制

為確保風扇運作在期望範圍內,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) 強制啟動風扇。

    • 若仍無法轉動 → 判定風扇異常。



留言

這個網誌中的熱門文章

EC 所需知識 - SMBUS

EC 所需知識 - KBC

EC 所需知識 - LPC