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 依指令要求執行服務程式或資料傳送到 Touchpad,Mouse 及 Keyboard等裝置。

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

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

KBC Module 的內部方塊圖:


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

當KBC Modue傳送資料給系統時,因為DBBOUT為一個位元組的緩衝器,所以在KBC Modue傳送資料給DBBOUT後,KBC Module的OBF (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 ,狀態位元A2為0 。
  • 資料傳送-系統會經由 PORT 62H/68H 傳送資料給PM Module ,狀態位元A2為1 。
  • 資料讀取-系統會經由讀取PORT 62H/68H 來取得PM Module回傳的資料。 


PM Module的內部方塊圖:


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

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

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

當觸發資料送到HIPMnDO,EC可以去依照HIPM1IE的設定產生中斷觸發訊號,若將HIPM1IE的IRQE位元設為HIGH,即可產生IRQ觸發系統。若把HIPM1IE的SMIE位元設為HIGH,HIPM1IE的SMIPOL來控制訊號的輸出極性,產生SMI#觸發系統。若把HIPM1IE的SCIE位元設為HIGH,HIPM1IE的SCIPOL來控制訊號的輸出極性,產生SCI#觸發系統。

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

如果使用HIPMnDO產生IRQ中斷觸發訊號的話,和第一種模組並沒有差異。但是若要採用SMI#來觸發系統的話,只需把資料傳送到HIPMnDOM,中斷信號經由HIPMnIE的HSMIE來選擇PLMM的HIPMnIC或者HIPMnIC的SMIB的中斷觸發信號,再經HIPMnIE的SMIE控制,由HIPMnIC的SMIPOL決定輸出極性,再把中斷觸發信號送出。相同地,若要採用SCI#來觸發系統的話,只需把資料傳送到HIPMnDOC,中斷信號經由HIPMnIE的HSCIE來選擇PLMC的HIPMnCTL或者HIPMnIC的SCIB的中斷觸發信號,再經HIPMnIE的SCIE控制,由HIPMnIC的SCIPOL決定輸出極性,再把中斷觸發信號送出。

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

留言

這個網誌中的熱門文章

EC 所需知識 - SMBUS

EC 的架構 - EC 接腳的功能

EC Required Knowledge - LPC