EC : LPC Module

ESPI/LPC/ISA Module 

EC 的 LPC Module 是透過 ESPI/LPC/ISA 介面和系統晶片組(Chipset)及中央處理器(CPU)溝通,每一個 LPC Module 都會擁有特定的 I/O 和 記憶體,CPU會透過持定的IO或記憶體和 LPC Module做初始化,設定指令或資料的傳送的。LPC Module 會依要求的新增,這一章節先介紹最必要的二個 LPC Module,分別是 KBC Module 和 PM Module

KBC Module

KBC Module (Keyboard Controller Module) 鍵盤控制器,主要是用來按制鍵盤(包含 EC 晶片內含的 Matrix 掃描及舊的 PS2 介面鍵盤) 和滑鼠 (包含 PS2 介面的 Touchpad 和 Mouse) 等裝置。

KBC Module 的 IO Port 為 IO Port 60H/64H,系統晶片會經 IO Port 60H/64H 傳送指令或資料給 KBC Module,再經 KBC Module 依指令要求執行服務程式或資料傳送到 TouchpadMouse 及 Keyboard裝置。

系統收送指令和資料的流程:

  • 系統收送指令和資料之前會先讀取 PORT 64H 取得 KBC Module 狀態。
  • 指令傳送-系統會經由 PORT 64H 傳送指令給 KBC Module,狀態位元A20
  • 資料傳送-系統會經由 PORT 60H 傳送資料給 KBC Module,狀態位元A21
  • 資料讀取-系統會經由讀取 PORT 60H 來取得 KBC Module 回傳的資料。

KBC Module 的內部方塊圖:


在系統傳送指令或資料給KBC Modue,因為DBBIN為一個位元組的緩衝區塊,所以接收到指令或資料送到DBBIN後,KBC ModuleIBF (Input Buffer Full)位元就會被設定並且產生IBF中斷傳送給ICU (Interrupt Control Unit),中斷訊號啟動了中斷服務程式,在中斷服務程式內讀取指令或資料後同時IBF的旗標就會被清除,並由主要服務程式完成IBF的中斷請求。

KBC Modue傳送資料給系統時,因為DBBOUT為一個位元組的緩衝器,所以在KBC Modue傳送資料給DBBOUT後,KBC ModuleOBF (Output Buffer Full)位元就會被設定,並產生OBF傳送給ICU,同時核心處理器會產生中斷向量告知系統,鍵盤的資料會產生IRQ1;滑鼠的資料會產生IRQ12。在系統讀取資料後,OBF的旗標會同時被清除。

KBC Module 暫存器:

  • DBBOUT – 資料輸出緩衝區,由核心處理器傳送資料給系統。
  • DBBIN – 資料輸入緩衝區,由系統傳送資料給核心處理器。
  • COMMAND – 指令輸入緩衝區,由系統傳送指令給核心處理器。
  • STATUS – 讀取核心處理器輸入緩衝區的狀態

KBC Module的中斷產生方塊圖:

KBC Module提供二種方法來產生IRQ中斷,一種是由硬體自動產生中斷觸發訊號,由 IRQM 來控制脈波寬度及 IRQ POL來控制訊號的輸出極性。

另一種是由 IRQxB 直接控制輸出訊號。一般系統是採用硬體自動產生中斷來觸發系統,中斷觸發的寬度為4Cycle

PM Module

Power Management Channels Module提供了兩個通道和系統溝通,一個PORT 62H/66H做為ACPI Embedded Controller Interface;另一個PORT 68H/6CH 做為EC Firmware用來偵測錯誤及應用程式呼叫。

系統收送指令和資料的流程:

  • 系統收送指令和資料之前會先讀取PORT 66H/6CH取得KBC Module狀態。
  • 指令傳送-系統會經由 PORT 66H/6CH 傳送指令PM Module ,狀態位元A20
  • 資料傳送-系統會經由 PORT 62H/68H 傳送資料PM Module ,狀態位元A21
  • 資料讀取-系統會經由讀取PORT 62H/68H 來取得PM Module回傳的資料。 


PM Module的內部方塊圖


PM ModuleKBC Module是一樣在DBBINDBBOUT都是一個位元組的緩衝區,所以接收到指令或資料送到DBBIN後,PM ModuleIBF [Input Buffer Full]位元就會被設定並且產生IBF傳送給ICU [Interrupt Control Unit],當指令或資料傳送到中斷服務程式同時IBF的旗標就會被清除,並由中斷服務程式完成IBF的中斷請求。

PM Module傳送資料給DBBOUT後,PM ModuleOBF [Output Buffer Full]位元就會被設定,並產生OBF傳送給ICU,同時核心處理器會產生中斷向量告知系統,中斷向量可以是IRQSMISCI。在系統讀取資料後,OBF的旗標會同時被清除。

PM Module提供了兩種產生觸發訊號的模組,第一種模組是和KBC Module相似,只是中斷觸發信號除了可以是IRQSMISCI。有一個限制是只有Power Channel 1 [PORT 62H/66H]才可以使用這一種模組,其方塊圖如下:

當觸發資料送到HIPMnDOEC可以去依照HIPM1IE的設定產生中斷觸發訊號,若將HIPM1IEIRQE位元設為HIGH,即可產生IRQ觸發系統。若把HIPM1IESMIE位元設為HIGHHIPM1IESMIPOL來控制訊號的輸出極性,產生SMI#觸發系統。若把HIPM1IESCIE位元設為HIGHHIPM1IESCIPOL來控制訊號的輸出極性,產生SCI#觸發系統。

第二種模組為增強型的PM Module,這種模組就沒有限制必需要為那一個Power channel 才可以使用這個模組,但是 Power Channel 2 預設為加強型PM Module。其方塊圖如下: 

如果使用HIPMnDO產生IRQ中斷觸發訊號的話,和第一種模組並沒有差異。但是若要採用SMI#來觸發系統的話,只需把資料傳送到HIPMnDOM,中斷信號經由HIPMnIEHSMIE來選擇PLMMHIPMnIC或者HIPMnICSMIB的中斷觸發信號,再經HIPMnIESMIE控制,由HIPMnICSMIPOL決定輸出極性,再把中斷觸發信號送出。相同地,若要採用SCI#來觸發系統的話,只需把資料傳送到HIPMnDOC,中斷信號經由HIPMnIEHSCIE來選擇PLMCHIPMnCTL或者HIPMnICSCIB的中斷觸發信號,再經HIPMnIESCIE控制,由HIPMnICSCIPOL決定輸出極性,再把中斷觸發信號送出。

此外,當增強型的PM Module經由HIPMnDIC讀取資料或指令,PM ModuleIBF被清除,同時會產生中斷給ICU及和OBF的路徑一樣產生SCI#觸發系統。只是增強型的PM Module用在Power Channel 1 [PORT 62/66]可以減少很多Firmware Code去產生SCI#的中斷觸發信號,但是Phoenix KBC/EC Firmware並沒有採用。若用於Power Channel 2做為應用程式介面,一般都把中斷觸發信號關閉,所以一直沒有運用在實務上。

留言

這個網誌中的熱門文章

EC 所需知識 - SMBUS

EC 所需知識 - LPC

EC 所需知識 - KBC