0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

常见eSPI通讯数据包的分析

CHANBAEK 来源: 吃面小哥 作者: Morgen 2023-11-18 15:35 次阅读

eSPI 通讯一般来说无需特别关注,因为通讯都是 PCH(eSPI_Master)和 EC(eSPI_Slave)硬件完成的,软件不参与。

但是实际开发中经常会遇到 SLP_S3/4 不拉高导致无法开机,8042键盘无功能,6266无法通信等问题。因此了解常见的通讯流程,分析抓取的 eSPI 通讯数据包,对异常定位有很大的帮助。

eSPI 初始化通讯

通用参数配置

图片

eSPI_Master 第一步会读取 eSPI_Slave 的 0x08 寄存器获取 eSPI_Slave 所支持的通讯能力。有如下参数:

I/O Mode SupportSingle I/O、Single and Dual I/O、Single and Quad I/O、Single, Dual and Quad I/O
Open Drain Alert# SupportedOpen-drain Alert#
Maximum Frequency Supported20、25、33、50、66MHz
Channel SupportedPeripheral、Virtual Wire、OOB、Flash、platform specific channels

图片

接着 eSPI_Master 会在合适的时候写 eSPI_Slave 的 0x08 寄存器,以配置不同的通讯参数。如下表:

CRC Checking Enable
Response Modifier Enable
Alert Mode Select
I/O Mode Select
Open Drain Alert# Select
Operating Frequency Select
Maximum WAIT STATE Allowed

图片

上图的配置参数中就选择了 Quad Mode IO、66MHz 通讯,图中也可以发现紧接着一笔数据通讯变成 66MHz、Quad IO mode。

通道参数配置

eSPI 支持4个 Channel,即 Peripheral(0x10)、Virtual wire(0x20)、OOB(0x30)、Flash(0x40)。

此处仅以 Peripheral Channel(0x10)配置为例。

图片

通道参数配置,也遵循先读后写原则。即 eSPI_Master 先读取 eSPI_Slave 通道配置寄存器,然后再改写配置寄存器。

Peripheral Channel (0x10)涉及的参数如下表

Peripheral Channel Maximum Read Request SizeR/W
Peripheral Channel Maximum Payload SizeR/W
Peripheral Channel Maximum Payload Size SupportedRO
Bus Master EnableR/W
Peripheral Channel ReadyRO
Peripheral Channel EnableR/W

eSPI_Master 读取 Peripheral Channel 0x10 寄存器,发现通道已经 Ready

即 Channel Ready=1。

图片

eSPI_Master 写 Peripheral Channel 0x10 寄存器,写Channel Enable=1。

图片

Virtual Wire 通讯

Virtual Wire Channel 包揽了 PCH 和 EC 之间所有的信号传递,包括 SCI、IRQ、SLP Signal。数据传递可以是 eSPI_Master 到 eSPI_Slave,也可以反向。

当然反向通信,需要 eSPI_Slave 先发起 Alert# 信号,等待 eSPI_Master 查询Status Reg,再根据状态发起不同的命令读取 eSPI_Slave 的数据。

Master 向 Slave 发送 pin status。

图片

如上图,eSPI_Master 使用 PUT_VWIRW(04)命令,附带数据包,

向 eSPI_Slave 通知 PCH 虚拟引脚状态。

Length=03,即传递了 4组 Virtual Wire 信号。

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 的数据解析。其他 System Event 解析一致。因此 Index=2,data=74,即表示 SLP_S3/4/5 有效,SLP_S3、SLP_S4 为低电平,SLP_S5 为高电平。

图片

Slave 向 Master 发送 Signal status。

图片

如上图,eSPI 通讯采用 Single IO,因此 Alert# 和 IO-1 复用。上图 IO-1 最开始的 230ns 即为 eSPI_Slave 发起的 Alert# 信号。

eSPI_Master 接到 Alert# 后,首先发送 GET_STATUS(25)命令,获取 eSPI_Slave 的状态,可以看到 SLave 端回复的 status 是 0x14F。

即表示 PC/NP/VWIRE/OOB buffer 都是空,BIT6 VWIRE_AVAIL 置位即表示有 Virtual Wire 需要 Master 端读取。

图片

