eSPI 通訊一般來(lái)說(shuō)無(wú)需特別關(guān)注,因?yàn)橥ㄓ嵍际?PCH(eSPI_Master)和 EC(eSPI_Slave)硬件完成的,軟件不參與。
但是實(shí)際開(kāi)發(fā)中經(jīng)常會(huì)遇到 SLP_S3/4 不拉高導(dǎo)致無(wú)法開(kāi)機(jī),8042鍵盤(pán)無(wú)功能,6266無(wú)法通信等問(wèn)題。因此了解常見(jiàn)的通訊流程,分析抓取的 eSPI 通訊數(shù)據(jù)包,對(duì)異常定位有很大的幫助。
eSPI 初始化通訊
通用參數(shù)配置
eSPI_Master 第一步會(huì)讀取 eSPI_Slave 的 0x08 寄存器獲取 eSPI_Slave 所支持的通訊能力。有如下參數(shù):
I/O Mode Support | Single I/O、Single and Dual I/O、Single and Quad I/O、Single, Dual and Quad I/O |
---|---|
Open Drain Alert# Supported | Open-drain Alert# |
Maximum Frequency Supported | 20、25、33、50、66MHz |
Channel Supported | Peripheral、Virtual Wire、OOB、Flash、platform specific channels |
接著 eSPI_Master 會(huì)在合適的時(shí)候?qū)?eSPI_Slave 的 0x08 寄存器,以配置不同的通訊參數(shù)。如下表:
CRC Checking Enable |
---|
Response Modifier Enable |
Alert Mode Select |
I/O Mode Select |
Open Drain Alert# Select |
Operating Frequency Select |
Maximum WAIT STATE Allowed |
上圖的配置參數(shù)中就選擇了 Quad Mode IO、66MHz 通訊,圖中也可以發(fā)現(xiàn)緊接著一筆數(shù)據(jù)通訊變成 66MHz、Quad IO mode。
通道參數(shù)配置
eSPI 支持4個(gè) Channel,即 Peripheral(0x10)、Virtual wire(0x20)、OOB(0x30)、Flash(0x40)。
此處僅以 Peripheral Channel(0x10)配置為例。
通道參數(shù)配置,也遵循先讀后寫(xiě)原則。即 eSPI_Master 先讀取 eSPI_Slave 通道配置寄存器,然后再改寫(xiě)配置寄存器。
Peripheral Channel (0x10)涉及的參數(shù)如下表
Peripheral Channel Maximum Read Request Size | R/W |
---|---|
Peripheral Channel Maximum Payload Size | R/W |
Peripheral Channel Maximum Payload Size Supported | RO |
Bus Master Enable | R/W |
Peripheral Channel Ready | RO |
Peripheral Channel Enable | R/W |
eSPI_Master 讀取 Peripheral Channel 0x10 寄存器,發(fā)現(xiàn)通道已經(jīng) Ready
即 Channel Ready=1。
eSPI_Master 寫(xiě) Peripheral Channel 0x10 寄存器,寫(xiě)Channel Enable=1。
Virtual Wire 通訊
Virtual Wire Channel 包攬了 PCH 和 EC 之間所有的信號(hào)傳遞,包括 SCI、IRQ、SLP Signal。數(shù)據(jù)傳遞可以是 eSPI_Master 到 eSPI_Slave,也可以反向。
當(dāng)然反向通信,需要 eSPI_Slave 先發(fā)起 Alert# 信號(hào),等待 eSPI_Master 查詢(xún)Status Reg,再根據(jù)狀態(tài)發(fā)起不同的命令讀取 eSPI_Slave 的數(shù)據(jù)。
Master 向 Slave 發(fā)送 pin status。
如上圖,eSPI_Master 使用 PUT_VWIRW(04)命令,附帶數(shù)據(jù)包,
向 eSPI_Slave 通知 PCH 虛擬引腳狀態(tài)。
Length=03,即傳遞了 4組 Virtual Wire 信號(hào)。
index=02,Data=74,即傳遞了 System Event-2。
index=03,Data=30,即傳遞了 System Event-3。
index=41,Data=B9,即傳遞了 Platform Specific-41。
index=42,Data=31,即傳遞了 Platform Specific-41。
如下圖是 System Event Virtual Wire 2 的數(shù)據(jù)解析。其他 System Event 解析一致。因此 Index=2,data=74,即表示 SLP_S3/4/5 有效,SLP_S3、SLP_S4 為低電平,SLP_S5 為高電平。
Slave 向 Master 發(fā)送 Signal status。
如上圖,eSPI 通訊采用 Single IO,因此 Alert# 和 IO-1 復(fù)用。上圖 IO-1 最開(kāi)始的 230ns 即為 eSPI_Slave 發(fā)起的 Alert# 信號(hào)。
eSPI_Master 接到 Alert# 后,首先發(fā)送 GET_STATUS(25)命令,獲取 eSPI_Slave 的狀態(tài),可以看到 SLave 端回復(fù)的 status 是 0x14F。
即表示 PC/NP/VWIRE/OOB buffer 都是空,BIT6 VWIRE_AVAIL 置位即表示有 Virtual Wire 需要 Master 端讀取。
Master 發(fā)送 GET_VWIRE(05)命令讀取 Virtual Wire 狀態(tài),Slave 端返回 System Event-5 的狀態(tài)。index=5,data=99,即表示
SLAVE_BOOT_LOAD_DONE 和 SLAVE_BOOT_LOAD_STATUS 有效,同時(shí)置位,即表示 Slave 端成功完成了 Flash 的訪問(wèn)。
Slave 向 Master 發(fā)送 pin status。
如上圖,就是 Slave 端向 Master 端發(fā)送 SCI 的數(shù)據(jù)包。
index=6,data=10,即表示 SCI 信號(hào)有效,同時(shí)拉低。
當(dāng)然,等待 Master 端響應(yīng) SCI 后,Slave 必須發(fā)送一個(gè) SCI 拉高的數(shù)據(jù)包。
Slave 向 Master 發(fā)送 IRQ。
IRQ 在 eSPI Virtual wire 里面劃分為 Interrupt Event。占用 Virtual Wire Index 0和1。
如上圖,Master 接到 Alert# 信號(hào)后,讀取 Virtual 狀態(tài)。Slave 返回 IRQ-1信號(hào)。index=00,data=81,即表示 IRQ-1 拉高(注意,此處 IRQ-1 是高觸發(fā))。IRQ-1 信號(hào)同樣的需要 Slave 端再次發(fā)送數(shù)據(jù)包拉低。
Peripheral Channel IO 通訊
Keyboard 通訊
理解上述 IRQ-1 觸發(fā)原理后,EC 端的鍵值發(fā)送就非常容易理解了。流程如下:
- 鍵盤(pán)按鍵按下后,EC 完成掃描以及轉(zhuǎn)換過(guò)程,最終生成一個(gè) ScanCode 寫(xiě)入 IO-60 數(shù)據(jù)寄存器。
- IO-60 的寫(xiě)入動(dòng)作,會(huì)觸發(fā) EC 硬件自動(dòng)發(fā)送一個(gè) IRQ-1 通知 PCH,有鍵盤(pán)中斷發(fā)生。
- PCH 識(shí)別到 IRQ-1 后,會(huì)讀取 IO-64,查看 OBF 狀態(tài),以判斷 IO-60 是否有數(shù)據(jù)需要讀取。
- 緊接著 PCH 會(huì)讀取 IO-60 獲取 ScanCode。
鍵盤(pán)一次按鍵分為“Press” 和 “Release”,即按下和松開(kāi)都會(huì)給 PCH 端發(fā)送一個(gè) ScanCode。如下示例是 “A” 鍵操作,對(duì)應(yīng) ScanCode 是 1E 和 9E。
按鍵按下數(shù)據(jù)包。
按鍵松開(kāi)數(shù)據(jù)包
Q_Event 通訊
EC 發(fā)送 Q_Event(A0)流程:
- EC 拉低 SCI,同時(shí)置位 66 寄存器的 BIT5,即 SCI_EVT。
- PCH 讀取 66,發(fā)現(xiàn) SCI_EVT 置位,發(fā)送 0x84 命令查詢(xún) Q_Event。
- EC 拉高 SCI,同時(shí)清除 66寄存器 BIT5。
- EC 處理 0x84 查詢(xún)命令,把 Q_Event 隊(duì)列第一個(gè) num(A0) 寫(xiě)入 62 寄存器
- EC 拉低 SCI,置位 66寄存器 BIT0,即 OBF
- PCH 讀取 66 ,發(fā)現(xiàn) OBF 置位,讀取 62 寄存器,獲得 Q_Event Num(A0)。
- EC 拉高 SCI。
上述就是常見(jiàn) eSPI 通訊數(shù)據(jù)包的分析。
-
寄存器
+關(guān)注
關(guān)注
31文章
5392瀏覽量
121922 -
SPI
+關(guān)注
關(guān)注
17文章
1731瀏覽量
92894 -
通訊
+關(guān)注
關(guān)注
9文章
919瀏覽量
35249 -
數(shù)據(jù)包
+關(guān)注
關(guān)注
0文章
268瀏覽量
24630
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
eSPI協(xié)議抓包分析

以太網(wǎng)數(shù)據(jù)包捕獲與轉(zhuǎn)發(fā)技術(shù)
網(wǎng)絡(luò)數(shù)據(jù)包捕獲機(jī)制研究
基于Jpcap的數(shù)據(jù)包捕獲器的設(shè)計(jì)與實(shí)現(xiàn)
數(shù)據(jù)包過(guò)濾原理

什么是數(shù)據(jù)包?
移動(dòng)IPV6在改進(jìn)數(shù)據(jù)包發(fā)送路徑模型下性能分析

基于數(shù)據(jù)包長(zhǎng)度的網(wǎng)絡(luò)隱蔽通道

ZigBee3.0數(shù)據(jù)包解析

數(shù)據(jù)包的發(fā)送流程
網(wǎng)絡(luò)數(shù)據(jù)包分析軟件wireshark的基本使用
wireshark導(dǎo)入數(shù)據(jù)包進(jìn)行分析
eSPI通訊總線的應(yīng)用優(yōu)勢(shì)
Wireshark網(wǎng)絡(luò)數(shù)據(jù)包分析軟件簡(jiǎn)介

艾體寶干貨 OIDA之四:掌握數(shù)據(jù)包分析-分析的藝術(shù)

評(píng)論