NXP i.MX8系列平台开发讲解 - 3.9 Linux PCIe协议相关介绍(二)

news2025/1/14 4:10:55

目录

1. PCIe 传输层协议

2. TLP介绍

2.1 TLP包格式

2.2 TLP包的种类

2.3 TLP 包传输例子

2.4 TLP 路由规则


根据上一章的知识,对于PCIe的发展和基础知识有了大概了解,本章节将会讲解PCIe的一些工作原理,使用的协议,通信交互相关的内容,再下一章节将实际去查看驱动里面相关的内容。

注意:以下内容讲解版本为PCIe 6.0

1. PCIe 传输层协议

根据上一章的内容知道,逻辑分层分为事务层、数据链路层、物理层。

在它们三层的协议上具有一定的关系:

在往底层的每个操作都需要添加自己的相关头部和CRC等相关信息;

  • 事务层需要注意有的TLP包可能没有Data,在Header 中的TD为1时候,会根据Header和Data计算出ECRC.

  • 数据链路层对于发送的TLP数据都需要添加头部Sequence Number,并计算CRC放入至尾部;但对于接收来说首先检查CRC问题,如果有问题TLP包将不会上传至TLP数据,没有错的话将交给事务层处理;

  • 物理层接收到链路层数据包,在头部添加Start和End来表示开始结束;在接收到就会除去Start和End交给数据链路层;

2. TLP介绍

事务层的数据包也就是距离用户最近的那一层,这一层的数据包称为TLP:Transaction Layer Packet;

TLP

  • 事务层完成TLP的封包与解包

  • TLP有点类似TCP/IP协议中的IP包,事务层通过TLP实现路由与寻址功能

  • 功能有硬件实现

2.1 TLP包格式

TLP包数据主要分为三个部分:

TLP Prefixes: 这个部分是一个可选区域(option)

TLP Header: 头部信息

Data Payload: 数据信息

TLP Digest: 摘要数据,可选(option)

2.2 TLP包的种类

按照事务或者地址空间类型分类:

  • Mermory 内存的读写,比如对内存的正常读写操作,内存使用不用地址格式操作(32位/64位)等等

  • I/O 支持I/O空间的读写

  • Configuration 配置空间的读写

  • Messag 消息事务

对于TLP包的分类主要通过头部前面4个字节中的第一个Byte进行决定的,如图

根据Fmt不同,可以决定Header长度大小,根据表中得到以下数据:

根据Tpye不同可以分为很多中不同的类:

  • memory 读写类

  • IO 读写类

  • cfg 读写类

  • message 读写类

  • completion 类

在Header最后的10给字节表示有效的负载长度。

2.3 TLP 包传输例子

这里以读取一个内存的地址为例子:

开始从Processor开始读取内存的地址,发起Root Complex requester,经过Switch A ,Switch B,根据CPID找到了右边那个Endpoint,根据接收的MRd,将返回内存地址数据经过Switch B, Switch A 再到Root Complex ,最后到达Processor。

2.4 TLP 路由规则

TLP 的数据包需要传输,如果在一个端点到另外一个端点的话,都是需要通过中间的桥设备进行承担路由功能,桥设备根据路由规则转发数据包,每一个桥设备都会把经过的数据包解析到事务层,然后按照TLP中的地址和路由进行转发。

TLP包路由转发方式有三种:

  • Address Routing: mermory 数据的读写

  • ID Routing: 配置空间读写

  • Implicit Routing: 消息类型

Address 路由:

TLP包会包含需要访问的mermory地址或者IO地址;

对于目标的Endpoint 会检查地址是否落在自己的BAR区间地址,如果是在这个区间则处理,如果不是则拒绝。

对于访问设备需要经过桥设备路由的方式,那么桥设备将会判断地址是否在区间内,在则转发,不在则不转发;

ID 路由:

TLP会包含目标端的Bus/device/function号,判断是落在ID范围内,在则转发,不在不转发;

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

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

相关文章

ubuntu 复制文件路径

前言 我打算搞一个ubuntu右键复制文件路径的插件,但是找不到,只能平替 这个配置,可以把文件拖拽到cmd窗口,然后就直接cmd输出文件路径 配置 cd ~ vim .bashrc 在文件结尾添加 cdd () { ddirname "$1"; echo …

【C++初阶】第八站:string类的模拟实现

目录 string类的模拟实现 经典的string类问题 浅拷贝 深拷贝 写时拷贝(了解) 构造函数 string的全缺省的构造函数: string的拷贝构造函数 传统写法 现代写法 string的赋值重载函数 传统写法 现代写法 string的无参构造函数: 遍历函数 op…

ASP.NET Core 3 高级编程(第8版) 学习笔记 03

本篇介绍原书的第 18 章,为 19 章 Restful Service 编写基础代码。本章实现了如下内容: 1)使用 Entity Framework Core 操作 Sql Server 数据库 2)Entity Framework Core 数据库迁移和使用种子数据的方法 3)使用中间件…

【黑马头条】-day11热点文章实时计算-kafka-kafkaStream-Redis

文章目录 今日内容1 实时流式计算1.1 应用场景1.2 技术方案选型 2 Kafka Stream2.1 概述2.2 KafkaStream2.3 入门demo2.3.1 需求分析2.3.2 实现2.3.2.1 添加依赖2.3.2.2 创建快速启动,生成kafka流2.3.2.3 修改生产者2.3.2.4 修改消费者2.3.2.5 测试 2.4 SpringBoot集…

机器学习作业3____决策树(CART算法)

目录 一、简介 二、具体步骤 样例: 三、代码 四、结果 五、问题与解决 一、简介 CART(Classification and Regression Trees)是一种常用的决策树算法,可用于分类和回归任务。这个算法由Breiman等人于1984年提出,它…

Clion连接MySQL数据库:实现C/C++语言与MySQL交互

确保你的电脑里已经有了MySQL。 1、找到MySQL的目录 2、进入lib目录 3、复制libmysql.dll和libmysql.lib文件 4、将这俩文件粘贴到你的clion项目的cmake-build-debug目录下 如果不是在这个目录下,运行时会出以下错误报错: 进程已结束,退…

火绒安全的应用介绍

火绒安全软件是一款集成了杀毒、防御和管控功能的安全软件,旨在为用户提供全面的计算机安全保障。以下是火绒安全软件的一些详细介绍: 系统兼容性强:该软件支持多种操作系统,包括Windows 11、Windows 10、Windows 8、Windows 7、…

AI预测福彩3D第9套算法实战化测试第3弹2024年4月25日第3次测试

今天继续进行新算法的测试,今天是第3次测试。好了,废话不多说了,直接上图上结果。 2024年4月25日福彩3D预测结果 6码定位方案如下: 百位:6、4、3、7、2、8 十位:8、4、9、3、1、0 个位:7、6、9、…

Linux进程间通信 管道系列: 利用管道实现进程池(匿名和命名两个版本)

Linux进程间通信 管道系列: 利用管道实现进程池[匿名和命名两个版本] 一.匿名管道实现进程池1.池化技术2.搭架子3.代码编写1.创建子进程1.利用命令行参数传入创建几个子进程2.创建管道和子进程(封装Channel类)1.先描述2.在组织3.开始创建 2.封装MainProcess类3.控制子进程1.封装…

无限滚动分页加载与下拉刷新技术探析:原理深度解读与实战应用详述

滚动分页加载(也称为无限滚动加载、滚动分页等)是一种常见的Web和移动端应用界面设计模式,用于在用户滚动到底部时自动加载下一页内容,而无需点击传统的分页按钮。这种设计旨在提供更加流畅、连续的浏览体验,减少用户交…

人耳的七个效应

1、掩蔽效应 • 人们在安静环境中能够分辨出轻微的声音,即人耳对这个声音的听域很低,但在嘈杂的环境中轻微的声音就会被淹没掉,这时将轻微的声音增强才能听到。 • 这种在聆听时,一个声音的听阈因另一声音的出现而提高的现象&…

ThinkPad E14 Gen 4,R14 Gen 4,E15 Gen 4(21E3,21E4,21E5,21E6,21E7)原厂Win11系统恢复镜像下载

lenovo联想ThinkPad笔记本电脑原装出厂Windows11系统安装包,恢复出厂开箱状态一模一样 适用型号:ThinkPad E14 Gen 4,ThinkPad R14 Gen 4,ThinkPad E15 Gen 4 (21E3,21E4,21E5,21E6,21E7) 链接:https://pan.baidu.com/s/1QRHlg2yT_RFQ81Tg…

服务部署后出错怎么快速调试?试试JDWP协议

前言 原文链接:教你使用 JDWP 远程调试服务 在我们日常开发工作中,经常会遇到写好的代码线上出了问题,但是本地又无法复现,看着控制台输出的日志恨自己当初没有多打几条日志,然后追着日志一条一条查,不说…

安装 Nginx 的三种方式

通过 Nginx 源码安装需要提前准备的内容: GCC 编译器 Nginx 是使用 C 语言编写的程序,因此想要运行 Nginx 就需要安装一个编译工具 GCC 就是一个开源的编译器集合,用于处理各种各样的语言,其中就包含了 C 语言 使用命令 yum i…

python基础语法--列表

一、列表的概念 列表(List)是一种有序、可变、允许重复元素的数据结构。列表用于存储一组相关的元素,并且可以根据需要动态地进行增加、删除、修改和访问。以下是列表的主要特点和操作: 有序性: 列表中的元素是按照它…

工作与生活,如何找到平衡点,实现双赢?(2个简单工具答案一目了然)

前言 很多 35岁左右上有老下有小的程序员会陷入一个瓶颈期,在工作上想努力多赚钱,但是每天回到家 23 点,老婆孩子早已熟睡。好不容易周末有点休息时间,但是一个电话接一个,由于是生产问题还不得不接。 那么职场人应该如…

激活IDM下载器并配置百度网盘

前言: 最近想下载一些软件,奈何不充钱的百度网盘的速度实在太慢了,不到一个G的文件夹奈何下了一晚上,只能重新找一下idm的下载了。 但是idm的正版是需要收费的,所以有白嫖党的破解版就横空出世了。 正文&#xff1a…

【目标跟踪】ByteTrack详解与代码细节

文章目录 一、前言二、代码详解2.1、新起航迹2.2、预测2.3、匹配2.4、结果发布2.5、总结 三、流程图四、部署 一、前言 论文地址:https://arxiv.org/pdf/2110.06864.pdf git地址:https://github.com/ifzhang/ByteTrack ByteTrack 在是在 2021 年 10 月…

OpenAIGPT-4.5提前曝光?

OpenAI GPT-4.5的神秘面纱:科技界的震撼新篇章 在人工智能的世界里,每一次技术的飞跃都不仅仅是一次更新,而是对未来无限可能的探索。近日,科技巨头OpenAI似乎再次站在了这场革命的前沿,其潜在的新产品——GPT-4.5 Tur…

Https协议原理剖析【计算机网络】【三种加密方法 | CA证书 】

目录 一,fidler工具 前提知识 二,Https原理解析 1. 中间人攻击 2. 常见的加密方式 1). 对称加密 2). 非对称加密 对称加密 4). CA证书 1. 数据摘要 3. 数字签名 CA证书 理解数据签名 存在的安全疑问&am…