發表文章

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 FW - DTS

圖片
Digital Thermal Sensor(DTS)簡介與運作原理 Digital Thermal Sensor(DTS) 最早應用於 Intel 雙核心處理器架構。由於每個核心可以獨立執行或暫停運作,整體 CPU 晶片的溫度會隨各核心運作狀態而變動。為了更精確地監控並管理溫度,Intel 設計了 DTS,以便即時回報各核心的溫度資訊給系統 BIOS。 當 CPU 溫度變化達到某個門檻時,DTS 會透過 SMI(System Management Interrupt) 觸發中斷,通知系統 BIOS。BIOS 中的 SMI 中斷服務程式會被呼叫,進而讀取各核心的即時溫度。並且設定下一個上限及下限觸發的溫度點 Digital Thermal Sensor(DTS)簡介與運作原理 Digital Thermal Sensor(DTS) 最早應用於 Intel 雙核心處理器架構。由於每個核心可以獨立執行或暫停運作,整體 CPU 晶片的溫度會隨各核心運作狀態而變動。為了更精確地監控並管理溫度,Intel 設計了 DTS,以便即時回報各核心的溫度資訊給系統 BIOS。 當 CPU 溫度變化達到某個門檻時,DTS 會透過 SMI(System Management Interrupt) 觸發中斷,通知系統 BIOS。BIOS 中的 SMI 中斷服務程式會被呼叫,進而讀取各核心的即時溫度。 DTS 的運作流程: 開機階段: 系統 BIOS 會從 EC RAM 中讀取 DTS 對應的每階溫度上升/下降限制值(Threshold)。 溫度變化觸發: 當 CPU 核心的溫度發生變化,DTS 會觸發 SMI 中斷,BIOS 經由中斷服務程式取得各核心的溫度資訊。並且設定下一階段的上限及下限溫度點 比較溫度與限制值: BIOS 會使用多個核心中最高的溫度與 DTS 設定的限制值進行比較。 對應 Thermal Table 處理: 若溫度高於或低於某個限制,BIOS 會依據 Thermal Table 找出對應的控制階數(Thermal Level)。 風扇控制: BIOS 將對應的階數傳給 EC(嵌入式控制器),由 EC 控制風扇的轉速或其他散熱裝置的行為,以達到散熱調節的效果。   EC Firmware 與 BIOS 搭配...

EC - 鍵盤掃描

圖片
Keyboard Matrix  Scan 現今筆記型電腦的鍵盤多採用 104 鍵配置,這意味著至少需要 8 × 13  (104) 個掃描點位,也就是 Y0 至 Y12(共 13 條 MY 線),才能涵蓋所有按鍵。 本章將著重於 Firmware 層面的技術實作,並說明基本硬體如何配置 MXn 與 MYn。若您希望深入了解 Keyboard Scan Module 的運作原理,建議參閱相關技術資料。新一代的 EC 晶片已將原有的 16x8 鍵盤矩陣擴充為 18x8 結構,以支援更多按鍵配置。 所謂 Ghost Key,是指在用戶同時按下如 X0/Y0、X0/Y1 與 X1/Y0 等位置時,掃描邏輯會誤判 X1/Y1(即 MX1/MY1)也被同時按下(電流由 X0/Y1 流到 X0/Y0 再到 X1/Y0 而誤判 X1/Y1 也被按下)。這類未實際觸發卻被錯誤判定的按鍵即稱為 Ghost Key。為避免此類現象,設計鍵盤矩陣時,應對常用作組合鍵的按鍵適當預留空間,避免造成掃描誤判。 Firmware 的鍵盤掃描流程如下: 當 EC 處於待機狀態時,MXn 設為輸入端,而 MYn 則輸出低電位(Low)。當使用者按下某個按鍵時,對應的 MXn 與 MYn 將被導通,使得低電位從 MYn 傳送至 MXn,進而觸發 EC 偵測到中斷。中斷服務程式僅負責記錄該事件(set service flag),並將 EC 設定為禁止掃描狀態(MYn 輸出改為高電位),同時立即釋放中斷資源。 隨後,由 Firmware 的主服務程序負責執行按鍵掃描。掃描過程會依序將 MY0 至 MY17 的每條線由高電位轉為低電位,並讀取 MXn 的輸入狀態,以判定是哪一顆按鍵被觸發。此階段同時會檢查是否產生 Ghost Key,進行消彈跳(Debounce)處理,並判斷該按鍵為 按下(Press) 或 釋放(Release) ,是否需要重複輸出(Repeat)等動作。 最後,根據 Code Set 1 或 Code Set 2 的對應表,Firmware 會將對應的 Scancode 傳送至主系統,以完成鍵盤輸入的傳遞流程。 鍵盤掃描演算法說明 鍵盤掃描的基本流程如下: 初始化掃描迴圈計數器 LoopIndex = 0 。 產生掃描訊號: 將 0x01 ...

EC - Watchdog

圖片
Watchdog Watchdog  是用來偵測  Firmware  是否有正常的工作,沒有因為中斷佔用或者 Dead Loop 而被停止運作,在啟動 Watchdog 之後,Firmware 也需配合修改,在 Watchdog Timeout 之前,定時的 Touch Watchdog (Clear Watchdog Timer).若沒有定時 Touch Watdog 造成  Watchdog Timeout,EC 就會被 Watchdog  Reset , 核心處理器被重置,Firmware 由程式的起始點開始執行。 Watchdog 的方塊圖如下: Watchdog Module  是由  EC  系統外掛或內含的  32KHz  或更低頻的振盪器做為   Module  的基本工作頻率,經由一 5 個位元的計時器  Timer 0 ,做為 Firmware 1.0ms 的計時器,產生中斷,提供給 Firmware  週期性偵察裝置或事件的工作時間,Timer0 的輸出訊號,再經由 16 位元的計時器由  T0OUT  傳送到  ICU  由  Firmware 的中斷服務程式來完成  T0OUT  中斷的要求。最後由  Watchdog  計數器  WDCNT 可選擇使用 Timer 0 或 T0OUT 來當計數訊號, 計數 Timeout 後,產生硬體中斷,硬體中斷路徑可以分為 Warm Reset  和  Cold Rest 。 Warm Reset –  清除核心處理器及狀態暫存器和 Power Manager Controller Module 。 Cold Reset – Reset  整個晶片 當系統要填寫 ESCD 或更新 BIOS 時,需要停止 Watchdog 的計數,避免 Watchdog 持續計數,產生 Reset 。停止 Watchdog 計數的方法,以 nuvoton EC 來說明 Watchdog Configuration, 先把 TWCFG...

EC - MIWU

