PCI/PCIE
分为桥设备和非桥设备,这节介绍非乔设备的一个访问原理
怎么访问到某个PCI
设备?
需要理解PCI
本地总线信号。
类别 | 信号 |
---|---|
系统引脚 | CLK :给PCI设备提供时钟RST# :用于复位PCI设备 |
地址/数据引脚 | AD[31:00] :地址、数据复用C/BE[3:0] :命令或者字节使能PAR: 校验引脚 |
接口控制 | FRAME# :PCI主设备驱动此信号,表示一个传输开始了、进行中IRDY# :Initiator ready, 传输发起者就绪,一般由PCI主设备驱动此信号TRDY# :Target ready,目标设备驱动,表示它就绪了STOP# :目标设备驱动,表示它想停止当前传输LOCK# :锁定总线,独占总线,有PCI桥驱动此信号IDSEL :Initialization Device Select,配置设备时,用来选中某个PCI设备DEVSEL# :Device Select,PCI设备驱动此信号,表示说:我就是你想访问的设备 |
仲裁引脚 | REQ# :申请使用PCI总线GNT# :授予,表示你申请的PCI总线成功了,给你使用 |
错误通知引脚 | PERR# :奇偶校验错误SERR# :系统错误 |
中断引脚(可选) | INTA# 、INTB# 、INTC# 、INTD# |
CPU
发出地址addr_cpu
PCI
桥把addr_cpu
转换为addr_pci
PCI
总线上所有设备都检测addr_pci
地址,发现它属于某个设备的地址,该设备就负责完成此传输PCI
设备可以简单地分为PCI Bridge
(桥设备)和PCI Agent
(非桥设备):
PCI Bridge
:桥,用来扩展PCI
设备,必定有一个Root Bridge
,下面还可以有其他Bridge
。PCI Agent
:真正的PCI
设备(比如网卡),是PCI
树的最末端《PCI_SPEV_V3_0
》中提到了设备的访问格式,如下图:
IDSEL
拉高选中要访问的设备FRAME#
拉低有效的第一个时钟CLK
的情况下,在AD
总线上写入Address
,后面再写入Data
,用来设置像访问的哪个地址和哪个寄存器‘C/BE#
去配置读/写寄存器操作,比如第一次就要去读设备配置信息,分配内存空间等