在現代計算機體系結構中,尤其是在筆記本電腦等移動平臺中,存在一個至關重要的組件,它默默無聞地工作,卻主導著系統的功耗、穩定性和用戶交互體驗。這就是嵌入式控制器(Embedded Controller, EC)。
嵌入式控制器(EC)
EC 是什么?
EC 是一種專用的低功耗微控制器(MCU),集成在主板上,負責處理大量與主處理器(Application Processor, AP)解耦的系統級任務。其最顯著的特點之一是“始終在線”(always-on)的運行模式:只要主板持續供電,即便電腦休眠或關機,它依然在工作,隨時準備響應你的喚醒、開機等指令。
為什么需要 EC?
EC 的誕生源于計算機系統設計中的一個基本原則:功能分工。主處理器(CPU)擅長執行高性能的復雜計算任務,但若同時承擔大量低速、瑣碎且需實時響應的硬件控制工作,將嚴重影響系統整體效率。
EC 正是為此誕生的一種專用低功耗控制器,用于分擔這類任務。它的職責也因此不斷演進:
▲
在 PC 發展早期,為避免 CPU 被鍵盤頻繁的中斷和掃描操作所干擾,工程師引入了微控制器(即 EC 的前身)來專門監控鍵盤矩陣,并將處理后的按鍵信號上傳至主機。
▲
隨著筆記本電腦普及,EC 的角色顯著擴展,它接管了電源管理、散熱風扇控制和快捷鍵響應等功能。
▲
如今,EC的控制已深入系統底層,其職責已涵蓋復雜的充電協議(如USB PD)、多樣的傳感器管理,以及“開蓋喚醒/啟動”等功能。
總的來看,EC 的存在使得許多對時效性和功耗有嚴苛要求的底層任務從 CPU 中解耦,顯著提升了系統的響應效率、穩定性與能效表現。
EC 的職責
EC 覆蓋的職責范圍非常廣泛,涉及多個與底層硬件緊密交互的實時控制任務。其核心功能涵蓋電源管理、熱控制、人機交互、傳感器協同等多個方面,是保障系統穩定運行、降低功耗、優化用戶體驗的關鍵組成部分。
下表對 EC 的主要職責進行了分類整理,以便更直觀地展現其在系統中的角色分工。
表1:EC功能與職責

主機與 EC 的橋梁
EC與主機之間需要一條穩定高效的物理通道來交換命令和數據。隨著技術的演進,連接EC的總線也經歷了一次重要的升級換代,從傳統的LPC總線演進到了現代PC架構的新標準——eSPI總線。
過去,這種連接主要依賴LPC(Low Pin Count)總線。LPC以其結構簡單、兼容性強的特點服務了多年。然而,隨著筆記本電腦向著更輕薄、更長續航、功能更復雜的方向發展,LPC在帶寬、功耗和引腳數量上的局限性日益凸顯,已無法滿足現代系統的需求。
為此,Intel推出了LPC的繼任者——eSPI(Enhanced Serial Peripheral Interface)總線,并迅速成為現代PC平臺的新標準。eSPI針對PC體系結構進行了全面優化:
▲
更少的引腳:顯著減少了物理引腳數量,簡化了主板布線。
▲
更低的電壓:工作電壓降至1.8V,降低了功耗,并更好地適配主流SoC。
▲
更高的頻率:提升了時鐘頻率,并支持雙通道和四通道模式,大幅提升了數據吞吐量。
這些技術進步為現代輕薄型筆記本的設計帶來了顯而易見的益處。更少的引腳和更低的電壓,意味著主板設計可以更簡潔、功耗更低、續航更長。
而eSPI提供的更高帶寬,則為EC承擔更復雜的任務提供了堅實的基礎,使其能夠從容應對高頻的傳感器數據讀取、復雜的USB-C Power Delivery協議協商等對通信速率要求高的功能。
表2:LPC vs. eSPI 總線對比

