PCIe简述

  1. 概念

PCI-Express(peripheral component interconnect express)是一种高速串行计算机扩展总线标准

作用:局部总线,作为系统总线的延伸,负责链接各种外部设备

优点:传输速率高,抗感染性强,功耗低,传输距离远

特点:高速串行 全双工的传输模式 差分总线 嵌入式时钟 点对点连接

  1. 基本结构

PCI经典结构
PCIE基本结构

Root Complex经常被称为RC或者Root(基本已经继承CPU内部了)。可以把Root Complex理解为CPU与PCIe总线系统通信的媒介。Endpoint处于PCIe总线系统拓扑结构中的最末端,一般作为总线操作的发起者(initiator,类似于PCI总线中的主机)或者终结者(Completers,类似于PCI总线中的从机)。显然,Endpoint只能接受来自上级拓扑的数据包或者向上级拓扑发送数据包。

而Lagacy PCIe Endpoint是指那些原本准备设计为PCI-X总线接口的设备,但是却被改为PCIe接口的设备。而Native PCIe Endpoint则是标准的PCIe设备。其中,Lagacy PCIe Endpoint可以使用一些在Native PCIe Endpoint禁止使用的操作。Native PCIe Endpoint则全部通过Memory Map来进行操作,因此,Native PCIe Endpoint也被称为Memory Mapped Devices(MMIO Devices)

  1. 体系结构

(图来源于某位大佬的博客,忘了是哪位了0.0)

  1. PCIe配置空间

(Bridge Type 1 EndPoint Type 0)

DID&VID: 设备及厂商ID,出场固定且每个设备都不应,枚举设备时通常判断此VID来判断设备是否存在。(当Vender ID寄存器是0XFFFF时表示无效ID)

Class Code:该寄存器是只读的,通常用来表示该设备类型。用法如下:

ClassCode Register共3个byte,位于配置空间的[0A:08],分别表示

BaseClass:将PCI设备分类为显卡、网卡、PCI桥等设备;Sub-Class:对设备进一步细分;InterFace:定义编程接口

HeaderType:标明Config空间的类型,同时也标明了Config空间的layout

只读寄存器,有8位组成:第7位为1时表示当前pci设备是多功能设备 为0是单功能设备;第0-6位表示当前配置空间的类型,为0时表示该设备使用的是PCI Agent设备的配置空间,普通的PCI设备使用这种配置头;为1时表示是PCI桥的配置空间;为2时时Cardbus桥片的配置空间

共有三种:00H--普通端点设备,01H--Bridge设备,02H--CardBus bridges(此外,若该寄存器的Bit7为0.则表明该设备是一个单功能设备)

BAR0 & BAR1:设备空间的基地址

对于Endpoint来说,最多可以拥有6个不同的地址空间。但是实际应用中基本上不会用到6个,通常1~3个BAR比较常见。主要注意的是,如果某个设备的BAR没有被全部使用,则对应的BAR应被硬件全被设置为0,并且告知软件这些BAR是不可以操作的。对于被使用的BAR来说,其部分低比特位是不可以被软件操作的,只有其高比特位才可以被软件操作。而这些不可操作的低比特决定了当前BAR支持的操作类型和可申请的地址空间的大小。一旦BAR的值确定了(Have been programmed),其指定范围内的当前设备中的内部寄存器(或内部存储空间)就可以被访问了。当该设备确认某一个请求(Request)中的地址在自己的BAR的范围内,便会接受这请求。

其他:略,详细字段解释可自行查看PCIe Spec

IO:

通过IO映射访问配置空间,简单可理解为一段存储空间,用户通过IN/OUT指令来访问(内存的话,需要用MOVE指令来进行访问),部分设备可以映射到IO空间中,开发者通过IO端口访问这个设备,比如现在介绍的这个:通过CF8 / CFC端口。用户可通过这组端口来对PCIE的前256个Byte进行访问,一个指定地址,一个指定数据。

Memory:

PCIe扩展配置空间大小至4k,传统IO方式只能访问前256k大小的区域,所以增加Memory访问方式访问其他区域,映射于存储器的配置空间:PCIE增强的配置访问机制在系统存储器空间里划出一片256MB区域,将总容量为256MB的全部配置寄存器一对一地映射于这片存储器空间

5.Capabilities offcet 0x34 Capabilities pointer寄存器

(图片截取于公众号UEFIBlog)

通过访问PCIE的配置空间,找到Capablities pointer,指向下一个链表的的地址。PCIE的各种特性 Max Payload、Complete Timeout等待都通过这个链表链接在一起,Capablities ID有PCIE Spec直接规定。链表的好处在于如果你不关心当前的Capablities,可以直接跳过去找到你关心的那一个。另外扩展性也强,新加的功能不会固定放在某一个位置

Extern Capability:

存放在PCI配置空间0x100之后(PCI设备不支持该结构,实际大多数PCIE设备也不支持该结构,如果该PCIE设备没有Extended Capabilities则0x100会指向0xFFFF,且Next Capability offset为0x00);一个PCIE设备可能含有多个Capabilitie,形成一个单向列表,第一个Capabilities的基地址为0x100

就先到这里吧,写的很是简单

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值