【接口协议】13.PCI/PCIe

【嵌入式八股】一、语言篇https://www.nowcoder.com/creation/manager/columnDetail/mwQPeM

【嵌入式八股】二、计算机基础篇https://www.nowcoder.com/creation/manager/columnDetail/Mg5Lym

【嵌入式八股】三、硬件篇(本专栏)https://www.nowcoder.com/creation/manager/columnDetail/MRVDlM

【嵌入式八股】四、嵌入式Linux篇https://www.nowcoder.com/creation/manager/columnDetail/MQ2bb0

PCI/PCIe

简介

PCI(Peripheral Component Interconnect)

  • 介绍: PCI是一种老旧但仍然有用的计算机总线标准,最初用于连接内部硬件设备(如显卡、网卡、声卡等)到计算机主板。并行传输。
  • 速度: 最初的PCI标准有一个总线速度为33 MHz的32位版本和一个总线速度为66 MHz的64位版本。它提供了传输速率为133 MB/s(PCI 32位,33 MHz)到达533 MB/s(PCI 64位,66 MHz)的带宽。
  • 替代方案: 随着时间的推移,PCI已被更快速的接口标准所替代,例如PCIe。

PCIe(Peripheral Component Interconnect Express)

  • 介绍: PCIe是PCI的进化版本,它为连接和传输数据提供更高的性能和速度。串行传输。
  • 速度: PCIe提供了不同的版本,如PCIe 1.0、2.0、3.0、4.0和最新的PCIe 5.0,每个版本都有不同的传输速率。PCIe 5.0提供了每条通道每秒达到32 GB/s的速度。
  • 通道: PCIe使用通道来传输数据,每个通道有一对发送和接收信号,这使得其在数据传输时更为高效。
  • 适用性: 由于其高速和可扩展性,PCIe已成为连接图形卡、存储设备和其他外部硬件的主流接口标准,广泛用于现代计算机中。

PCI设备

alt

alt

类别 信号
系统引脚 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#

配置PCI Agent设备

PCI设备可以简单地分为PCI Bridge和PCI Agent:

  • PCI Bridge:桥,用来扩展PCI设备,必定有一个Root Bridge,下面还可以有其他Bridge。
  • PCI Agent:真正的PCI设备(比如网卡),是PCI树的最末端

怎么配置PCI Agent设备?

  • 选中:通过IDSEL来选中某个设备

  • 怎么访问配置空间:发起一个type 0的配置命令

    • PCI设备最多有8个功能,每个功能都有自己的配置空间(配置寄存器)
    • 你要访问哪个功能?哪个寄存器?发起 <img alt

alt

  • CPU读取配置空间的BAR,得知:这个PCI设备想申请多大空间
  • CPU分配PCI地址,写到PCI设备的BAR里

配置PCI桥

  • 跟一般的PCI设备一样,通过IDSEL来选中它
  • 通过type 0配置命令读取配置空间,发现它是PCI桥设备,把分配的总线号写给它

alt

  • 发起一个type 1的配置命令 alt alt

  • 通过Bus Number访问到PCI桥

  • PCI桥根据Device Number去驱动IDSEL,选中下一级的PCI设备

  • 通过Function Number、Register Number访问PCI设备的配置空间

PCI设备的INTx中断机制

alt

PCIe设备

alt

PCIE怎么传输数据

alt

既然PCIe是串行信号,那只能在"包"里传输地址、数据了。

  • 需要定义包的格式:类型(Mem R/W) + 地址 + 数据
  • 包怎么传递给对方、怎么确保不出错?有重传机制、有检验码
  • 包怎么通过差分线传送出去?

PCIe总线的层次结构和数据包:

  • 事务层(Tansaction Layer):传输的是Transaction Layer Packet(TLP) alt

  • 数据链路层(Data Link Layer):传输的是Data Link Layer Packet(DLLP

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

【嵌入式八股】三、硬件篇 文章被收录于专栏

查阅整理上千份嵌入式面经,将相关资料汇集于此,主要包括: 0.简历面试 1.语言篇 2.计算机基础 3.硬件篇【本专栏】 4.嵌入式Linux (建议PC端查看)

全部评论

相关推荐

3 6 评论
分享
牛客网
牛客企业服务