一口Linux

文章数:1382 被阅读:1966155

账号入驻

Linux内核PCIE

最新更新时间:2023-12-28
    阅读数:

点击左上方蓝色“ 一口Linux ”,选择“ 设为星标

作者: 小田BSP

本文主要是整理PCIE的基础知识。

一、PCI总线

在PC时代,为了解决CPU主频和外部设备访问速度的问题,发展了几代I/O总线:

1、第一代总线:ISA、EISA等

2、第二代总线:PCI、PCI-X等

3、第三代总线:PCIE、mPCIE、m.2等

PCI(Peripheral Component Interconnect),外部设备互联,Intel公司提出,主要功能是连接外部设备。PCI引脚如下:

PCI引脚

PCI总线特点如下:

1、PCI总线是并行总线,有32/64根地址线,地址和数据都是通过这32/64根地址线进行传输,分时复用

2、PCI总线上可同时挂载多个设备,设备分为主设备和从设备。主设备一般是主控芯片PCI控制器,需要负责PCI总线上的仲裁

3、PCI设备共享总线,通过片选引脚、地址范围、总线号、设备号、功能号等机制来确定当前和哪个设备通信。

4、PCI总线通信大致分为:配置阶段和地址访问阶段。

5、配置阶段:PCI总线控制器依次扫描连接在PCI总线上的所有设备,访问设备的配置空间,知道设备的类型、要申请的资源,然后给设备分配总线号、设备号、功能号、地址空间,并写进设备的配置空间。

6、地址访问阶段:在配置阶段,给每个PCI设备分配PCI地址范围,并写进设备寄存器,以后设备会监听地址线,当监听到地址线上传输的地址是自己的地址范围,就会处理。

7、PCI采用同步时序协议,信号线里有clk时钟线。

8、PCI有三个相互独立的物理地址空间:内存地址空间、I/O地址空间和配置空间。配置空间是PCI特有的一个物理空间,PCI设备支持即插即用。

9、PCI总线规范定义的配置空间总长度为256字节,前64字节的配置空间称为配置头,对于所有的设备都一样。配置头的主要功能是用来识别设备、定义主机访问PCI卡的访问方式(I/O访问或者存储器访问,还有中断信息),其余192字节称为本地配置空间(设备有关区),主要定义卡上局部总线的特性、本地空间基地址和范围等。


其中:

1)Vendor ID:厂商ID,FFFFh是一个非法厂商ID,根据它判断PCI设备是否存在。

2)Device ID:设备ID,某厂商生产设备的ID,驱动根据Vendor ID和Device ID找对应驱动程序。

3)Base Address0 ~ 5:简称BAR寄存器,保存PCI设备使用的PCI总线域的基地址。PCI设备复位后,BAR寄存器存放的是设备需要使用的地址空间大小、类型(I/O或MEM),如果是MEM则是否可预取(Prefectchable是否为1)


4)IRQ Line:IRQ 编号,支持管理24个中断。

5)IRQ Pin:中断引脚,PCI有4个中断引脚,该寄存器表示该设备连接的是哪个引脚。

PCI枚举过程:尝试所有的BUS/DEV/FUNC组合,判断厂商ID是否为FFFFh。

访问配置空间方法:

通过访问0xCF8h/0xCFCh端口实现。

1)0xCF8h:CONFIG_ADDRESS,PCI配置空间地址端口。CONFIG_ADDRESS寄存器格式:

31: Enable位

23~16:总线号

15~11:设备号

10~8:功能号

7~2:配置空间寄存器编号

1~0:0


2)0xCFCh:CONFIG_DATA,PCI配置空间数据端口。

二、PCIE介绍

PCIE(PCI Express)是在PCI的基础上发展而来,是目前PC和嵌入式系统中最常用的高速总线,PCIE与PCI是软件向后兼容,PCI的系统软件可以用在PCIe系统中。

PCIE采用的是树形拓扑结构,体系架构包括:root complex,switch、bridge和endpoint等类型的PCIE设备组成。PCIE总线拓扑结构如下:


Root Complex:根复合体,简称RC,CPU和PCIE之间的接口。RC位于PCIE倒立拓扑的根,并代表CPU与系统的其余部分进行通信。PCIE端口在配置空间中被标记为根端口。

Bridge:桥提供了与其他总线(如:PCI或PCI-X)的接口,允许旧的PCI或PCI-X卡插入新系统。反向桥接允许一个新的PCIE卡插入一个旧的PCI系统。

Switch:提供扩展或聚合能力,允许更多的设备连接到一个PCIE端口。充当包路由器,根据地址或其他路由信息识别给定包需要走哪条路径。是一种PCIE转PCIE的桥。

Endpoint:PCIE总线系统拓扑结构中的最末端,一般作为总线操作的发起者(initiator)或终结者(Completes)。Endpoint只能接受来自上级拓扑的数据包或向上级拓扑发送数据包。

PCIe插槽集中在PCIex1/x4/x8/x16四种上。

1)PCIex1插槽的长度是最短的,数据针脚14个。主要用途:独立网卡、独立声卡和USB3.0/3.1扩展卡。

2)PCIex4和x8插槽一样,现在多数做成PCIex16插槽,或扩展为M.2接口,用于安装M.2 SSD、M.2无线网卡。

3)PCIex8,为了兼容性PCIex8插槽通常做成PCIex16插槽的形式,但数据针脚只有一半是有效的。

