10

挂SPI羊头,卖LPC的狗肉:Intel eSPI总线

 3 years ago
source link: https://zhuanlan.zhihu.com/p/349467926
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

现代商业计算机和服务器无疑是成本敏感型的,从上游的芯片制造商,到OEM、ODM无一不在成本控制上做足功夫。省下来的成本一部分可以提高利润,也会有一部分让利给消费者。更妙的是,让利造成的价格降低会增大市场容量,把饼做大,从而形成良性正反馈,进一步提高利润。难怪产业链上的各个玩家乐此不疲。

业界龙头Intel除了在自家挖潜外,也积极帮助整个产业链降低成本,其中最重要的帮助主板厂商节省成本。一方面,通过减少主板BOM(Bill of Materials)用料,减少主板料件成本,如将主板上的VR移入CPU和芯片组中(FIVR),省掉主板上的VR料件成本;另一个隐形的方面,帮助主板简化设计,节约设计成本、生产成本和降低故障率,也可以起到异曲同工的效果。LPC总线的发明就是为了这个目的。

LPC总线

十几年前,发端于古老IBM PC/AT计算机的16位总线:ISA(Industry Standard Architecture)总线,其大部分功能早已被更现代的PCI总线替代。尽管当时古老的ISA板卡已经销声匿迹,但一些重要的外部设备依然流行,如并口、PS2鼠标和键盘、软驱和串口等等。如何淘汰缓慢(8MHz)和引脚(Pin)众多的传统ISA总线,被强烈呼吁。Intel适时推出了LPC( Low Pin Count )总线,它使用 PCI 33MHz 时钟。更重要的是,如它的名字所暗示,它的引脚只有7根(还有6根可选),节省了南桥的引脚和简化了主板电路设计,进而节省了成本。

ZZNF3au.jpg!mobile LPC引脚(来源参考资料1)

它一经推出,迅速占领计算机和服务器的主板,成了几乎每个电脑的标配。一个典型的LPC总线设计是这样:

ZfiUvqV.jpg!mobile 典型LPC设计(来源参考资料1)

当时从古老的并口、PS2鼠标和键盘,到存放BIOS的Flash(那时还叫做FWH(Firmware Hub))、串口和Super IO都挂在它的下面。需要特别指出的是笔电主板上EC和服务器的BMC也都挂在它的下面。

计算机的发展一日千里,经过近十年的使用,LPC越来越显示出它的不足:

1 . LPC包含7个必须引脚和6个可选引脚,而在大多数主板上这13个引脚都是引出来的,还是太多了。

2 .LPC比较费电。它的Vcc是3.3V,远高于主板其他部分。

3 .33HMz的主频太低。

4 .典型的系统还需要很多旁路(sideband)信号。作为现代LPC总线的主要使用者EC或者BMC来讲,除了标准的13个引脚之外,还需要SMBus和很多GPIO,让南桥和BMC/EC通信:

63eMn2N.jpg!mobile 现代LPC和南桥连接关系(来源参考资料3)

这里的Host Chipset就是指南桥PCH。众多GPIO和SMBus这些额外的Pin让LPC的low Pin优势荡然无存,加上其他缺点,是时候寻找替代品了。于是Intel将目光转向了已经将BIOS的Flash从LPC中解放出来的SPI总线。

SPI总线

SPI( S erial P eripheral I nterface )并不是Intel发明,而是Motorola为嵌入式设备开发的串行总线。它最早使用在著名的龙珠系列(68xxx)CPU中,可以连接各种传感器、通讯口等等外部IC。SPI采用主从模式,一个系统中只有一个Master,但可以有多个Slave。

Y732qmi.jpg!mobile 不会有人想把Spec里面的Master/Slave改成Host/Client吧?

SPI是同步通讯,所以有公有的Clock信号SCLK;一个片选SS;一个输入信号线MOSI、一个输出信号MISO。

vqimYjb.jpg!mobile

如果有多个Slave,可以分别连接不同的SS来进行片选。

这是标准的4线SPI总线,随着SPI的发展,为了用在对引脚更敏感的嵌入式系统,于是SPI被扩展出来一个变种,3线SPI总线

reMn2yF.jpg!mobile 来源参考资料2

3线SPI较4线,将原来的单向MOSI和MISO合并成了双向的IO0(通过半双工),在性能下降的时候节省了珍贵的引脚资源。如果希望提供高性能呢?多几个数据pin就行了:

R7zy2aM.jpg!mobile

多跟IO线提供了双倍速和四倍速的SPI传输,这对需要大量传输数据时候相当重要。如存储BIOS的Flash需要快速启动和进行数据签名校验,随着BIOS功能的日渐增大,Flash容量从原来的2MB,步入64MB,近期又进入128MB的趋势。如此大量的数据,对SPI带宽要求越来越高,近期大容量SPI Flash芯片都已经支持四倍速,如Micro的64MB Flash:

yeu6fqj.jpg!mobile

DQ[3:0]对应SPI控制器IO[3:0]:

2I3Ujie.jpg!mobile Intel PCH引脚

注意MOSI和MISO在四倍速的时候会被配置成IO0和IO1。

既然BIOS Flash已经改善门厅,LPC的设备们呢?

eSPI总线

Intel在2017年提出eSPI(Enhanced Serial Peripheral Interface)总线,用以替代LPC总线。典型的eSPI总线结构图如下:

miYNJbm.jpg!mobile 来源:参考资料4

它复用了SPI四倍速的引脚定义,并加入了Alert和Reset引脚:

V3m2Yjm.jpg!mobile 来源:参考资料4

这样原来连接到SPI的Flash和TPM等等,可以保持兼容。而和BMC或者EC连接的LPC信号、SMBus和GPIO,则通过在SPI总线上面加入传输层,将SPI总线作为管道(Tunnel)进行传输:

j2Mvai7.jpg!mobile

一个多Slave的eSPI连接示意图:

jUB32aU.jpg!mobile

结语

骤然减少的Pin数对主板和芯片都能起到节约成本的作用,eSPI正在慢慢替代LPC,但这个过程不是一刀切式的,而是芯片组同时兼任LPC和eSPI,选择哪种在于主板厂商。在芯片组支持方面,Intel在Client平台和Server平台引入eSPI节奏稍有不同。Client最早在Skylake上引入eSPI,而Server上则是Grantley。

欢迎大家关注本专栏和用微信扫描下方二维码加入微信公众号"UEFIBlog",在那里有最新的文章。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK