【PCIe】TLP结构与配置空间

news2024/11/19 20:15:29

在这里插入图片描述

🔥博客主页:PannLZ

文章目录

      • PCIe TLP结构
      • PCIe配置空间和地址空间


PCIe TLP结构

在这里插入图片描述

TLP 主要由3个部分组成: Header 、 数据(可选,取决于具体的TLP 类 型 ) 和 ECRC (End to End CRC, 可选)。TLP 都始于发送端的事务层,终于接收端的事务层。

每个 TLP 都有一个 Header 。 事务层根据上层请求内容,生成 TLP Header Header 包括 发送者的相关信息、目标地址(该 TLP 要发给谁)、TLP 类型(诸如前面提到的内存读、内 存写)、数据长度(如果有数据的话)等。

ECRC 域为之前的 Header 和数据(如果有的话)生成一个CRC, 在接收端根据收到的 TLP 重新生成 Header 和数据(如果有的话)的CRC, 与收到的 CRC 比较, 一样则说明数据 在传输过程中没有出错,否则就有错。

TLP Header的公共部分各项内容:

  • Fmt : Format, 表明该 TLP是否带有数据,Header 是 3 DW 还是4 DW。
  • Type : TLP 类型,包括内存读、内存写、配置读、配置写、消息和响应等。 口 R : Reserved, 等于0。
  • TC: Traffic Class,TLP也分三六九等,优先级高的先得到服务。TC : 3 bit 说明可以 分为0~7这8个等级,TC 默认是0,数字越大,优先级越高。
  • Attr : Attribute, 属性,前后共三个位。
  • TH : TLP Processing Hints(处理提示)。
  • TD : TLP Digest,之前说 ECRC可选,如果这位被设置,则说明该 TLP包含 ECRC, 接收端应该做 CRC校验。
  • EP: “有毒”的数据,应远离。
  • AT : Address Type,地址种类。
  • 长度: Payload 数据长度,10位,最大为1024,单位为DW, 所以 TLP最大数据长 度是4 KB。该长度总是为DW 的整数倍,如果TLP 的数据不是 DW的整数倍(不是 4 B 的整数倍),则需要用到 Last DW BE和 1st DW BE这两个域。

TLP 格式和类型域编码:

TLPFm t域Type域说 明
Memory Read Request(内存读请求)000=3 DW,不带数据 001=4 DW,不带数据00000内存读不带数据,其Header大小为 3 D W 或 4 D W
Memory Write Request(内存写请求)010=3 DW,带数据 011=4 DW,带数据00000内存写带数据,其Header大小为 3 D W 或 4 D W
Configuration Type 0 Read Request (Type 0配置读请求)000=3 DW,不带数据0.0100读终端的配置,不带数据,Header 总是为3 DW
Configuration Type 0 Write Request (Type 0配置写请求)010=3 DW,带数据00100写终端的配置,带数据,Header总 是为3 DW
Configuration Type 1 Read Request (Type 1配置读请求)000=3 DW,不带数据00101读交换机的配置,不带数据,Header 总是为3 DW
Configuration Type 1 Write Request (Type 1配置写请求)010=3 DW,带数据00101写交换机的配置,带数据,Header 总是为3 DW
Message Request(消息请求)001=4 DW,不带数据1 0rrr消息的Header总是为4 DW
Message Request with Data(带数据 的消息请求)011=4 DW,带数据1 0rrr消息的Header总是为4 DW
Completion(响应)000=3 DW,不带数据01010响应的Header总是为3 DW
Completion with Data(带数据的晌应)010=3 DW,带数据01010响应的Header总是为3 DW

PCIe配置空间和地址空间

每个 PCIe 设备都有这样一段空间:主机软件可以通过读取它获得该设备的一些信息 也可以通过它来配置该设备。这段空间被称为PCIe 的配置空间。

PCI 或者 PCI-X 时代就有配置空间的概念,当时整个配置空间就是一系列寄存器的集合,由两部分组成:64 B的 Header 和192 B的 Capability(能力)数据结构。进入PCIe时代,PCIe能耐更大,192 B不足以罗列它的绝活。为了保持后向兼容,又 不把绝活落下,把整个配置空间由256 B 扩展成4 KB, 前面256 B 保持不 变。

配置空间的Header中很重要的是BAR(Base Address Register, 基址寄存器)。终端配置 (Type 0) 最多有6个BAR, 交换机 (Type 1) 只有2个。

CPU 如果想访问某个设备的空间,让RC 去办。例如:如果CPU 想读 PCIe设备的数据,先让RC 通过TLP 把数据从PCle 设备读到主机内存,然后CPU 从主机 内存读数据;如果CPU 要往PCle 设备写数据,则先把数据在内存中准备好,然后让RC 通 过TLP 将其写人PCle 设备。

