PCI/PCIe 的那些事(1)- 总线基本知识

来源:互联网 发布:三维平面设计软件 编辑:程序博客网 时间:2024/05/17 10:43

PCI 总线

PCI: 周边组件互联局部总线 (Peripheral Component Interconnect Local Bus)

1992年,Intel发布了PCI 1.0规范, 用于替代老的ISA总线。PCI总线的产生主要解决了ISA总线的以下几个缺点:

  • 总线容量不够
  • 地址宽度不够
  • 不支持即插即用

PCI采用的是树型拓扑结构,每一个PCI device相当于树的一个结点或者叶子,对整个PCI Bus的遍历可以采用遍历树的算法,在对树进行遍历之后,可以获得整个PCI Bus的资源需求情况,从而进行统一的分配。任何一下结点的损坏也不会造成整个树的崩溃,因而具有鲁棒性。

电气信号

  • 第一组:系统信号, 时钟信号(CLK)和复位信号(PCIRST#)
  • 第二组:地址/数据,命令/使能信号
  • 第三组:传输控制信号,FRAME#, TRDY#, IRDY#, STOP#, DEVSEL#, IDSEL
  • 第四组:仲裁请求和仲裁允许, REQ#, GNT#
  • 第五组:终端信号
  • 第六组:错误校验信号
  • 第七组:PCI64扩展信号

总线操作

PCI总线操作的一具典型的特点就是支持BURST传输。什么是BURST传输呢?首先你得知道PCI的数据总线和地址总线是复用的。这就是说在同样的总线上,一段时间是地址,一段时间是传输数据。如果没有BURST传输,那么完成一次数据传输之前都得发一次地址,这就是总线有一半的时间都在传地址,这使得总线和利用率很低。有了BURST传输,可以先发一个起始地址和数据长度N, 之后传输数据0~N-1就可以直接发数据,不用再发地址了。
PCI总线基本操作

PCI总线典型操作分为两部分:

  • 地址相, 当FRAME#有效时,C/BE#上面出现4位交易码,AD上面是地址数据
  • 数据相,当DEVSEL#有效时,AD上面出现传输数据
    交易码

PCI总线的具体交易过程如下:

  • 主设备发起#REQ, 申请总线的使用权
  • 得到仲裁允许,#GRT
  • FRAME#信号拉低,交易地址放入AD, 交易码放入C/BE#
  • 如果从设备就在这个总线上,那么地址译码成功后,从设备会把DEVSEL#拉低,就可以开妈传输数据了
  • 如果从设务不是直接连在总线上,而是跨过了PCI-PCI bridge。那么bridge就会启动一个请求重传的机制。即通过控制信号通知主设备重试,在此同时将自己作为主设备向下一级总线转发上级总线的交易请求,这样,当下一次主设备再次发起交易的时候,bridge上面已经有了从设备获取来的数据,交易就可以正常进行了。
0 0