Master 发送 GET_VWIRE(05)命令读取 Virtual Wire 状态,Slave 端返回 System Event-5 的状态。index=5,data=99,即表示

SLAVE_BOOT_LOAD_DONE 和 SLAVE_BOOT_LOAD_STATUS 有效,同时置位,即表示 Slave 端成功完成了 Flash 的访问。

Slave 向 Master 发送 pin status。

图片

如上图,就是 Slave 端向 Master 端发送 SCI 的数据包。

index=6,data=10,即表示 SCI 信号有效,同时拉低。

当然,等待 Master 端响应 SCI 后,Slave 必须发送一个 SCI 拉高的数据包。

图片

Slave 向 Master 发送 IRQ。

IRQ 在 eSPI Virtual wire 里面划分为 Interrupt Event。占用 Virtual Wire Index 0和1。

图片

图片

如上图,Master 接到 Alert# 信号后,读取 Virtual 状态。Slave 返回 IRQ-1信号。index=00,data=81,即表示 IRQ-1 拉高(注意,此处 IRQ-1 是高触发)。IRQ-1 信号同样的需要 Slave 端再次发送数据包拉低。

Peripheral Channel IO 通讯

Keyboard 通讯

理解上述 IRQ-1 触发原理后,EC 端的键值发送就非常容易理解了。流程如下:

  1. 键盘按键按下后,EC 完成扫描以及转换过程,最终生成一个 ScanCode 写入 IO-60 数据寄存器。
  2. IO-60 的写入动作,会触发 EC 硬件自动发送一个 IRQ-1 通知 PCH,有键盘中断发生。
  3. PCH 识别到 IRQ-1 后,会读取 IO-64,查看 OBF 状态,以判断 IO-60 是否有数据需要读取。
  4. 紧接着 PCH 会读取 IO-60 获取 ScanCode。

键盘一次按键分为“Press” 和 “Release”,即按下和松开都会给 PCH 端发送一个 ScanCode。如下示例是 “A” 键操作,对应 ScanCode 是 1E 和 9E。

按键按下数据包。

图片

按键松开数据包

图片

Q_Event 通讯

EC 发送 Q_Event(A0)流程:

  1. EC 拉低 SCI,同时置位 66 寄存器的 BIT5,即 SCI_EVT。
  2. PCH 读取 66,发现 SCI_EVT 置位,发送 0x84 命令查询 Q_Event。
  3. EC 拉高 SCI,同时清除 66寄存器 BIT5。
  4. EC 处理 0x84 查询命令,把 Q_Event 队列第一个 num(A0) 写入 62 寄存器
  5. EC 拉低 SCI,置位 66寄存器 BIT0,即 OBF
  6. PCH 读取 66 ,发现 OBF 置位,读取 62 寄存器,获得 Q_Event Num(A0)。
  7. EC 拉高 SCI。

图片

图片

图片

上述就是常见 eSPI 通讯数据包的分析。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 寄存器
    +关注

    关注

    31

    文章

    5305

    浏览量

    119912
  • SPI
    SPI
    +关注

    关注

    17

    文章

    1694

    浏览量

    91262
  • 通讯
    +关注

    关注

    9

    文章

    891

    浏览量

    34820
  • 数据包
    +关注

    关注

    0

    文章

    250

    浏览量

    24353