具体实现就是上电的时候,系统把 PCle 设备开放的空间(系统软件可见)映射到内存 地址空间,CPU 要访问该PCIe 设备空间,只 需访问对应的内存地址空间。RC 检查该内 存地址,如果发现该内存地址是某个PCle 设 备空间的映射,就会触发其产生TLP 去访问 对应的PCle 设备,从而实现读或者写PCIe 设备.

设备出厂时, 这些空间的大小和属性都写在配置BAR 寄存器里面。上电后,系统软件读取这些BAR, 并 分配对应的系统内存地址空间,然后把相应的内存基地址写回BAR 。

(BAR 的地址其实是 PCI 总线域的地址, CPU 访问的是内存地址。CPU 访问PCle 设备时,需要把总线域地址转 换成内存地址。)

上电时,系统软件首先会读取 PCle设备的BAR 0, 得到数据,然后系统软 件往该BAR 0中写入全1,BAR 寄存器有些位是只读的,是PCIe设备在出厂前就固定好的,写全1进去,如果值保持不变,就说明这些位是厂家固化好的。这些固化好的位提供了这块内部空间的一些信息。

XXXX XXXXXXXX XXXX XXXX000000000000

低4位用于表明该存储空间的一些属性,比 如是/O 映射还是内存映射

一个PCIe 设备可能有若干个内部空间需要开放 出来,系统软件依次读取 BAR 1 、BAR 2 , 直到BAR 5, 完成所有内部空间的映射。

一个PCIe 设备 可能具有多个功能,比如硬盘功能、网卡功能 等,每个功能对应一个配置空间。

在整个 PCle 系统中,只要知道了总线序号、设备序号和功能序号,就能找到唯 一的功能。寻址基本单元是功能,它的ID 由总线、设备、功能(BDF) 组成。

这节详细的推荐看书《深入浅出SSD:固态存储核心技术、原理与实战(第2版)》。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1500674.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

网络仿真(二)

