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

news/2024/10/20 11:34:22/

目录

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.ppmy.cn/news/1442676.html

相关文章

【 AIGC 研究最新方向(上)】面向平面、视觉、时尚设计的高可用 AIGC 研究方向总结

目前面向平面、视觉、时尚等设计领域的高可用 AIGC 方向有以下 4 种: 透明图层生成可控生成图像定制化SVG 生成 本篇(上篇)介绍 1、2,而下篇将介绍 3、4。 透明图层生成 LayerDiffuse 代表性论文:Transparent Imag…

eclipse 如何创建python文件

一、准备 1.平台要求: 电脑除了要安装eclipse软件和Python语言包之外,还需要将Python集成到eclipse软件中,网上有很多的方法,这里就不细细介绍如何集成了。 在下面界面中可以看到自己已经安装了继承插件。具体方法见步骤2&…

自動重啟Debian

要自動重啟Debian系統,你可以使用以下幾個方法: 使用crontab:編輯crontab文件,並添加以下行以設定定期重啟系統: reboot /sbin/reboot保存並退出文件。這將在系統重新啟動後運行/sbin/reboot命令,從而自動…

《HCIP-openEuler实验指导手册》1.4 Apache MPM工作模式调整

MPM介绍 二、配置步骤 查看MPM当前工作模式 方法一: httpd -M | grep mpm方法二: 浏览器访问:http://IP:端口/server-status 方法三: cat /etc/httpd/conf.modules.d/00-mpm.conf查看 LoadModule mpm_event_module modules/mo…

重庆思庄技术分享——Bug 12861117 RMAN 会话旋转

Bug 12861117 RMAN 会话旋转 现象: CPU 使用 率过高 挂起(进程旋转) RMAN-2005 / RMAN-565 / LFI-5 RMAN (Recovery Manager) 描述: 在某些情况下,如果写入日志文件时遇到磁盘已满的情况 或输入…

【设计模式】使用策略模式优化表单校验逻辑

什么是策略? 所谓策略,就是根据已知条件决定要做出怎样的行为。 举个栗子:我要实现一个表单校验功能,要求 name 不能为空且长度必须大于 2 且小于 4,age 不能为空且必须为纯数字。 这样的判断逻辑直接用 if-else 就…

wow-string-list文件说明

wow-string-list文件说明 项目地址:https://gitee.com/wow-iot/wow-iot7本文件主要功能用于字符串链表相关操作,主要涉及创建、销毁、插入、获取、分隔、格式转换; 初始化与退出: StringList_T* wow_stringlist_new(void) {return (String…

P44,45 属性预处理,执行后游戏效果回调,附录指定区域内修改变量

这节课主要是怎么对Attribute进行在进行到游戏角色前先进行处理,以及游戏效果如何回调 AuraAttributeSet.h // Fill out your copyright notice in the Description page of Project Settings.#pragma once#include "CoreMinimal.h" #include "AttributeSet.h&…