
PCIe扫盲
文章平均质量分 89
PCIe扫盲
kunkliu
good good study
展开
-
PCIE_DMA实例五:基于XILINX XDMA的PCIE高速采集卡
转载地址:https://www.cnblogs.com/yuzeren48/p/13755651.html一:前言这一年关于PCIE高速采集卡的业务量激增,究其原因,发现百度“xilinx pcie dma”,出来的都是本人的博客。前期的博文主要以教程为主,教大家如何理解PCIE协议以及如何正确使用PCIE相关的IP核,因为涉及到商业道德,本人不能将公司自研的IP核以及相关工程应用放到网上。但为了满足大家对PCIE高速采集卡这块的业务需求,博主特地利用业余时间,使用XDMA这个xilinx官方IP转载 2021-06-07 15:48:07 · 8399 阅读 · 4 评论 -
PCIe 枚举过程
1. 设备的发现与bdf number的确定 枚举的第一个过程是rc端通过向bus上发起配置空间访问获取整个总线拓扑上的设备信息。 简单说来就是去遍历每个bus,以及bus下device的配置空间。如果读到有效的device ID值(非全F)则认为发现了可用的设备。 1.1 bdf number的分配 bus device function这3个number的分配是很有意思的事情。对于每个pcie设备来...转载 2020-11-07 13:27:59 · 7412 阅读 · 0 评论 -
PCIe实践之路:Linux RC驱动
最新的4.12内核中对pci host driver进行一些划分,把基于designware IP的主控驱动放到drivers/pci/dwc目录下去了。如果是基于老的kernel开发,想要移植新版的内核的话,要注意,同时多了designware ep驱动框架。非designware的主控驱动还是位于host目录下,譬如pcie-xilinx.c。下面就以xilinx pcie主控驱动为例来介绍如何添加自己的host driver。一、probe和设备树现在的设备驱动大部分都是通过devic转载 2020-11-05 18:13:01 · 3152 阅读 · 1 评论 -
PCIe实践之路:Linux访问PCIe空间
Linux在枚举PCIe设备的过程由内核中的PCI框架负责,在EP配置完成之后,驱动通过以下接口访问PCIe空间,原理参考前文《大话PCIe:设备枚举》 一、访问配置空间 相关接口位于drivers/pci/access.c 1.1 读配置空间 pci_read_config...转载 2020-11-05 18:10:06 · 4628 阅读 · 0 评论 -
PCIe实践之路:DMA机制
一、PCIe DMA机制 PCIe控制器也提供DMA(Direct Memory access)功能,用来批量地异步数据传输。 1.1 DMA读写的发起和结束 假设现在RC要从EP mem space读1MB数据,可以有这么两种方式:RC发起DMA读;EP发起DMA写。这两种方式结果是等效的,对最后完成中断的方式会不一样,前者通...转载 2020-11-05 18:07:43 · 10681 阅读 · 1 评论 -
PCIe实践之路:设备枚举
人的一生是一个不断认识自我,发展自我的过程。 认识PCIe设备的枚举过程需要以下知识: 拓扑结构设备的表征及配置空间的访问BAR空间的含义和访问 其中第1/2点在总线结构与配置空间已经介绍过了,第3点在BAR空间和TLP也已经进行过详细的介绍,可以说是万事具备。接下来涉及的过程有以下几个: 根据深度优先搜索进行设备总线号的分配BAR空间的映射和简单访问测试 上面就是枚举过程中做的事情了。 一、基于深度优先搜索的总线号分配 1.1 原理阐述 每一个switch代表一级bus,挂在该switc转载 2020-11-05 11:09:12 · 2289 阅读 · 0 评论 -
PCIe实践之路:BAR空间和TLP
上一篇文章中写到每个PCIe的function都有自己的configuration space,其实就是配置寄存器了(这个当然是要有的了,不然软件要怎么玩?只不过PCIe的配置寄存器要通过tlp才能去访问)。其实PCIe设备是有自己独立的一套内部空间,不仅仅是配置空间,包括每个设备提供哪些I/O地址,memory地址。而BAR(Base Address Register)就是用来表征这些地址空间的。一、BAR寄存器和PCIe内部空间 关于地址相关的问题,搞清楚这三个地址之间的关系就可以了: 存储器地址转载 2020-11-05 11:06:35 · 3664 阅读 · 0 评论 -
PCIe实践之路:总线结构与配置空间
把有限的精力花在真正有价值的事情上。 每个PCIe设备都位于一个总线架构中(RC、SW和EP共同组成了一个PCIe网络),如何组织这些设备,以及如何访问这些设备呢? 一、网络拓扑与设备端口 上一篇已经讲到构成PCIe网络的三个角色:RC、SW和EP。其实这整个网络给人感觉就像乐高积木,上一级设备的下游端口接下级设备的上游端口,然后端口不但能看出链接状态,还提供包传输的链路。 这里有两个常见的概念:DSP(Down Stream Port)和USP(Upper Stream Port)。对每个功.转载 2020-11-05 11:03:24 · 1392 阅读 · 0 评论 -
PCIe各版本结构剖析
最近在学习驱动开发过程中涉及到PCI相关知识,在网上看了很多文章,良莠不齐,我总结一下比较好的文章分享给大家,那就从源头开始说起。 PCI总线和设备树是X86硬件体系内很重要的组成部分,几乎所有的外围硬件都以这样或那样的形式连接到PCI设备树上。虽然Intel为了方便各种IP的接入而提出IOSF总线,但是其主体接口(primary interface)还依然是PCIe形式。我们下面分成两部分介绍PCI和他的继承者PCIe(PCI...转载 2020-11-03 16:02:22 · 4187 阅读 · 0 评论 -
老男孩读PCIe之六:配置和地址空间
来源: http://www.ssdfans.com/?p=3644每个PCIe设备,有这么一段空间,Host软件可以读取它获得该设备的一些信息,也可以通过它来配置该设备,这段空间就叫做PCIe的配置空间。不同于每个设备的其它空间,PCIe设备的配置空间是协议规定好的,哪个地方放什么内容,都是有定义的。PCI或者PCI-X时代就有配置空间的概念,那时的配置空间如下:图6.1整个配置空间就是一系列寄存器的集合,其中Type 0是Endpoint的配置,Type 1是Bridge(PCIe时代就是转载 2020-11-03 15:20:51 · 864 阅读 · 0 评论 -
老男孩读PCIe之五:TLP结构
来源: http://www.ssdfans.com/?p=3683无论Request TLP,还是作为回应的Completion TLP,它们模样都差不多:图5.1TLP主要由三部分组成:Header,Data和CRC。TLP都是生于发送端的事务层(Transaction Layer),终于接收端的事务层。每个TLP都有一个Header,跟动物一样,没有头就活不了,所以TLP可以没手没脚,但不能没有头。事务层根据上层请求内容,生成TLP Header。Header内容包括发送者的相关信息、目标转载 2020-11-03 15:19:37 · 1772 阅读 · 2 评论 -
老男孩读PCIe之四:TLP类型
来源: http://www.ssdfans.com/?p=3704Host与PCIe设备之间,或者PCIe设备与设备之间,数据传输都是以Packet形式进行的。事务层根据上层(软件层或者应用层)请求(Request)的类型、目的地址和其它相关属性,把这些请求打包,产生TLP,也就是Transaction Layer Packet。然后这些TLP往下,经历数据链路层,物理层,最终到达目标设备。根据软件层的不同请求,事务层产生四种不同的TLP请求:1. Memory2. IO3. Configurati转载 2020-11-03 15:17:27 · 2186 阅读 · 0 评论 -
老男孩读PCIe之三:PCIe分层结构
来源: http://www.ssdfans.com/?p=3700绝大多数的总线或者接口,都是采用分层实现的。PCIe也不例外,它的层次结构如下:图3.1PCIe定义了下三层(彩色部分):事务层(Transaction Layer),数据链路层(Data Link Layer)和物理层(Physical Layer),每层职能是不同的,且下层是为上层服务的。分层设计的一个好处:如果层次分得够好,接口版本升级时,硬件设计可能只需要改动某一层,其它层次可以保持不动。PCIe传输的数据从上到下,都是转载 2020-11-03 15:16:07 · 1129 阅读 · 1 评论 -
老男孩读PCIe之二:PCIe拓扑结构
来源: http://www.ssdfans.com/?p=3692 "计算机网络的拓扑结构是引用拓扑学中研究与大小、形状无关的点、线关系的方法,把网络中的计算机和通信设备抽象为一个点,把传输介质抽象为一条线,由点和线组成的几何图形就是计算机网络的拓扑结构。" 计算机网络的最主要的拓扑结构有总线型拓扑、环形拓扑、树形拓扑、星形拓扑、混合型拓扑以及网状拓扑。 PC...转载 2020-11-03 15:12:55 · 2044 阅读 · 0 评论 -
老男孩读PCIe之一:从PCIe速度说起
老男孩读PCIe之一:从PCIe速度说起 Posted on 2017年8月3日 by SSD Fans 原创内容,转载请注明: [http://www.ssdfans.com] 谢谢! 从今天开始,老男孩要开始讲PCIe了。对我来说,这是个很大的挑战:首先,我自己本身,对PCIe并没有做到胸有成竹,我的PCIe知识也只是停留在理论阶段,我并没有...转载 2020-11-03 15:05:44 · 11689 阅读 · 0 评论 -
PCIe学习笔记之MSI/MSI-x中断及代码分析
本文基于linux 5.7.0, 平台是arm641. MSI/MSI-X概述 PCIe有三种中断,分别为INTx中断,MSI中断,MSI-X中断,其中INTx是可选的,MSI/MSI-X是必须实现的。 1.1 什么是MSI中断? MSI, message signal interrupt, 是PCI设备通过写一个特定消息到特定地址,从而触发一个CPU中断。特定消息指的是PCIe总线中的Memory Write TLP, 特定地址一般存放在MSI capability中。 和传统的INTx中断相比转载 2020-10-07 15:14:37 · 5170 阅读 · 0 评论 -
PCIe初始化枚举和资源分配流程分析
本文主要是对PCIe的初始化枚举、资源分配流程进行分析,代码对应的是alikernel-4.19,平台是arm641. PCIe architecture1.1 pcie的拓扑结构在分析PCIe初始化枚举流程之前,先描述下pcie的拓扑结构。如下图所示:整个PCIe是一个树形的拓扑:• Root Complex是树的根,它一般实现了一个主桥设备(host bridge), 一条内部PCIe总线(BUS 0),以及通过若干个PCI bridge扩展出一些root port。host bridge可以.转载 2020-10-07 15:04:06 · 11000 阅读 · 2 评论 -
PCIe学习笔记之PCIe设备发现过程
PCIe在调试过程中,经常会出现扫描不到对端EP设备的问题,在问题定位过程中,了解内核中pcie枚举流程至关重要。PCIe枚举过程一般分为三步: 1.创建根节点 2.扫描根节点下设备 3.为根节点下设备分配资源 那么如何发现设备? 从总线扫描pcie设备的函数pci_scan_child_bus开始分析 unsigned int pci_scan_child_bus(struct pci_bus *bus){ unsigned int devfn, pass, max = bus-&转载 2020-10-07 15:01:54 · 5807 阅读 · 0 评论 -
PCIe学习笔记之Max payload size
本文基于linux 5.7.0, 平台是arm64 在平时设备的使用过程中,有可能遇到过数据通信错误(malformed tlp), 或者网卡/磁盘在进行数据读写时性能没有达到预期,这些都可能和pcie 的max payload size配置有关系。 1. 概述 1.1 什么是max payload size 我们都知道,PCI...转载 2020-10-07 14:30:32 · 8753 阅读 · 2 评论 -
PCIe学习笔记之pcie结构和配置空间
PCIe概述 PCI Express,是计算机总线PCI的一种,它沿用现有的PCI编程概念及通信标准,但建基于更快的串行通信系统。 PCIE总线使用的是高速差分总线,并采用端到端的连接方式, 现在的高速总线基本上都是串行总线,这样可以使用更高的时钟频率。 当前pcie协议支持到5.0版本,不同PCIe版本对应的传输速率如下: P...转载 2020-09-25 17:29:49 · 9363 阅读 · 0 评论 -
PCI/PCIe基础——配置空间
简介 PCI/PCIe设备有自己的独立地址空间,这部分空间会映射到整个系统的地址空间。 映射地址在BIOS/UEFI下指定(如果有的话,对于使用非BIOS启动的OS,不清楚),它有两种类型,一种是MMIO,一种是IO。对于MMIO的访问,跟访问内存的方式一样,它从称为PCIEXBAR的基地址开始,有很大的一段空间,这个PCIEXBAR的值根据不同的平台可能不同,大致可能值有0xC0000000、0xE0000000等,关于这个值是怎么使用的后面的章节会讲到;对于...转载 2020-09-23 21:04:15 · 3585 阅读 · 0 评论 -
PCIE BAR空间理解
PCIE应用程序编程,首先就要理清PCIE BAR空间到底说的是什么。在PCIE配置空间里,0x10开始后面有6个32位的BAR寄存器,BAR寄存器中存储的数据是表示PCIE设备在PCIE地址空间中的基地址,注意这里不是表示PCIE设备内存在CPU内存中的映射地址,关于这两者的关系以及两者如何转换后面会有介绍。 1,BAR寄存器的数据格式,BAR寄存器表示的设备存储类型有memory space BAR和IO space BAR两种, 对于memory space BAR,...转载 2020-09-23 13:56:33 · 19232 阅读 · 1 评论 -
访问PCIe BAR空间
google了一圈,发现xilinx论坛的一个回答比较好, 链接如下: https://forums.xilinx.com/t5/PCI-Express/PCI-express-Base-Address-Register/td-p/685289 里面讲了如何访问BAR指定的mem空间。 下面对BAR空间以及配置空间的访问做一个系...转载 2020-09-23 13:47:09 · 1855 阅读 · 1 评论 -
PCIe扫盲——基于WinDriver快速开发PCIe驱动简明教程
转载地址:http://blog.chinaaet.com/justlxy/p/5100064256本文将简要介绍如何使用Jungo公司的WinDriver工具快速开发PCI Express设备驱动,以及相关注意事项。本文所使用的的测试平台信息如下: ※操作系统:Win7 SP1 64bit ※驱动开发工具:WinDriver12.1 ※应用程序开发工具:MSVS20...转载 2019-07-09 09:10:50 · 7245 阅读 · 1 评论 -
PCIe扫盲——物理层电气部分基础(一)
转载地址:http://blog.chinaaet.com/justlxy/p/5100053543之所以把物理层电气部分的文章放在链路初始化与训练文章的后面,是因为这一部分涉及到一些相关的概念,如Beacon Signal、LTSSM等等。前面已经多次提及,由于本次连载的文章主要是基于Gen2的,所以关于Gen3的相关内容只会提及,但是并不会深入的介绍,如果有兴趣的可以自行阅读Gen3的...转载 2019-07-04 09:26:27 · 4307 阅读 · 0 评论 -
PCIe扫盲——链路初始化与训练基础(三)之LTSSM
转载地址:http://blog.chinaaet.com/justlxy/p/5100053533这一篇文章来简单地介绍一下链路训练状态机(Link Training and Status State Machine,LTSSM),并简要地介绍各个状态的作用和实现机制。LTSSM有11个状态(其中又有多个子状态),分别是Detect、Polling、Configuration、Recov...转载 2019-07-04 09:25:31 · 6648 阅读 · 0 评论 -
PCIe扫盲——链路初始化与训练基础(二)
转载地址:http://blog.chinaaet.com/justlxy/p/5100053532前面的文章中提到过,Ordered Sets分别有以下几种:TS1 and TS2 Ordered Set (TS1OS/TS2OS)、Electrical Idle Ordered Set (EIOS)、FTS Ordered Set (FTSOS)、SKP Ordered Set (SOS)...转载 2019-07-04 09:24:25 · 3931 阅读 · 0 评论 -
PCIe扫盲——链路初始化与训练基础(一)
转载地址:http://blog.chinaaet.com/justlxy/p/5100053531PCIe总线中的链路初始化与训练(Link Initialization & Training)是一种完全由硬件实现的功能,处于PCIe体系结构中的物理层。整个过程由链路训练状态机(Link Training and Status State Machine,LTSSM)自动完成,也就说...转载 2019-07-04 09:23:05 · 8726 阅读 · 0 评论 -
PCIe扫盲——物理层逻辑部分基础(三)
转载地址:http://blog.chinaaet.com/justlxy/p/5100053478这一篇文章来继续聊一聊接收端物理层逻辑子层的实现细节。回顾一下之前的那张图片:其中的一个Lane的具体逻辑如下图所示:其中,Rx Clock Recovery从输入的串行数据流中提取出Rx Clock。当Rx Clock稳定在Tx Clock的频率上(Rx Clock locke...转载 2019-07-04 09:22:00 · 3442 阅读 · 0 评论 -
PCIe扫盲——物理层逻辑部分基础(二)
转载地址:http://blog.chinaaet.com/justlxy/p/5100053477上一篇文章中提到了Mux会对来自数据链路层的数据(TLP&DLLP)插入一些控制字符,如下图所示。当然,这些控制字符只用于物理层之间的传输,接收端的设备的物理层接收到这些数据后,会将这些控制字符去除,在往上传到其数据链路层。当然,除了STP、SDP和END之外,还有一些其他的控制...转载 2019-07-04 09:21:04 · 2988 阅读 · 0 评论 -
PCIe扫盲——物理层逻辑部分基础(一)
转载地址:http://blog.chinaaet.com/justlxy/p/5100053476首先,回顾一下,之前看了很多遍的PCIe的Layer结构图:PCIe中的物理层主要完成编解码(8b/10b for Gen1&Gen2,128b/130b for Gen3 and later)、扰码与解扰码、串并转换、差分发送与接收、链路训练等功能。其中链路训练主要通过物理层包...转载 2019-07-04 09:20:02 · 4317 阅读 · 0 评论 -
PCIe扫盲——Ack/Nak 机制详解(二)
转载地址:http://blog.chinaaet.com/justlxy/p/5100053475这一篇文章来简单地分析几个Ack/Nak机制的例子。Example 1. Example of AckStep1 设备A准备依次向设备B发送5个TLP,其对应的序列号分别为3,4,5,6,7;Step2 设备B成功的接收到了TLP3,并将NEXT_RCV_SEQ从3加...转载 2019-07-02 09:58:00 · 1964 阅读 · 0 评论 -
PCIe扫盲——Ack/Nak 机制详解(一)
转载地址:http://blog.chinaaet.com/justlxy/p/5100053468前面在数据链路层入门的文章中简单地提到过Ack/Nak机制的原理和作用,接下来的两篇文章中将对Ack/Nak机制进行详细地介绍。Ack/Nak是一种由硬件实现的,完全自动的机制,目的是保证TLP有效可靠地传输。Ack DLLP用于确认TLP被成功接收,Nak DLLP则用于表明TLP传输中遇...转载 2019-07-02 09:57:02 · 6707 阅读 · 0 评论 -
PCIe扫盲——DLLP(数据链路层包)详解
转载地址:http://blog.chinaaet.com/justlxy/p/5100053467首先说明一下,在本次连载的博文中,DLLP一般指的是由发送端的数据链路层发送,接收端的数据链路层接收的数据包,其和事务层(Transaction Layer)一般没有什么关系。本文将要介绍的DLLP指的正是这样的数据包,其一般用于Ack/Nak机制、功耗管理、Flow Control(流量控制)...转载 2019-07-02 09:55:53 · 3644 阅读 · 0 评论 -
PCIe扫盲——物理层电气部分基础(二)之De-emphasis
转载地址:http://blog.chinaaet.com/justlxy/p/5100053544这一篇文章中,我们主要来聊一聊PCIe中的信号补偿技术(Signal Compensation)——De-emphasis。需要注意的是,Gen1&Gen2与Gen3的De-emphasis实现机制差别较大,而本文只介绍Gen1&Gen2相关内容。如需了解Gen3的相关内容,可自...转载 2019-07-04 09:42:39 · 4096 阅读 · 0 评论 -
PCIe扫盲——Lattice ECP3/ECP5 SerDes简介
转载地址:http://blog.chinaaet.com/justlxy/p/5100053990FPGA发展到今天,SerDes (Serializer - Deserializer) 基本上是标配了。从PCI到PCI Express,从ATA到SATA,从并行ADC接口到JESD204,从RIO到Serial RIO,……等等,都是在借助SerDes来提高性能。SerDes是非常复杂的数...转载 2019-07-04 09:43:52 · 5122 阅读 · 1 评论 -
PCIe扫盲——中断机制介绍(MSI)
转载地址:http://blog.chinaaet.com/justlxy/p/5100057842前面的文章中介绍过,MSI本质上是一种Memory Write,和PCIe总线中的Message概念半毛钱关系都没有。并且,MSI的Data Payload也是固定的,始终为1DW。由于MSI也是从PCI总线继承而来的,因此MSI相关的寄存器也存在于配置空间中的PCI兼容部分(前256个字节...转载 2019-07-05 09:54:42 · 11681 阅读 · 4 评论 -
PCIe扫盲——中断机制介绍(INTx)
转载地址:http://blog.chinaaet.com/justlxy/p/5100057841一个简单的PCI总线INTx中断实现流程,如下图所示。1. 首先,PCI设备通过INTx边带信号产生中断请求,经过中断控制器(Interrupt Controller,PIC)后,转换为INTR信号,并直接发送至CPU;2. CPU收到INTR信号置位后,意识到了中断请求...转载 2019-07-05 09:53:44 · 5434 阅读 · 0 评论 -
PCIe扫盲——两种中断传递方式
转载地址:http://blog.chinaaet.com/justlxy/p/5100057840为了能够让一些优先级高的事务得到优先处理,PCI总线支持外设中断用以提高总线性能。PCIe总线继承了PCI总线的所有中断特性(包括INTx和MSI/MSI-X),以兼容早期的一些PCI应用层软件。本次连载的文章只是简单的介绍PCIe中断的一些基本概念和特性,如需深入了解PCI/PCIe总线的中断...转载 2019-07-05 09:52:33 · 4453 阅读 · 0 评论 -
PCIe扫盲——高级错误报告AER(二)
转载地址:http://blog.chinaaet.com/justlxy/p/5100057839这一篇文章讲一讲,高级错误报告(Advanced Error Reporting,AER)关于可校正和不可校正错误的相关寄存器,以及Root如何处理来自其他PCIe设备的错误消息等内容。Ø 高级可校正错误处理(Advanced Correctable Error Handling)o...转载 2019-07-05 09:51:38 · 3451 阅读 · 2 评论