如何阅读芯片硬件手册?

如何阅读芯片硬件手册?

前几天,订阅本专栏微信公众号的朋友留言问我,如何看懂CPU的EDS(External Design Spec)。这让我想起之前介绍电路图阅读的文章:

老狼:如何快速学会阅读电路原理图zhuanlan.zhihu.com图标

有朋友留言说不过瘾,希望能够更深入的了解。是啊,现在遍地的测评文章,大多集中在打分和使用上,但到了回答为什么有这样的结果时,却语焉不详,让人感觉隔靴搔痒,总是差了一层。

纸上得来终觉浅,绝知此事要躬行。实际上我们完全可以自己找到相关材料,获得第一手的知识,这不是比第二手,甚至第n手的知识更加新鲜有趣吗?今天我们就来介绍,如何获得CPU/芯片组的硬件手册,手册是如何组织的,你可以期待看到那些内容。希望通过本文,你会发现芯片手册并不像想象中那么神秘,普通电脑爱好者完全可以在其中发现有价值的信息。

如何获得芯片硬件手册?

如果让我说从业几十年来,在计算机产业发现了什么规律。那我最先想到的一定是开放。开源开放从个人、学校的涓涓细流开端,现在早已汇聚成滔滔的江水,奔流东向,不可阻挡。甚至微软,英特尔,AMD这些原本保守的传统公司,也慢慢变得亲民了起来。本文开始提到的EDS和BWG等等文档,可谓BIOS工程师的必备资料,里面详细记载了CPU和芯片组的功能,寄存器定义以及初始化步骤。这些文档是受到保密协定保护的文档,不可能在互联网上传播。这导致过去一般爱好者很难一窥芯片内部的结构。这些年来,芯片厂商,包括Intel、AMD和高通等等,越来越多和迅速地将芯片硬件手册在官网上公布出来,所有人都可以查阅,甚至不必注册,PDF文件可以直接下载到本地,offline阅读没有任何问题。这是一个明智之举,过去软件开源担心被黑客发现漏洞,事实证明这样遮遮掩掩对安全性并不一定是件好事。开放更多的硬件资料,不一定会增加风险,却可以吸引更多的人了解你的硬件,使用你的硬件,不是好事一件吗?

我们以Intel的CPU硬件手册举例。像EDS等资料是不会公布出来的,但是“洁版”EDS:Datasheet则可以在intel.com上很容易的找到。大家可以在官网上直接搜索CPU和芯片组型号,基本都可以找到你想要的资料。我这里有个网址:

Intel® Core™ Processors Technical Resourceswww.intel.cn图标

里面有所有酷睿CPU的Datasheet和spec update。甚至包括最新第八代酷睿Coffelake,芯片手册全部是PDF格式,大家可以直接下载到电脑慢慢查看。

Datasheet有哪些?

我们在上面的网站上会看到有很多Datasheet,甚至每种CPU的datasheet都有好几卷。以Coffeelake为例:

卷1(volume 1)和卷2有什么区别呢?

一般来说,卷1是总览(overview),卷2是寄存器详细列表。电脑爱好者看看卷1就可以了,硬件软件工程师需要查看卷2。

卷1有什么?

我们先来看看卷1(参考资料1)有什么:

其中需要重点关注的是小节1,2,3,4,5。硬件工程师特别需要关注6,7,8,9。BIOS工程师也需要了解第9节。

1. 小节1的是总体介绍,包括系统框架:

从中可以了解平台包括哪些部分,直接是通过什么总线连接的。

所有支持的新技术:

以及后面分项的简单介绍和相关术语是什么意思。

2. 小节2是各种总线接口数据和性能

3. 小节3,4,5介绍了小节1中各种技术的详细内容。

4. 小节6,7,8是硬件工程师的保留地,这里略过。这里需要特别提一下小节9。什么叫做processor ball information?别想歪了!它的来源是BGA封装,BGA的全称Ball Grid Array(焊球阵列封装),是这里这个ball。现在的CPU是LGA封装,但为了统一起见,也这样叫,就是CPU背面的那些小点:

与此对应的是pin:

有些文档叫做ballout information,但内容基本一致。也就是CPU和芯片组的引脚说明。作为一个BIOS的专栏,需要说明有时候管脚图十分有用。现在CPU功能越来越多,管脚数目上升到上千个都不够用,往往需要管脚复用。这时候我们看电路原理图时,管脚说明要和原理图作交叉比对,来确定管脚是做这个用,还是做那个用。举个例子,通常GPIO我们可以通过寄存器设置成 GPI、GPO、GPIO、Tri-State(三态)和Native态。可以设置成native态的GPIO一般是和SOC内部功能共用引脚,有时还不只一个功能。如下图:


这是板载串口的原理图部分。可以看到SOC引脚BD14和BC16,通过TXS0102YZP(电平转换芯片),引到串口J4上。BD14和BC16从图上看是GPIO_S0_SC_57和GPIO_S0_SC_61,是不是用GPIO驱动串口呢(感觉好麻烦)?为什么到了TXS0102YZP上却标明是PCU_UART3_RXD和PCU_UART3_TXD呢?这时我们下载到的芯片datasheet就派上用场了。搜索BD14和BC16,在ball list章节看到原来GPIO_S0_SC_57和PCU_UART3_TXD共用BD14引脚,如下图。BC16类似。

我们这里要做的就是设置GPIO_S0_SC_57和GPIO_S0_SC_61为native F1就行了。

卷2有什么?

券2是CPU内部所有PCI设备的寄存器详细列表:

对PCI不了解的同学参见前期文章:

老狼:深入PCI与PCIe之一:硬件篇zhuanlan.zhihu.com图标老狼:深入PCI与PCIe之二:软件篇zhuanlan.zhihu.com图标

这些PCI设备对于一般电脑爱好者用处不大,而且十分枯燥,可以忽略。但对于希望直接编写程序来操作硬件的程序员来说却是必备信息。

结论

授人以鱼不如授人以渔,希望大家看完本文后掌握如何找到并阅读硬件说明书的能力。如果能够活学活用,两相对比,看看网上的信息是不是准确,而不要人与亦云,那本文也就善莫大焉了。

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

用微信扫描二维码加入UEFIBlog公众号

参考资料

[1]: Intel® Core™ Processors Technical Resources

[2]: intel.cn/content/dam/ww

[3]: intel.cn/content/dam/ww

编辑于 2018-02-04

文章被以下专栏收录