發表文章

EC FW - DTS

圖片
Introduction and Operating Principle of Digital Thermal Sensor (DTS) The Digital Thermal Sensor (DTS) was first used in Intel's dual-core processor architecture. Because each core can operate independently or pause, the overall CPU chip temperature varies depending on the operating status of each core. To more accurately monitor and manage temperature, Intel designed DTS to provide real-time temperature information for each core to the system BIOS. When the CPU temperature reaches a certain threshold, DTS will...SMI(System Management Interrupt)An interrupt is triggered, notifying the system BIOS. The SMI interrupt service routine in the BIOS is then called, which reads the real-time temperature of each core and sets the next upper and lower temperature thresholds. Introduction and Operating Principle of Digital Thermal Sensor (DTS) Digital Thermal Sensor(DTS)Originally used in Intel's dual-core processor architecture. Because each core can execute or pause independently, the ov...

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...