4)PCIex16插槽主要用于显卡以及RAID阵列卡,向下兼容x1/x4/x8级别的设备。

在PCI总线中,所有需要提交中断请求的设备,必须能通过INTx引脚提交中断请求,MSI机制是一个可选机制。而PCIE总线中,PCIE设备必须支持MSI或MSI-X中断请求机制,而可以不支持INTx中断消息。

在PCIE总线中,MSI和MSI-X中断机制使用存储器写请求TLP向处理器提交中断请求。

三、PCIE地址空间

PCIE有三种主要的地址空间:memory-space,IO space和configuration space。

1)Memory space:数据存储内存空间(refetchable 和 Non-Prefetchable Memory Space)

2)IO Space:用于访问IO设备的内部寄存器/存储,已被MMIO机制代替,访问方式和Memory相同,且也分(refetchable 和 Non- Prefetchable Memory range)

3)Configuration Space:配置空间,通过bar寄存器控制Memory space映射


四、PCI和PCIE差异

1) 颜色

PCI接口通常是白色,PCIE接口一般用其他颜色。

2) 长度

PCIE接口要比PCI接口长。

3) 兼容性

PCIE在软件层面上兼容目前的PCI技术和设备。

4) 速度

PCI的工作频率:33MHZ和66MHZ,最大吞吐率264MB/s(66MHZ*32BIT/8)。

PCI-X的工作频率:66MHZ/100MHZ和133MHZ,最大吞吐率1064MB/s(133MHZ*64BIT/8)。

5) 传输方式

PCI是并行数据传输,一次传输4/8字节,半双工。

PCIE是串行数据传输,全双工。

6) 硬件

PCI信号是普通电平。

PCIE信号是差分电平。

7) 链路

PCI是总线的连接方式。

PCIE是点对点的连接方式。

8) 编码方式

PCIE gen1和gen2采用8bit/10bit编码方式,gen3以后采用128b/130b的编码方式。

9) Inbound和outbound

PCIE设备和系统内存相互访问时,outbound是指CPU到设备方向;inbound是指device到RC(CPU端)方向。CPU读写RC端的寄存器时,属于偏上系统的范围,不属于inbound或outbound。

10)PCI配置空间

PCI设备拥有256B的配置空间,PCIE还提供了另外4KB的扩展。256B的配置空间中前64B是规范的,其他是各厂商自己定义的。

PCI设备地址:

10.1)总线号:厂家ID

10.2)设备号:设备ID

10.3)功能号:设备类

11) PCIE配置空间

PCIE一共支持256条bus,32个dev和8个fun,和PCI相同。

PCIE设备发展向前兼容PCI,每个设备的配置空间前256B是PCI空间,后(4K-256)B的空间是PCIE控制空间。

Linux用同一套驱动代码处理PCI和PCIE驱动,只需要在配置、传输等底层操作去区分两种总线协议。

五、PCIE驱动

以RK3568 PCIE RC驱动为例。


1)compatible = "rockchip,rk3568-pcie", "snps,dw-pcie"

PCIE接口使用的是RC模式;EP模式

2)bus-range = <0x10 0x1f>

PCI bus地址范围从0x10到0x1f。

3)interrupts


中断号和中断名称。对应RK3568 中断号如下(-32):


4)interrupt-map-mask 和 interrupt-map

interrupt-map-mask 和 interrupt-map:标准PCI属性值,对应INTA ~ INTD(legacy 中断)

5)num-lanes = <1>

PCIE设备所使用的lane数量,默认不需要调整,软件自动探测并关闭不需要的lane以节省功耗。

6)max-link-speed = <3>

PCIE带宽版本,1表示Gen1;2表示Gen2;3表示Gen3,无需配置。

7)reset-gpios = <&gpio2 RK_PD6 GPIO_ACTIVE_HIGH>

PCIE接口的perst#复位信号,插槽和焊贴设备,都需要。必须配置。

8)msi-map = <0x1000 &its 0x1000 0x1000>

PCIE设备映射到MSI控制器,格式和介绍如下:


9)phys = <&pcie30phy>

使用的PCIE PHY。

10)power-domains = <&power RK3568_PD_PIPE>

PCIE电源域

11)reg 和 reg-names

PCIE-dbi(映射总线上设备的配置空间地址)和PCIE-apb(PCIE控制器地址)寄存器地址和范围

12)rangs


功能:设备将CPU域地址映射到PCIE域地址

格式:

<映射类型(第1个字段) PCIe基地址(第2~3字段)CPU域基地址(第4~5字段)映射区域大小(第6~7字段)>

0x81000000:表示IO空间

0x82000000:表示MEM空间 (non-prefetchable)

13)vpcie3v3-supply = <&pcie30_3v3>

PCIE外设的3V3供电。PCIE phy使用1.8V或0.9V供电。

Linux系统查看PCI设备的命令:lspci,PCI逻辑地址:XX:YY:Z分别表示总线号:设备号:功能号。一个PCI域能容纳256个总线,每个总线可支持32个PCI设备,每个PCI设备可容纳8个PCI功能。

lspci -t:显示树状结构

lspci -x:显示配置空间前64字节的内容

lspci -s:指定PCI设备

end



一口Linux


关注,回复【 1024 】海量Linux资料赠送

精彩文章合集

文章推荐

【专辑】 ARM
【专辑】 粉丝问答
【专辑】 所有原创
专辑 linux 入门
专辑 计算机网络
专辑 Linux驱动


 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: TI培训

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved