PCI设备和PCI桥的配置空间(header_type0、header_type1)和配置命令(type0、type1)详解

news2024/11/15 15:32:55

1、PCI典型拓扑

在这里插入图片描述

2、type0和type1

在这里插入图片描述

名称含义
Bus Number设备所在总线号
Device Number设备分配到的设备号
Function Number功能号,有的设备是支持多个功能的,最多8种功能
Register Number要访问的寄存器地址

(1)type0和type1的区别:AD[1:0]是00代表是type0,AD[1:0]是01代表是type1;
(2)type0功能:用于配置挂载在本地PCI总线上的设备;
(3)type1功能:用于将配置信息发送给其他PCI总线段的设备;
总结:type0是配置直接挂载在PCI总线上的设备,type1是用于配置通过PCI桥挂载的设备;

3、为什么type1需要指定Bus Number、Device Number ?

3.1、PCI根桥配置直接挂载的PCI设备

(1)type0只使用了AD[10:0],AD[31:11]是空闲的,可以用于选中PCI设备,也就是和PCI设备的IDSEL引脚相连;
(2)假设AD[31:11]每个引脚都连接一个PCI设备的IDSEL引脚,根桥可以依次拉高每个引脚,每次选中一个设备;
(3)选中一个PCI设备后,在AD线上发送type0配置信息,只有被选中的PCI设备才会去响应type0;
(4)因为通过IDSEL引脚去唯一确定了哪个PCI设备会响应,所以不需要再通过Bus Number和Device Number去确定响应设备;

3.2、PCI根桥配置通过PCI桥挂载的PCI设备

(1)首先回顾,PCI根桥选中直接挂载的PCI设备,是通过与PCI设备IDSEL引脚直连的AD[31:11],但是通过PCI桥挂载的PCI设备,PCI根桥并没有和间接挂载的PCI设备的IDSEL引脚相连的AD线,所以根桥是不能通过直接操作PCI设备的IDSEL引脚来选择PCI设备;
(2)PCI桥设备自己会去扫描挂载在PCI总线上的设备,用type0配置信息,就和上面 3.1的过程是一样的,扫描完会给每个PCI设备分配一个PCI设备号;
(3)PCI根桥会给PCI桥分配PCI总线号;
(4)当根桥发出type1配置信息,直接挂载的PCI设备会忽略掉,PCI桥设备会比较总线号,如果总线号是自己能处理的就会转发;
(5)当配置信息转发到type1中指定的总线号所在的PCI段时,PCI桥会通过Device Number去选择设备,也是通过IDSEL引脚;
(6)总线号对应的PCI桥会把type1转换成type0发到PCI总线上;
补充:因为pci桥已经通过解析PCI总线号和Device Number来选中PCI设备的IDSEL引脚,所以后续传输就可以直接使用type0;

3.3、PCI桥对type1的处理

在这里插入图片描述

4、两种配置空间

4.1、配置空间的布局

在这里插入图片描述

(1)一个PCI设备最多支持8种功能,每种功能都有256字节的配置空间;
(2)256字节的配置空间分为两部分:前64字节是预定义的,所以的PCI设备都是一样的,64字节以后的配置空间由PCI设备自定义;
(3)配置空间分为三种,上面列出的是Header type 0、Header type 1,还有一种是CardBus桥的头,这种很少用;

4.2、PCI桥如何识别两种配置空间

(1)Header type 0是PCI终端设备使用的配置空间,Header type 1是PCI桥使用的配置空间;
(2)PCI桥设备会依次扫描每个PCI插槽,尝试读取每个插槽上的PCI设备配置空间的地址为0xE的寄存器值,也就是Header Type,如果是"00"则是Header type 0,如果是"01"则是Header type 1;

4.3、总要的配置空间字段介绍

在这里插入图片描述在这里插入图片描述

配置空间每个字段详细的含义介绍,阅读《PCI_SPEV_V3_0.pdf》的6.2节;

5、读配置空间的时序图

在这里插入图片描述