时延和丢包率 网络中的节点之间时延(延迟)和丢包率是衡量网络性能的两个关键指标。 时延(延迟):时延是指数据在网络中从一个节点传输到另一个节点所需的时间。这包括处理时延(数据在节点处理的时间&#x…

ENVI必须会教程—Sentinel-2数据的读取与波段组合加载

实验2:读取Sentinel-2影像 目的:了解Sentinel-2影像读取方法,熟悉各波段及组合 过程: ①读取数据:在标题栏选择“文件”选项,点击“打开为”,选择“光学传感器”,由于哨兵2号数据…

Java后端八股笔记

Java后端八股笔记 Redis八股 上两种都有可能导致脏数据 所以使用两次删除缓存的技术,延时是因为数据库有主从问题需要更新,无法达到完全的强一致性,只能达到控制一致性。 一般放入缓存中的数据都是读多写少的数据 业务逻辑代码&#x1f44…

#stm32外设总结电容触摸按键

BS8116A-3 IRQ 外部中断请求 NMOS输出内部上拉 SCL SDA IIC通信接口 VDD 供电电压2.2-5.5V Ct电容: 0~25 pF 电容越大灵敏度越低 1、 软件使用流程 初始化 将IIC的两个引脚初始化为复用开漏模式 按键引脚设置上拉输入 下降沿触发外部中断 void KEY_Init(void) {//uint8_t …

音视频学习笔记——实现PCM和H264合成MP4功能

本文主要记录实现PCM和H264合成MP4功能的整个框架&#xff0c;各个模块中FFmpeg的api使用流程&#xff0c;便于后续学习和复盘。 本专栏知识点是通过<零声教育>的音视频流媒体高级开发课程进行系统学习&#xff0c;梳理总结后写下文章&#xff0c;对音视频相关内容感兴趣…

2024最新算法:冠豪猪优化算法(Crested Porcupine Optimizer,CPO)求解23个基准函数(提供MATLAB代码)

一、冠豪猪优化算法 冠豪猪优化算法(Crested Porcupine Optimizer&#xff0c;CPO)由Mohamed Abdel-Basset等人于2024年提出&#xff0c;该算法模拟冠豪猪的四种不同保护机制&#xff1a;视觉、听觉、气味和物理攻击。第一和第二防御技术&#xff08;视觉和听觉&#xff09;反…

安装nexus + 部署私有maven仓库

安装nexus 部署私有maven仓库 文章目录 安装nexus 部署私有maven仓库1.下载2.解压3.修改配置文件4.启动5.访问6.查看默认密码7.创建私库8.修改代码配置文件9.在maven 的setting.xml中配置私库的账号密码10.运行manve 【deploy】命令测试11.maven项目引用私库12. 重新加载mave…

C/C++内存管理【C++】

目录 一、 C/C内存分布1. C内存管理方式(1) new和delete操作内置类型(2) new和delete操作自定义类型 二、 operator new与operator delete函数三、 malloc/free和new/delete的区别四、内存泄漏 一、 C/C内存分布 C/C程序的内存布局会因编译器和操作系统而有所不同&#xff0c;但…

红帆ioffice-udfGetDocStep.asmx存在SQL注入漏洞

产品简介 红帆iOffice.net从最早满足医院行政办公需求&#xff08;传统OA&#xff09;&#xff0c;到目前融合了卫生主管部门的管理规范和众多行业特色应用&#xff0c;是目前唯一定位于解决医院综合业务管理的软件&#xff0c;是最符合医院行业特点的医院综合业务管理平台&am…

上门服务小程序|上门服务系统成品功能包含哪些?

随着移动互联网的快速发展&#xff0c;上门服务小程序成为了一种创新的家政服务模式。它不仅为用户带来了极大的便利&#xff0c;还能在提高服务效率和质量方面发挥作用。通过上门服务小程序&#xff0c;用户可以轻松预约按摩或理疗服务&#xff0c;无需繁琐操作&#xff0c;只…

9、JavaWeb-文件上传-配置文件

P146 案例-文件上传-简介 文件上传&#xff0c;将本地图片、视频等文件上传到服务器&#xff0c;供其他用户浏览下载的过程。 文件上传前端页面三要素&#xff1a; 如果前端表单的编码格式选择的默认编码方式x-www.form-urlencoded&#xff0c;则提交的文件仅仅是文件名&…

【Linux进阶之路】网络 —— “?“ (下)

文章目录 前言一、概念铺垫1.TCP2.全双工 二、网络版本计算器1. 原理简要2. 实现框架&&代码2.1 封装socket2.2 客户端与服务端2.3 封装与解包2.4 请求与响应2.5 对数据进行处理2.6 主程序逻辑 3.Json的简单使用 总结尾序 前言 在上文我们学习使用套接字的相关接口进行了…

Python实现广义泊松模型(GeneralizedPoisson算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 广义泊松模型&#xff08;Generalized Poisson Model&#xff09;是一种统计学中用于处理数据的分析方…

MATLAB环境下滚动轴承复合故障仿真信号及时频谱

滚动轴承是一种广泛应用于各类旋转机械的通用基础部件&#xff0c;其运行状态的正常与否往往会对于整台机器的寿命、可靠性和精度等性能产生直接的影响。据统计&#xff0c;旋转机械中30%的故障和大型异步电机中44%的故障是由故障轴承引起的&#xff0c;而位于轴承内圈和外圈的…

浏览器的缓存导致的问题

同一个网站 频繁回退进入&#xff0c;音频播放器失效等问题问题 1.打开浏览器-更多工具-任务管理器 2.可以看到缓存页面进程 3.频繁回退进入 就会出现问题 解决方法&#xff1a; try {var bfWorker new Worker(window.URL.createObjectURL(new Blob([1])));window.addEvent…

智慧城市如何助力疫情防控:科技赋能城市安全

目录 一、引言 二、智慧城市与疫情防控的紧密结合 三、智慧城市在疫情防控中的具体应用 1、智能监测与预警系统 2、智慧医疗与健康管理 3、智能交通与物流管理 4、智慧社区与基层防控 四、科技赋能城市安全的未来展望 五、结论 一、引言 近年来&#xff0c;全球范围内…

Python 匿名函数lambda()详解

一、匿名函数定义 lambda 函数是一个匿名函数&#xff08;即&#xff0c;没有名称定义&#xff09;&#xff0c;它可以接受任意数量的参数&#xff0c;但与普通函数不同&#xff0c;它只计算并返回一个表达式 二、匿名函数语法 lambda arguments&#xff08;参数&#xff09;: …

Qt初识 - 编写Hello World的两种方式 | 对象树

目录 一、通过图形化方式&#xff0c;在界面上创建出一个控件 二、通过代码方式&#xff0c;创建Hello World 三、Qt 内存泄漏问题 (一) 对象树 一、通过图形化方式&#xff0c;在界面上创建出一个控件 创建项目后&#xff0c;打开双击forms文件夹中的ui文件&#xff0c;可…

RFID-科技的“隐秘耳语者”

RFID-科技的“隐秘耳语者” 想象一下&#xff0c;你身处一个光线昏暗的环境中&#xff0c;周围的一切都被厚厚的阴影笼罩。这时&#xff0c;你需要识别并获取一个物体的信息&#xff0c;你会选择怎么做&#xff1f;是点亮灯光&#xff0c;用肉眼仔细观察&#xff0c;还是打开扫…

JetPack入门

先导入依赖 implementation("androidx.lifecycle:lifecycle-extensions:2.2.0") 1.使用LifeCycle解耦页面与组件 Activity package com.tiger.lifecycle;import android.annotation.SuppressLint; import android.os.Bundle; import android.os.SystemClock; impo…