PCI总线标准是intel在很早以前推出的一种连接主板和外部设备的总线标准,全称为[Peripheral Component Interconnect]。任何事物的出现总是有其时代性,在PC领域也不例外。PCI的出现也是因为当时PC的性能和设计成本的要求。PCI针对ISA总线,做了不少改进,具有不少的优势。
PCI槽在主板上是很容易找到的,一般都是乳白色的插槽,如下图所示。不过现在市场上的主板基本都不在有PCI槽,或者有1个。目前均使用更高性能的、pci的下一代接口PCI-express。这都是后话了。
PCI总线的地址总线与数据总线是分时复用的,支持即插即用 (plug andplay)、中断共享等功能。分时复用的好处是一方面可以节省接插件的引脚数,另一方面便于实现突发数据传输。
比如即插即用和中断共享这两个特点就足以把ISA比下去了。
传统的ISA设备在插入系统之后,需要调整BIOS来添加一些特定的配置,而且中断也是独享的,系统的irq用一个就少一个;如果使用PCI总线,设备插入之后,BIOS会自动根据pci卡的特性分配IO、MEM空间和IRQ,并且IRQ是可以在PCI设备中共享的。PCI架构确实增加了系统的灵活性。
在带宽方面PCI总线在当时来说也提高了很多,这才是最关键的优势了。
33.33 MHz时钟 的同步传输;也有66MHz的扩展时钟频率。
总线带宽为32bit,当然也有64bit的扩展。
最大传输133 MB/s (133 megabytes per second) for 32-bit bus width(33.33 MHz × 32 bits ÷ 8 bits/byte = 133 MB/s)
对于64M的频率来说,总线带宽可以达到264MB/s。
32 或 64位的内存位址
32位元 I/O port 空间
想要了解PCI的规范,最权威的资料要属PCI Spec了。这些规范,包括PCIe,均是由美国的PCI-SIG协会(PCI特别兴趣小组)来管理和更新。
总线规范中也列出来适宜阅读的人群和工种。对于底层的软件工程师BIOS来说,基本需要了解如下几个章节。
Chapter 1 introduction 总线介绍
Chapter 2 Signal definition 信号定义
Chapter 3 Bus Operation 总线操作
Chapter 6 configuration space 配置空间
当然作为BIOS工程师来说,不仅仅是阅读spec这么简单。解决问题才是最终目的。spec的东西还是比较晦涩难懂的,属于理论的层面,在具体的操作实践中会完全就是两回事了。
将会碰到的事情很多,比如:
1、 PCI device 配置空间的访问和配置方法和原则
2、 PCI 总线的遍历
3、 PCI 设备的IRQ分配原则和方式
4、 PCI 分配memory /IO的原则和方式
5、 PCI Bridge 的概念和工作原理
最终的还是需要落实到一点:看源代码和spec。还是那句话Read the fuck source code!