(1)第三个周期上升沿:PCI桥将要访问的配置信息发到AD总线上,可以使type0或者type1,同时将要访问设备的IDSEL引脚拉高,C/BE命令线上是"配置读"命令;
(2)第五个周期上升沿:被选中的设备将DEVSEL#引脚拉低,并将数据发送到AD线上,将TRDY#拉低;PCI桥准备好接收将IRDY#拉低,FRAME#被拉高,表示这是最后一个数据;
(3)对PCI时序图不清楚的可以参考博客:《pci总线协议学习笔记——PCI总线基本概念》;

6、参考资料:

(1)https://blog.csdn.net/gsjthxy/article/details/125819667;
(2)韦东山驱动大全课程;

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

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

相关文章

几个nlp的小任务(生成式任务——语言模型(CLM与MLM))

@TOC 本章节需要用到的类库 微调任意Transformers模型(CLM因果语言模型、MLM遮蔽语言模型) CLM MLM 准备数据集 展示几个数据的结构

【AI底层逻辑】——篇章7(下):计算资源软件代码共享

续上篇... 目录 续上篇... 三、计算资源 1、第一阶段:数据大集中 2、第二阶段:资源云化 ①“云”的分类 ②虚拟化技术 ③边缘计算的普及 四、软件代码共享 总结 往期精彩: 三、计算资源 AlphaGo算法论文虽然已经发表,但…

华为OD七日集训第2期 - 按算法分类,由易到难,循序渐进,玩转OD(文末送书)

目录 一、适合人群二、本期训练时间三、如何参加四、7日集训第2期五、精心挑选21道高频100分经典题目,作为入门。第1天、逻辑分析第2天、字符串处理第3天、数据结构第4天、递归回溯第5天、二分查找第6天、深度优先搜索dfs算法第7天、动态规划 六、集训总结1、《代码…

rke安装k8s

1、修改集群中各物理机主机名hostname文件 # 查看 cat /etc/hostname # 命令修改 hostnamectl set-hostname k8s-master2、实现主机名与ip地址解析 # 查看cat /etc/hosts # 修改 vi /etc/hosts3、配置ip_forward过滤机制 # 修改 vi /etc/sysctl.conf net.ipv4.ip_forward1…

RT-Thread IO设备模型

IO设备模型 RTT提供了一套简单的I/O设备模型框架,它位于硬件和应用程序之间,共分成三层,从上到下分别是I/O设备管理层、设备驱动框架层、设备驱动层。 应用程序通过I/O设备管理接口获得正确的设备驱动,然后通过这个设备驱动与底层…

递归算法学习——全排列

目录 ​编辑 一,问题描述 1.例子: 题目接口: 二,问题分析和解决 1.问题分析 2.解题代码 一,问题描述 首先我们得来先看看全排列的问题描述。全排列问题的问题描述如下: 给定一个不含重复数字的数组 n…

DTC状态变化例子 4

例子1: 此示例概述了两个操作周期排放相关的 OBD DTC 中 DTC 状态位的操作。该图显示了两个操作周期排放相关的 OBD DTC 的处理。该处理也可应用于非排放相关的 OBD DTC,此处显示仅供一般参考。 0 接收到清除诊断信息 → DTC 状态字节初始化。 1, 2 相关…

基于类电磁机制算法优化的BP神经网络(预测应用) - 附代码

基于类电磁机制算法优化的BP神经网络(预测应用) - 附代码 文章目录 基于类电磁机制算法优化的BP神经网络(预测应用) - 附代码1.数据介绍2.类电磁机制优化BP神经网络2.1 BP神经网络参数设置2.2 类电磁机制算法应用 4.测试结果&…

RabbitMQ---订阅模型-Topic

订阅模型-Topic • Topic类型的Exchange与Direct相比,都是可以根据RoutingKey把消息路由到不同的队列。只不过Topic类型Exchange可以让队列在绑定Routing key 的时候使用通配符! • Routingkey 一般都是有一个或多个单词组成,多个单词之间以…

【clojure】入门篇-01