深入x86平臺 EC
深入x86平臺 EC,首先聚焦其廣泛應用于 Windows 平臺筆記本和臺式機中的EC生態。
x86平臺 EC
‘x86平臺EC’ 并非指 EC 本身采用 x86 指令集,而是指其用于配合搭載 Intel 或 AMD x86 架構處理器的 PC 系統平臺。事實上,EC 通常基于 ARM、RISC-V 或其他 RISC(精簡指令集)架構的 MCU,這類架構以低功耗、快速響應為優勢,更適合處理實時性強、資源受限的底層任務。
這種設計與主處理器所采用的 CISC(復雜指令集計算機)架構形成了互補關系:前者專注于任務調度和狀態管理,后者承擔高性能的應用處理。
基于這樣的設計定位,x86 平臺逐漸發展出一套成熟的 EC 生態系統,芯片方案主要由幾家廠商提供并廣泛應用于主流 PC 產品中。其中較為常見的供應商包括新唐科技(Nuvoton)、聯陽半導體(ITE Tech)和微芯科技(Microchip)等。

這張簡化系統框圖描繪了基于 Intel Kaby Lake U MCP 平臺的核心組件連接。圖中央的 Intel KABYLAKE_U MCP 是主處理器,它通過 eSPI 接口與 SMSC KBC MEC1505 這個EC緊密連接。
EC 負責直接管理鍵盤/觸摸板和系統散熱風扇。這張圖是系統主要模塊連接的概覽,因此沒有展示所有詳細的電路和元件,實際上和EC相連接的還有SPI Flash、LED燈等模塊。
主機與EC通信方式
在Windows操作系統中,EC與系統的交互深度整合在ACPI(高級配置與電源接口)框架之內。我們可以將這種復雜的交互分解為三個邏輯層面來理解:上層的ACPI抽象接口、中層的系統核心驅動以及底層的硬件通信協議。
1. 上層:ACPI抽象接口 (The "API" Layer)
系統固件(BIOS/UEFI)會提供一系列ACPI表(如DSDT和SSDT),這些表中用ACPI機器語言(AML)定義了EC所支持的功能。這些功能被封裝成一個個標準化的“控制方法”(Control Methods)。
操作系統只需調用這些抽象的、如同API般的方法,即可命令EC工作,而無需關心其底層的硬件實現細節。

