再读 eSPI

5年前,我给出过如果有可能尽量不要在设计上使用 eSPI 接口,时至今日,至少在平板和笔记本上 eSPI 已经完全取代了 LPC 接口, 我们需要对此有所了解。

首先 eSPI 相比之前的 LPC 总线,有着速度更快的优势。最新的 ADL-P 平台上,eSPI 可达50Mhz (最多支持4个数据线,一次性可以传输 4Bits).

此外,还提供了虚拟信号的功能,比如,可以从eSPI上发送 SMI# 信号,这样无需外部有SMI# 的引线即可让 EC 发送 SMI# 请求。从另外的角度来说,使用 eSPI 之后可以简化布线节省 PCB 空间。

再有就是提供通过 PECI 读取CPU /PCH 温度这样的功能,便于 EC 进行温度方面的控制。这样可以实现更好的散热功能。

传统的设计上, BIOS 和 EC 的 Firemware 是分别存储在两个 SPI NOR 中的:

使用 eSPI 之后可以共享。共享方式有如下两种:

第一种:挂接在 PCH 上,EC 访问需要通过 PCH 的 eSPI Master, 称作 Master Attached Flash Sharing (简称 MAFS,或者 MAF),这种模式下 EC 通过PCH 中的SPI Master 来访问存放在 SPI Nor 中的 EC Firmware。

MAFS

特别注意的是,还有一种 MAFS 的变种 G3 Flash Sharing,特别之处在于 EC 和 PCH 都是直连 SPI Nor。在PCH Reset 之前,EC 作为 SPI master 需要完成读取 Firmware 的动作。PCH Reset 之后,PCH 作为 SPI Master 来和 SPI Nor 进行通讯。G3 Flash Sharing 的设定和CSME以及BIOS 无关,完全是硬件动作,所以你也无法在 FIT 中找到设定的选项(个人非常不建议用这个模式,因为出现问题不容易判断产生错误的原因,可能是硬件也可能是 EC Firmare):

第二种,SPI 挂在 EC 下面,PCH 访问需要透过EC, 这种称作 Slave Attached Flash Sharing(简称 SAFS,或者 SAF)

SAFS

个人建议:尽量不要使用共享模式,虽然能帮老板省一点钱,但是可能会有未知的问题。或者说参考板用哪种,尽量用哪种。特别是新的 Chipset ,理论上全部都可以支持,但是很可能非参考板的设计目前尚未验证过,如果想让它正常工作还需要特别的PMC 之类的设定。

参考:

1.https://blog.csdn.net/gkcywbcbjpvel404/article/details/107401736

2.Intel: Enhanced SPI (eSPI) Platform Enabling and Debug Guide

《再读 eSPI》有3个想法

  1. 您好,我是参考1里的第五位面壁者,我不是做BIOS的,算是硬件工程师,但是通过您的博客,我从零开始自学UEFI环境搭建,现在已经可以自己编译app,编译替换USB DXE Driver了。但是我最近有一个困扰,比如说我想要自己编译一个x86平台的bios,我手里有一些源码,我也知道需要编辑fdf文件,使用GenFW命令,但还是感觉无从下手。或者说条件再放宽,我只需要boot进sec阶段,在实模式下玩一玩,我会写汇编,但是我不知道怎么把这些汇编程序变成可以烧录到spi flash里执行的bin档案。您这里有什么资料或者例子可以让我参考吗?

    1. 这个牵扯到你需要有一套开源的 X86 平台,并且有对应的 BIOS Source Code,据我所知网上有开源的板子,但是我没有研究过。一般都是工作才会有,个人如果想实验不太现实。

  2. 您好,参考1里的文章就是我写的,我通过学习您的uefi系列文章,已经可以自己搭建环境编译app和DXE driver了,谢谢~我现在遇到的问题是,如果把一段源代码编译成可以烧录到spi flash里让x86 boot的bin文档?我知道需要使用GenFW命令和fdf文件,但还是感觉无从下手,比如我自己用汇编写一段Sec,让cpu在实模式下做点事情玩,您这里有什么样建议或者例子可以参考吗?

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注