一、环境的配置 1.java环境配置 clojureScript 需要java环境的配置需要下载jdk进行java环境变量配置 下载官网 java环境变量的配置教程 2.Leningen环境配置 1.下载.bat文件内容 2.配置环境变量 2.8.3及以上内容进行配置 lein教程 2.使用vscode vscode官网 下载插件 C…

SIP 协议路由规则详解

文章目录 SIP 路由关键字段SIP 路由图解 SIP 路由关键字段 SIP 协议实际上和 HTTP 类似,都是基于文本、可阅读的应用层协议,二者的不同之处在于 SIP 协议是有状态的。在 SIP 协议中,影响报文路由的相关字段如下表所示,总结起来如…

给微软.Net runtime运行时提交的几个Issues

前言 因为目前从事的CLRJIT,所以会遇到一些非常底层的问题,比如涉及到微软的公共运行时和即时编译器或者AOT编译器的编译异常等情况,这里分享下自己提的几个Issues。原文:微软.Net runtime运行时提交的几个Issues Issues 一.issues one 第一个System.Numerics.Vecto…

深度强化学习。介绍。深度 Q 网络 (DQN) 算法

马库斯布赫霍尔茨 一. 引言 深度强化学习的起源是纯粹的强化学习,其中问题通常被框定为马尔可夫决策过程(MDP)。MDP 由一组状态 S 和操作 A 组成。状态之间的转换使用转移概率 P、奖励 R 和贴现因子 gamma 执行。概率转换P(系统动…

SaaS多租户系统架构设计

前言:多租户是SaaS(Software-as-a-Service)下的一个概念,意思为软件即服务,即通过网络提供软件服务。SaaS平台供应商将应用软件统一部署在自己的服务器上,客户可以根据工作的实际需求,通过互联网…

万字长文解析AQS抽象同步器核心原理(深入阅读AQS源码)

AQS抽象同步器核心原理 在争用激烈的场景下使用基于CAS自旋实现的轻量级锁有两个大的问题: CAS恶性空自旋会浪费大量的CPU资源。在SMP架构的CPU上会导致“总线风暴”。 解决CAS恶性空自旋的有效方式之一是以空间换时间,较为常见的方案有两种&#xff…

ubuntu使用二进制安装mysql常见问题

一、安装mysql完毕后初始化失败 【/usr/local/mysql/bin】./mysqld --usermysql --basedir/usr/local/mysql --datadir/usr/local/mysql/data/ --initialize 输入命令:apt-get install libaio1 libaio-dev 二、初始化成功后重启服务失败 rootyanhong:/usr/local/…

4 hadoop集群配置案例

3&#xff09;配置集群 &#xff08;1&#xff09;核心配置文件&#xff0c;core-site.xml cd $HADOOP_HOME/etc/hadoopvim core-site.xml文件内容如下&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <?xml-stylesheet type"text…

java八股文面试[多线程]——并发三大特性 原子 可见 顺序

AutomicInteger : volatile CAS 总线LOCK MESI 两个协议 TODO volatile的可见性和禁止重排序是怎么实现的&#xff1a; DCL场景&#xff1a; new操作会在字节码层面生成两个步骤&#xff1a; 分配内存、调用构造器 然后把引用赋值给singleton 不加volatile则会发生指令重…

Windows下MATLAB调用Python函数操作说明

MATLAB与Python版本的兼容 具体可参看MATLAB与Python版本的兼容 操作说明 操作说明请参看下面两个链接&#xff1a; 操作指南 简单说明&#xff1a; 我安装的是MATLAB2022a和Python3.8.6&#xff08;安装时请勾选所有可以勾选的&#xff0c;包括路径&#xff09;。对应版本安…

基于闪电连接过程算法优化的BP神经网络(预测应用) - 附代码

基于闪电连接过程算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码 文章目录 基于闪电连接过程算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码1.数据介绍2.闪电连接过程优化BP神经网络2.1 BP神经网络参数设置2.2 闪电连接过程算法应用 4.测试结…