取自ACPI-spec6.5 4.8節
2. 中層:Acpi.sys 核心驅動 (The "Translator" Layer)
Windows內置的Acpi.sys驅動程序是連接操作系統與EC等硬件的核心橋梁。它的主要職責是:在系統啟動時解析BIOS提供的ACPI表,將硬件功能呈現給操作系統;并在運行時,將操作系統發出的標準請求(如獲取電池信息)翻譯成EC能懂的底層硬件命令。
3. 底層:硬件通信協議 (The "Physical" Layer)
這是Acpi.sys實際與EC進行“對話”的方式。這個通信過程遵循ACPI規范,包含兩種方向的通信:
▲
主機到EC的通信(命令/查詢): 當Acpi.sys需要執行一個ACPI方法時,它會通過I/O端口與EC通信。
檢查狀態:首先查詢 命令/狀態寄存器 (Port 0x66),等待輸入緩沖(IBF)標志位清空,表示EC已準備好接收命令。
發送命令/數據:向 命令/狀態寄存器 (Port 0x66) 或 數據寄存器 (Port 0x62) 寫入相應的字節。
獲取響應:等待輸出緩沖(OBF)標志位置位,表示EC已將響應數據準備好,然后從 數據寄存器 (Port 0x62) 讀取結果。 這個“檢查-發送-等待-讀取”的握手過程確保了主機與EC之間的同步。
▲
EC到主機的通信(事件通知): 當EC需要主動報告一個事件時,它無法直接向CPU發送復雜數據。
觸發中斷:EC會向CPU發送一個系統控制中斷(System Control Interrupt, SCI)。
系統響應:Acpi.sys捕獲到這個SCI中斷,但它只知道“有事發生”,并不知道具體是什么事。
查詢事件:因此,Acpi.sys會立即通過上述的主機到EC通信方式,向EC發送一個“查詢事件”的命令(例如,讀取EC的特定狀態字節)。
執行方法:EC返回一個事件代碼(如0xBA代表合蓋),Acpi.sys根據這個代碼,去執行ACPI表中預定義好的相應方法(如_QBA),從而完成整個事件的上報和處理。
總結一下這個流程:
用戶合上筆記本蓋子,EC 檢測到該物理事件。
EC 向主機發送 System Control Interrupt(SCI)中斷,通知系統有事件發生。
Acpi.sys 捕獲 SCI 中斷后執行標準查詢流程:
通過0x66端口發送命令0x84(EC Query)。
然后從0x62端口讀取返回的 “查詢碼”(如0xBA)。
Acpi.sys 根據返回碼0xBA映射到 ACPI 表中對應的_QBA控制方法并執行。
例如,_QBA方法中可能定義“執行屏幕關閉”、“掛起”等動作,系統根據_QBA方法執行相應電源或UI邏輯。
EC固件:隱藏的軟件層
EC 固件是實現 EC 功能的軟件核心,但對最終用戶而言通常是“看不見的”。其更新一般不會單獨發布,而是與系統 BIOS/UEFI 一同打包,由設備制造商(OEM)提供。
x86平臺EC整個系統圍繞 ACPI 架構構建,ACPI定義了操作系統與 EC 的交互規范。這一高度標準化的模型保障了與 Windows 等主流操作系統的良好兼容性,成為 PC 平臺穩定運行的基礎。
然而,隨著計算生態不斷演化,特別是基于ARM、RISC-V等非x86架構筆記本電腦的出現,催生了對不同EC實現方案的需求。對于那些希望在多樣化硬件平臺上實現統一底層控制、或尋求不依賴傳統ACPI模型的方案的系統構建者而言,一種新的設計應運而生。這正是谷歌為其Chromebook打造ChromiumOS EC的背景。
深入ChromiumOS EC
下文將詳細探討 ChromiumOS EC 的設計理念、通信模型與其在 ChromeOS 生態中的具體實現。
ChromiumOS EC
自2012年左右,ChromiumOS EC的代碼始終是開源的。其完整的源代碼托管在chromiumos/platform/ec Git倉庫中,倉庫地址如下,供全球開發者查閱、使用和貢獻。
https://chromium.googlesource.com/chromiumos/platform/ec
主機與EC通信方式
在ChromeOS設備中,主機與EC之間的通信遵循一套定義清晰、分層明確的協議,其核心是一個標準的“請求-響應”機制。其通信模型包含兩個層面:
▲
邏輯協議層 (Host Command Protocol):定義了AP與EC之間“說什么”,即數據包的格式、命令的ID和參數。
▲
物理傳輸層 (Physical Transport Layer):定義了“怎么說”,即使用哪種物理總線(如eSPI, I2C, SPI等)來傳輸這些數據包。
為了更好地理解,我們來看一次完整的通信事務是如何在這兩個層面協作下完成的。通信總是由主機發起,遵循一個標準的“請求-響應”模型。
第1步 - 主機側:構建邏輯請求包
主機上的軟件——無論是Linux內核中cros_ec系列驅動(位于drivers/platform/chrome/),還是用戶態的ectool等工具——首先會構建一個標準的二進制請求包。這個包在邏輯上由兩部分組成:
一個struct ec_host_request結構體,其中包含命令ID、參數長度和校驗和。
緊跟其后的、該命令所需的具體參數數據。
第2步 - 物理層:發送請求
主機驅動程序將構建好的邏輯請求包,通過選定的物理總線(如eSPI, I2C, SPI等)發送給EC。具體使用哪種總線取決于硬件設計。
第3步 - EC側:接收與處理命令
EC上的固件從物理總線上接收到數據。數據首先由芯片特定的驅動代碼處理,然后傳遞給通用的主機命令處理任務(HOSTCMD)。該任務會根據包中的命令ID,調用相應的處理函數來執行具體任務(如讀取溫度、設置鍵盤背光等)。
第4步 - 物理層:處理“忙碌”狀態 (握手關鍵)
EC執行命令需要時間(通常是微秒到毫秒級)。在這段時間里,主機不能連續發送新命令,必須等待。EC通過物理層的特定機制來告知主機“請等待”。這是不同總線實現差異的核心所在:
LPC:EC會在其命令狀態寄存器中設置一個“處理中”的狀態位(如EC_LPC_STATUS_PROCESSING),主機通過輪詢該位來判斷EC是否忙碌。
I2C:作為I2C總線上的從設備,EC會將SCL時鐘線拉低,強制主機暫停傳輸,直到命令處理完畢。
SPI:在EC準備好響應之前,它會持續返回一個特定的前導字節(preamble)。主機則不斷讀取,直到收到特殊的“幀起始”字節(EC_SPI_FRAME_START),才知道有效的響應數據來了。
UART:主機發送完命令后立即等待。EC處理完畢后,通過UART異步發回響應。
第5步 - EC側:封裝邏輯響應包
命令執行完畢后,EC會構建一個邏輯響應包。其結構與請求包類似,包含一個struct ec_host_response結構體(內含執行結果碼、返回數據長度和校驗和)以及可選的返回數據。
第6步 - 物理層:返回響應與完成
EC將響應包通過同一物理總線發送回主機。主機在正確處理了第4步的等待后,接收到完整的響應包。至此,一次通信事務結束。
案例研究:鍵盤事件處理流程對比
前文從生態、架構與通信協議層面,闡述了傳統x86平臺EC與ChromiumOS EC的宏觀差異。為了更具體地理解這些差異如何體現在實際功能中,本部分將以最常見的人機交互——鍵盤按鍵——為例,解析一個按鍵事件從物理觸發到被操作系統響應的完整鏈路,方便理解兩種體系在設計和實現上的不同。
x86平臺的鍵盤事件處理
在傳統x86平臺,鍵盤處理流程與ACPI和經典的鍵盤控制器(KBC)模型緊密結合。
處理流程:
EC硬件響應:用戶按鍵后,EC內部兼容8042 KBC的模塊捕獲信號,生成原始掃描碼。
數據就緒與中斷:EC將掃描碼放入“輸出緩沖寄存器”(I/O 0x60),并在“狀態寄存器”(I/O 0x64)中設置標志位,然后通過專用的IRQ1向主CPU發送硬件中斷。
主機驅動讀取:操作系統的i8042控制器驅動響應中斷,直接訪問I/O端口0x60,讀取原始掃描碼。
翻譯與上報:i8042驅動將掃描碼交由上層鍵盤驅動進行翻譯,轉換為操作系統可識別的標準化鍵碼,并送入輸入子系統。

