概述¶
Surface/系統聚合模組 (SAM, SSAM) 是 Microsoft Surface 裝置上的一個(可以說是“主要”)嵌入式控制器 (EC)。它最初是在第四代裝置(Surface Pro 4,Surface Book 1)上引入的,但其職責和功能集已在後續幾代裝置中得到顯著擴充套件。
功能和整合¶
目前對第四代裝置(Surface Pro 4,Surface Book 1)上的 SAM 知之甚少,原因是主機和 EC 之間使用了不同的通訊介面(詳見下文)。在第五代(Surface Pro 2017,Surface Book 2,Surface Laptop 1)及更高代裝置上,SAM 負責向主機提供電池資訊(包括當前狀態和靜態值,如最大容量等),以及各種溫度感測器(例如皮膚溫度)和散熱/效能模式設定。特別是在 Surface Book 2 上,它還提供了一個介面,用於正確處理鍵盤分離(即,將裝置的顯示部分與鍵盤部分分離),在 Surface Laptop 1 和 2 上,它對於鍵盤 HID 輸入是必需的。此 HID 子系統已針對第七代裝置進行了重構,在這些裝置上,特別是 Surface Laptop 3 和 Surface Book 3,它負責所有主要的 HID 輸入(即鍵盤和觸控板)。
雖然自第五代以來,功能在宏觀層面沒有太大變化,但內部介面經歷了一些相當大的改變。在第五代和第六代裝置上,電池和溫度資訊都透過一個墊片驅動程式(稱為 Surface ACPI Notify,或 SAN)暴露給 ACPI,將 ACPI 通用序列匯流排讀寫訪問轉換為 SAM 請求。在第七代裝置上,此附加層已不存在,這些裝置需要一個直接連線到 SAM 介面的驅動程式。同樣,在更新一代的裝置上,ACPI 中宣告的裝置較少,這使得它們更難被發現,並要求我們硬編碼一種設備註冊表。因此,已實現了一個帶有客戶端裝置(struct ssam_device)的 SSAM 匯流排和子系統。
通訊¶
主機和 EC 之間的通訊介面型別取決於 Surface 裝置的代次。在第四代裝置上,主機和 EC 透過 HID 通訊,具體是使用 HID-over-I2C 裝置;而在第五代及更高代裝置上,通訊透過 USART 序列裝置進行。根據在其他作業系統上發現的驅動程式,我們將該序列裝置及其驅動程式稱為 Surface Serial Hub (SSH)。在需要時,我們透過將它們稱為 SAM-over-SSH 和 SAM-over-HID 來區分兩種型別的 SAM。
目前,此子系統僅支援 SAM-over-SSH。SSH 通訊介面在下文中有更詳細的描述。HID 介面尚未進行逆向工程,目前尚不清楚下文詳細介紹的 SSH 介面概念有多少(以及哪些)可以應用於它。
Surface 序列集線器¶
如上文所述,Surface 序列集線器 (SSH) 是第五代及所有後續 Surface 裝置上 SAM 的通訊介面。在最高層面上,通訊可以分為兩種主要型別:請求,即從主機發送到 EC 的訊息,這些訊息可能會觸發 EC 的直接響應(與請求明確關聯);以及事件(有時也稱為通知),即從 EC 傳送給主機,而不是對先前請求的直接響應。我們也可以將無響應的請求稱為命令。通常,事件需要透過多個專用請求中的一個啟用後,才能由 EC 傳送。
有關更詳細的技術協議文件,請參閱Surface 序列集線器協議;有關內部驅動程式架構的概述,請參閱核心驅動程式內部。