收藏 人收藏

    评论

    相关推荐

    eSPI协议抓分析

    eSPI 协议在物理层是遵循 SPI 通讯规范的,但是协议层有差异,因此不能使用 SPI 协议去解析(没有 eSPI 协议分析仪的情况下,可以使用 SPI 协议
    的头像 发表于 11-18 15:29 3033次阅读
    <b class='flag-5'>eSPI</b>协议抓<b class='flag-5'>包</b><b class='flag-5'>分析</b>

    以太网数据包捕获与转发技术

    数据包捕获技术在网络安全领域中应用十分广泛,网络入侵检测系统、协议分析软件、防火墙等都需要捕获数据包。本文研究了linux 和windows 环境下的数据包捕获技术,给出了几种数
    发表于 07-30 11:19 63次下载

    网络数据包捕获机制研究

    网络数据包捕获技术,是实现入侵检测、网络安全审计的关键技术。本文改进了国外传统的数据包捕获函数库Libpcap 捕获数据包的方案。原方案在网卡捕获到数据包后,
    发表于 09-01 10:09 9次下载

    基于Jpcap的数据包捕获器的设计与实现

    本文研究了以太网数据包的捕获机制,实现了基于JPcap的网络数据包捕获工具,其基本原理是通过调用Jpcap库捕获本地网络上的所有数据包,然后对数据包进行协议解码,从而可以实
    发表于 01-15 13:47 38次下载

    数据包过滤原理

    数据包过滤技术数据包过滤原理              数据包过滤技术是防火墙最常用的技术。对于一
    发表于 06-16 23:44 4583次阅读
    <b class='flag-5'>数据包</b>过滤原理

    什么是数据包

    什么是数据包? 您在互联网上做的一切都涉及到数据包。例如,您接收的每个网页都以一系列数据包的形式传入,您发送的每封电子邮件都以一系列数据包的形式传出。以
    发表于 08-03 09:13 2003次阅读

    移动IPV6在改进数据包发送路径模型下性能分析

    针对现有移动IPV6中数据包发送代价较高的问题,对现有移动IPV6协议性能分析模型中数据包发送路径进行了改进,将访问路由发送至移动节点的数据包由代价很大的隧道发送改进为直接
    发表于 01-12 10:32 35次下载
    移动IPV6在改进<b class='flag-5'>数据包</b>发送路径模型下性能<b class='flag-5'>分析</b>

    基于数据包长度的网络隐蔽通道

    在传统隐蔽通道模型的基础上,利用数据包的长度域,设计一种基于数据包长度的网络隐蔽通道模型(LAWB模型),给出其形式化描述。对该模型进行了分析,并分别在IPv4和IPv6上对该模型进行了
    发表于 02-23 15:18 23次下载
    基于<b class='flag-5'>数据包</b>长度的网络隐蔽通道

    ZigBee3.0数据包解析

    ZigBee3.0是ZigBee联盟推出的可以互联互通的标准协议,用之前的Packet Sniffer抓包工具是无法解析ZigBee3.0的数据包,因ZigBee3.0的安全机制所有的数据包都是加密
    发表于 02-28 11:48 2643次阅读
    ZigBee3.0<b class='flag-5'>数据包</b>解析

    数据包的发送流程

    一个数据包,从聊天框里发出,消息会从聊天软件所在的用户空间拷贝到内核空间的发送缓冲区(send buffer),数据包就这样顺着传输层、网络层,进入到数据链路层,在这里数据包会经过流控
    的头像 发表于 08-19 14:38 2593次阅读

    网络数据包分析软件wireshark的基本使用

    Wireshark(前称Ethereal)是一个网络数据包分析软件。网络数据包分析软件的功能是截取网络数据包,并尽可能显示出最为详细的网络
    的头像 发表于 09-29 14:48 2980次阅读

    wireshark导入数据包进行分析

    linux的tcpdump命令主要用于网络问题的调试中,通过抓取传输过程的数据包进行分析和调试。而wireshark则是一款功能强大,使用方便的数据包分析工具,tcpdump+wire
    的头像 发表于 12-27 09:37 2071次阅读

    eSPI通讯总线的应用优势

    eSPI总线是Intel在2016年推出的一种通讯总线,用于x86 CPU平台和外设之间的通讯
    的头像 发表于 02-15 09:05 4039次阅读

    Wireshark网络数据包分析软件简介

    wireshark是一个免费开源的网络数据包分析软件,功能十分强大。可以截取各种网络数据包,显示网络数据包的详细信息。
    的头像 发表于 04-26 09:52 2729次阅读
    Wireshark网络<b class='flag-5'>数据包</b><b class='flag-5'>分析</b>软件简介

    艾体宝干货 OIDA之四:掌握数据包分析-分析的艺术

    本文是OIDA方法系列的最后一部分,重点介绍了数据包分析的“分析”阶段。这一最后阶段将剖析阶段的精炼数据转化为可操作的见解,使网络管理员和安全专业人员能够解决问题、优化性能并增强安全性
    的头像 发表于 09-24 11:47 157次阅读
    艾体宝干货 OIDA之四:掌握<b class='flag-5'>数据包</b><b class='flag-5'>分析</b>-<b class='flag-5'>分析</b>的艺术