PCIe协议之-TLP Header详解(二)

✨前言:

在PCIe中,存在几种不同类型的请求,主要包括IO(Request)请求、存储器(Request)请求和配置(Request)请求。这些请求类型允许CPU与连接在PCIe总线上的设备进行通信和控制。

🌟1. IO(Request)请求

定义与作用: IO请求,即输入输出请求,是一种使CPU能够读写连接在PCIe总线上设备的特定IO端口的操作。这种请求类型常用于较旧的或简单的外围设备,如早期的声卡、网卡等,它们使用设定的IO空间进行数据交换。
实现方式: 当发起IO请求时,CPU通过总线发送一个包含端口地址及操作类型(读/写)的信号给目标设备。设备响应这一请求,执行相应的读或写操作,并将结果返回给CPU。

🌟2. 存储器(Request)请求

定义与作用: 存储器请求,即内存访问请求,用于直接在CPU与PCIe设备之间传输数据。它允许PCIe设备读写系统内存,支持更高效、更直接的数据传输方式,广泛应用于需要快速数据交换的设备,例如现代显卡、SSD等。
实现方式: 发起内存请求时,会指定系统内存的地址和需要传输的数据。PCIe支持的DMA(直接内存访问)允许外设直接与系统内存通信,不必占用CPU资源,从而实现高效数据处理。

🌟3. 配置(Request)请求

定义与作用: 配置请求用于读取或设置PCIe设备的配置空间,这是一块预留的内存区域,包含了设备的重要信息和配置参数,如设备ID、中断设置、支持的功能等。通过配置请求,系统可以识别和配置连接的设备。
实现方式: 在设备初始化或系统启动时,BIOS或操作系统会发起配置请求来探测和配置所有PCIe设备。配置访问通常通过特定的地址和数据路径进行,CPU可通过这些路径读写PCIe设备的配置寄存器。

✨IO Request

IO Request的TLP Header的格式如下图所示:
IO请求用来进行输入/输出操作,其TLP头部包含以下字段:

格式(Fmt): 指示TLP的格式,IO请求通常是3位长,对于IO Read请求,格式为"001",IO Write请求,格式为"000"。
类型(Type): 指示TLP的具体类型,对于IO操作,通常是5位长,IO Read请求的类型为"00001",IO Write请求的类型为"00010"。
长度(Length): 表明数据传输的DWORD数量,对于IO操作,这通常是较小的数量。
请求者ID(Requester ID): 表明发起请求的设备。
总线/设备/函数号(Bus/Device/Function Number): 指定请求目标的PCI Express设备地址。
标签(Tag): 用于将请求和响应匹配起来,以区分不同的事务。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

✨Memory Request

Memory Request的TLP Header的格式如下图所示:
内存请求用来访问系统内存,TLP头部的字段和IO请求类似,但具有不同的值:

格式(Fmt): 内存读取为"000"或"010",内存写入为"001"或"011",长包头格式包含4个额外的字节用于64位地址。
类型(Type): 对于内存读写操作,类型分别为"00000"(Memory Read)和"00001"(Memory Write)。
长度(Length): 传输的数据长度。
请求者ID(Requester ID): 发起请求的设备。
标签(Tag): 同IO请求。
首次读/写(First BE)/最后读/写(Last BE): 分别表示数据开始和结束的字节使能位。
64位地址(Address): 内存地址,可能是32位或64位,取决于格式字段。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注:TLP Prefix、ID Based Ordering(IDO)和TLP Processing Hints(TH)均为PCIe Spec V2.1提出的。

✨Configuration Request

Configuration Request的TLP Header的格式如下图所示:
格式(Fmt): 配置读取为"010",配置写入为"011"。
类型(Type): 对于配置读写操作,类型分别为"10100"(Configuration Read Type 0)、“10101”(Configuration Read Type 1)或"11000"(Configuration Write Type 0)、“11001”(Configuration Write Type 1)。
长度(Length): 配置访问固定长度为"1",因为配置空间是采用4字节为单位进行访问。
请求者ID(Requester ID): 发起请求的设备。
拓展注册头(Extended Register Number): 表示访问的配置空间在256字节之上的偏移。
配置注册头(Register Number): 访问配置空间的偏移量。
设备号(Device Number): 指示配置空间需访问的PCI设备编号。
功能号(Function Number): 指示配置空间需访问的PCI功能编号。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

Android ashmem 原理分析

源码基于:Andoird U Kernel-5.10 0. 简介 ashmem 称为匿名共享内存(Anonymous Shared Memory),它以驱动程序的形式实现在内核空间中。它有两个特点: 能否辅助内存管理系统来有效地管理不再使用的内存块(pin / unpin); 通过Bind…

光伏电站设计需要哪些气象资源?

光伏电站的发电量和气象因素密切相关,因为光伏发电是将太阳能转化为电能,气象因素会影响到光照强度,本文将就光伏发电受哪些气象因素影响进行探讨。 一、光照 光伏电站的发电量直接受到光照的影响,因此,光照资源是光…

Android Don‘t Press With Parent Button按钮效果代码实现

1、需求效果 在做书签界面的时候,点击listview时候,删除按钮不要反选(图一);点击删除按钮删除按钮要反选(图二 ),效果图如下所示: 2、代码实现 2.1、java package com.eebbk.synstudy.bookmark;import android.co…

简述下JVM的组成和工作原理

JVM(Java Virtual Machine)是Java运行的核心环境,它负责执行Java程序并管理相关的系统资源。以下是JVM的组成和工作原理的详细解释: JVM的组成 JVM主要由以下几个部分组成: 类加载器(Class Loader&#…

书籍阅读-《Kubernetes快速入门》-读后感

建立和管理Kubernetes集群是一个涉及多个组件和步骤的过程。如何建立一个基本的Kubernetes集群,以及如何进行基本管理: 1. 准备基础设施 首先,您需要准备硬件或云资源。可以选择在本地使用物理或虚拟机,或者在云平台&#xff08…

Echarts使用

介绍 ECharts 是一个强大的,基于 JavaScript 的开源数据可视化库,适用于创建多种类型的图表,满足广泛的业务需求。它由百度团队开发并维护,后来捐赠给了 Apache 软件基金会,并已在2021年从孵化项目毕业,成…

Java 插入数据到Elasticsearch中进行各种类型文档的内容检索

源码下载&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1D3yszkTzjwQz0vFRozQl2g?pwdz6kb 提取码&#xff1a;z6kb 实现思路 1.搭建一个新的springboot项目&#xff0c;不会的请看我这篇博客&#xff1a;springboot项目搭建 2.添加maven依赖 <dependency><…

牛客周赛 Round 42(C:小红的素数合并)

题目链接: C-小红的素数合并_牛客周赛 Round 42 (nowcoder.com) 题目简述: 给你n个素数&#xff0c;让你每两个素数进行合并成一个(这两个素数相乘后的值)&#xff0c;必须要合并到最后不能再去合并&#xff0c;问最后合并后的数组的最大值和最小的差最小是多少呢? 分析: …

计算机毕业设计源码 | 基于SpringBoot的线上教学系统 答疑辅导网站(附源码)

1&#xff0c;项目介绍 1.1 项目背景 网络问答平台经历了多年的发展&#xff0c;目前处于一个日益成熟的状态。最早的网络问答平台是知乎&#xff0c;知乎的创立者认为有许多信息在互联网上没有被记录和共享&#xff0c;于是他们决定创造一个平台&#xff0c;能够让更多人可以…

【翻译】Processing系列|(四)用 Android Studio 从 0 到 1 进行 Processing 安卓开发

原文链接&#xff1a;Processing for Android Developing with Android Studio 朋友跟我说官方教程里也写了该怎么用 Android Studio 开发&#xff0c;并且亲测可行。这种方式确实能开发出结构更加清晰、额外组件更加少的程序&#xff0c;比上一篇文章中直接克隆 Processing-An…

QtMsBuild并行编译

记录一个QtMsBuild并行编译的报错问题&#xff0c;需求是支持同时进行多个vsqt的工程进行编译&#xff0c;使用的是msbuild.exe工具编译sln工程&#xff0c;同时编译时&#xff0c;有的工程会报Qt::BuildLock timeout&#xff0c;主要原因是Qt的编译脚本为了防止出现资源冲突&a…

C# WinForm —— 21 RichTextBox 使用

1. 加载文件到控件中 加载文件时&#xff0c;要设置文件的路径和类型RichTextBoxStreamType&#xff0c;文件类型包含&#xff1a; RichText 0&#xff1a;富文本格式&#xff08;RTF&#xff09;流PlainText 1&#xff1a;纯文本流对象链接和嵌入&#xff08;OLE&#xff…

基于RK3568的鸿蒙通行一体机方案项目

鸿蒙通行一体机方案以鸿蒙版AIoT-3568X人工智能主板为核心平台&#xff0c;搭载OpenHarmony操作系统&#xff0c;使用自研算法和国产芯片&#xff0c;可管可控&#xff0c;并提供身份识别以及其他外设配件生态链支持。 01 项目概述 项目使用场景 鸿蒙版通行一体机方案凭借自主…

win11此电脑右键“属性“选项,无法打开怎么解决?

方法如下&#xff1a; 1. 按【 Win X 】组合键&#xff0c;或【 右键】点击任务栏上的【 Windows开始菜单】&#xff0c;在打开的隐藏菜单项中&#xff0c;选择【 终端管理员】&#xff1b; 2. 用户账户控制窗口&#xff0c;你要允许此应用对你的设备进行更改吗&#xff1f;点…

深入 Go 语言:使用 math/rand 包实现高效随机数生成

深入 Go 语言&#xff1a;使用 math/rand 包实现高效随机数生成 介绍math/rand 包的核心功能设计哲学应用场景 基础使用方法初始化和种子设置设置种子创建私有随机数生成器 基础函数详解生成整数生成特定范围的整数生成浮点数随机置乱数组 进阶技巧随机数的统计属性生成正态分布…

分布式系统的一致性与共识算法(一)

前言 etcd是线性一致性读&#xff0c;而zk却是顺序一致性读&#xff0c;再加上各种共识、强弱一致的名词&#xff0c;看到欸度时候总会混淆&#xff0c;这里会给出一些例子来帮助理解。 什么是一致性&#xff1f; 在谈到一致性这个词时&#xff0c;你会想到CAP理论的consist…

高级炫酷的个人主页or引导页

高级炫酷个人主页 效果图部分代码领取源码下期更新预报 效果图 部分代码 <!DOCTYPE html><html lang"zh-CN"><head><meta charset"utf-8"><meta content"yes" name"apple-mobile-web-app-capable"> &l…

shiro_attack工具-shiro反序列化漏洞的快速检测和利用

shiro反序列化漏洞的快速检测和利用 前言 今天分享一个好用的渗透测试工具&#xff0c;主要是针对shiro框架漏洞的&#xff0c;它可以自动的爆破shiro密钥&#xff0c;同时可以写入大马&#xff0c;本人实战中觉得很好用&#xff01;&#xff01;&#xff01; 工具名称 shi…

2024年网络安全威胁

随着2024年的到来&#xff0c;数字世界的版图正在以前所未有的速度扩张&#xff0c;引领我们进入一个技术革新的新时代。然而&#xff0c;这飞速的发展同时也催生了一系列错综复杂的网络安全挑战。在这个数字平台与我们生活日益紧密交织的时代&#xff0c;深入了解这些新兴的威…

相约蓉城 | 全视通邀您参加 CHCC 2024第25届全国医院建设大会

第25届全国医院建设大会暨国际医院建设、装备及管理展览会&#xff08;CHCC2024&#xff09;&#xff0c;将于5月17日-19日在成都中国西部国际博览城盛大启幕。 全视通将携智慧病房、智慧门诊、智慧手术室、智慧后勤、智慧康养等产品方案亮相11号厅K05展位&#xff0c;期待与您…