圖片
Multi-Input Wake-Up(MIWU) MIWU模組用於把  EC 由 Idle  mode 中  Wake up 到 Active mode 。在 Active Mode 下,Wake up 事件成為ICU的中斷訊號,完成Wake up 的要求工作。 MIMU 的 Wake up 事件 的 觸發 來源 可分為內部模組和外部可 Wake up 群組,總共 32 個觸發事件來源 。 MIWU 察覺任何有效的輸入觸發訊號,若有觸發訊號進來則會產生 wake-up 事件 的需求,這時 wake-up 事件 會通知 Power Management module(PMC) 讓系統離開 Idle mode 回復 Active mode 。 下圖為 Wake-up 事件 的流程圖 在 wake-up 事件 的流程,由觸發訊號產生開始,經  WKEDGn  會先確認中斷是否符合要求(可以設定要求為 Falling Edge/ Rasing Edge/ Any Edge),當符合要求就把 WKPNDn 的相對位元設為 1 ,表示有 wake up 事件產生,再經由  WKENn  確認wake up 事件是否為 Enable ,確認為 enable 後,把事件傳送到  Power Management Control Unit [PMC] 去通知核心處理器離開  Idle mode。同時,也把 事件傳送 給  ICU 在 EC 回到 Active 時,處理中斷任務 。 MIWU Register Edge Detection Register (WKEDG) 這個 register 設為 0 時,觸發方式為 Low to High ,設為 1 時,觸發方式為 High – to – Low 。 WKEDGE1 bit 0 ~ bit 7 控制 WUI 10 ~ WUI 17 。 WKEDGE2 bit 1 ~ bit 7 控制 WUI 20 ~ WUI 27 。 WKEDGE3 bit 2 ~ bit 7 控制 WUI 30 ~ WUI 37 。 WKEDGE4 bit 3 ~ bit 7 控制 WUI 40 ~ WUI 47 。 Pending Register(WKPN...

EC - ICU

圖片
ICU ( Interrupt Control Unit) 本章節在於說明  EC  本身的  Interrupt ,只有在   Active  的狀態才有  Interrupt  的功能,本章節的內容會介紹  Interrupt  的優先權、來源、觸發的方式。本章所舉的例子為當  EC Active  mode  後,PS2 鍵盤按下任何一個鍵,經由 PS2模組產生 中斷訊號 ,EC 會設定 中斷的  Pending Flag 然後進入中斷服務程式 ,若還有非需立即要完成的事件,就需設定 Service Flag 後 ,然後清除 Pending Flag 回到主程式, 主程式發現在Sericee Flag 就先完成非立即完成事件,再處理其他 Task 。   由  ICU 管理 所有的中斷方式,每一個中斷訊號都有不同的權限,編號愈高的中斷權限愈高,依照不同的中斷  source  可知道  INTn  是外部還是內部或是由  MULIT-INPUT WAKE-UP  的功能 I/O。在 中斷發生時 ,相對映的 Pending Flag 就會被設為 1 ,若中斷是Enable的,Processor 就會產生中斷,並執行中斷服務程式。在中斷服務程式完成需清除  Pending Flag 。 ICU 有  31  個  INT ,其來源大致分為內部及外部中斷,內部中斷為  EC 模組中斷如 MFT 、 SMBus….. 等,而 Power Button 是GPIO為外部中斷的方式。 Non-Maskable Interrupt(NMI) - 全部為  edge-triggered NMI ,一般為晶片在執行時發生的硬體問題會造成核心處理器停止運作,需要 Reset 。 ex: External Power Fail(PFAIL) interrupt source 。 Maskable Interrupt - 31 個  high-level  和  edge-triggered...

EC :UART

圖片
UART Module UART (Universal Asynchronous Receiver-Transmitter)  主要是利用 RS232 的串列傳輸,經由 Tx/Rx 把資料傳送給 Remote System 或接收從 Remote System 傳送的資料。所以設定和系統相的的傳輸封包為格式為 EC 的主要工作。 一般 UART 的應用是在工廠模式,經由 Remote System 的指令來查詢系統是否出問題或做出廠前的檢測,或者是出廠後出問題,回廠維修時,把系統的狀態傳給維修人員,讓機器在出問題時,可以在最短的時間找出問題,並把它修好。   UART 的方塊圖 Baud Rate Generator – 設定 UART 的傳輸的封包格式 Transmitter – 傳送到 Remote System 的緩衝區 Receiver – 接收 Remote System 的緩衝區 UART Transmitter  緩衝器 Transmit Data Buffer (UTBUF) - Hold the data byte to be tramitteed. UART Receiver 緩衝器 Receive Data Buffer (URBUF) - Holds the received data byte.  Baud Rate Generator – 設定 RS-232 的封包格式 UFRS PEN B[6]  – 是否設定同位元。 0 – Disable ; 1- Enable 。 PSEL B[5:4]   – 設定同位元。 0x00 – 奇同位 ; 0x01 – 偶同位。 STP B[2]   – 停止位元的數目。 0 – 1 個停止位元 ; 1 – 2 個停止位 元。 CHAR B[1:0]   – 資料位元的數目。 0x00 – 8 個位元資料 ; 0x01 – 7 個位元資料; 0x10 – 9 個位元資料。 URAUD/UPSR B aud rate = Core Clock / ( 16 * UDIV * UPSC ) UDIV (Baud Rate Divisor) UPSC (Baud Rate Prescaler) U...