ChromeOS EC 的鍵盤事件處理
在ChromeOS平臺,EC在其中扮演了更主動的事件處理和封裝角色。
處理流程:
EC軟件掃描:EC內的RTOS任務(keyboard_scan_task)掃描鍵盤矩陣,感知到按鍵變化。
生成MKBP事件:EC固件將整個鍵盤矩陣的狀態打包成一個結構化的MKBP(Matrix Keyboard Protocol)事件,并將其放入內部事件隊列。
通用事件通知:EC通過一個通用的主機事件中斷(非專用于鍵盤)通知主機“有事件發生”。
主機協議查詢:主機驅動(cros_ec)響應中斷后,通過主機命令協議發送一個EC_CMD_GET_NEXT_EVENT(獲取下一個事件)的請求給EC。
EC響應事件:EC從隊列中取出MKBP事件,將其作為響應數據打包,通過總線返回給主機。
解析與上報:主機驅動接收響應,解析出鍵盤矩陣數據,計算出具體按鍵變化,再生成標準鍵碼送入輸入子系統。

當EC遇上RISC-V:進迭時空的探索
自研eSPI控制器
在任何一個現代計算平臺中,主處理器與EC之間都需要一條高效、穩定的數據通道。為了讓即將發布的芯片無縫融入并支持主流EC生態,進迭時空在其中集成了自研的eSPI控制器。
這為進迭時空即將發布的芯片提供了與現代 EC 進行通信所必需的、符合行業標準的物理接口。透過這條高速、低功耗、低引腳數的標準通道,進迭時空的 RISC-V 平臺能夠高效地處理來自EC的各類底層硬件交互,為上層應用的穩定運行提供硬件保障。
進迭時空的 eSPI 控制器完整實現了eSPI協議規范,支持所有標準通道類型:
外設通道(Peripheral Channel):支持I/O空間和內存映射訪問,替代傳統LPC接口。
虛擬線通道(Virtual Wire Channel):支持GPIO狀態、系統中斷、電源管理事件等控制信號傳輸。
帶外通信通道(OOB Channel):支持SMBus/I2C協議轉換,實現對溫度傳感器等外設的訪問。
Flash訪問通道(Flash Access Channel):提供對共享Flash存儲的訪問能力,允許EC訪問主處理器端的Flash存儲器。

AP與EC連接示意圖
軟件策略
基于標準的eSPI接口,進迭時空對EC生態的支持分為兩個階段。
▲
初期階段:支持ChromiumOS EC框架
芯片發布初期不支持ACPI。在此階段,平臺將支持ChromiumOS EC通信框架。采用此框架,開發者可利用Linux內核的cros_ec驅動程序,有助于降低軟件開發成本、加速產品上市。
▲
未來規劃:兼容ACPI并提供選項
未來,平臺計劃增加對ACPI規范的支持,以兼容傳統的PC生態。屆時,基于eSPI控制器的設計,平臺將同時支持ACPI EC生態與ChromiumOS EC框架,合作伙伴可根據產品需求選擇相應的方案。
結語:演進與未來
從經典的鍵盤控制器演化至今,EC已成為負責電源、散熱、交互等關鍵底層任務的復雜微控單元。
本文所探討的兩種EC實現——x86平臺 EC和ChromiumOS EC——代表了兩種不同的設計哲學和生態模式,兩者并無絕對的優劣之分,而是分別服務于不同的技術背景與市場需求。x86平臺EC的模式支撐了當今PC世界,而ChromiumOS EC在非傳統PC架構(如RISC-V或ARM平臺)上,提供了另一種強大的、可定制的實現思路。
EC技術的持續發展,無論是遵循哪種模式,都在不斷提升設備的能效、用戶體驗和系統可靠性。未來,EC或其演進形態將繼續在各類智能設備中扮演著不可或缺的核心角色。
-
mcu
+關注
關注
147文章
18669瀏覽量
388931 -
計算機系統
+關注
關注
0文章
292瀏覽量
25228 -
EC
+關注
關注
0文章
75瀏覽量
17180 -
嵌入式控制器
+關注
關注
0文章
66瀏覽量
15717
發布評論請先 登錄
無名管道系統調用
無名管道的通信方式簡介
發光二極管的工作原理以及優缺點解析
LED:電子世界的無名英雄
二極管半導體到底是什么?電子移動是如何讓它發光的
數字化變局中 堅守在技術無人區 一群無名英雄的低調與浪漫
網絡暢通的“無名英雄”:華為云CDN,讓數據傳輸又快又穩
結構化布線在AI數據中心的關鍵作用
GPS對時服務器時間背后的無名英雄

系統中的無名英雄:EC
評論