PCI设备的访问方法_桥设备(type1)

news2024/11/15 4:40:26

PCI设备的访问方法_桥设备(type1)


文章目录

  • PCI设备的访问方法_桥设备(type1)
  • 参考资料:
    • 一、 硬件结构
    • 二、 PCI设备类别及配置方法
      • 2.1设备类别
      • 2.2 配置设备时怎么选中它
    • 三、 配置示例
      • 3.1 示例:配置PCI Agent设备
      • 3.2 示例:配置PCI桥
      • 3.3 示例:配置PCI桥后面的设备
    • 四、 访问PCI设备
  • 致谢


参考资料:

  • 《PCI EXPRESS体系结构导读 (王奇)》

一、 硬件结构

PCI系统框图:
在这里插入图片描述
怎么访问到某个PCI设备?

需要理解PCI本地总线信号。

二、 PCI设备类别及配置方法

2.1设备类别

PCI设备可以简单地分为PCI Agent、PCI Bridge、Cardbus Bridge:

  • PCI Agent:真正的PCI设备(比如网卡),是PCI树的最末端
  • PCI Bridge:桥,用来扩展PCI设备,必定有一个Root Bridge,下面还可以有其他Bridge。
  • Cardbus Bridge:用得不多,不介绍

怎么判读设备的类别?设备的配置空间里有Header Type,它的取值有:

  • 00h:PCI Agent
  • 01h:PCI Bridge
  • 02h:Cardbus Bridge

在这里插入图片描述

2.2 配置设备时怎么选中它

  • 跟Root Bridge直接相连的PCI Agent、PCI Bridge,使用Configuration Command type 0

在这里插入图片描述

  • 桥之后的设备,Root Brdige使用Configuration Command type 1

在这里插入图片描述

  • 桥:接收到Configuration Command type 1后,有2个选择
    • 对于跟它直连的PCI Agent
      • Configuration Command type 1转换为Configuration Command type 1
      • 使用IDSEL选择设备
    • 如果还需要通过下一级的桥才能访问此设备
      • 转发Configuration Command type 1

三、 配置示例

3.1 示例:配置PCI Agent设备

  • 选中:通过IDSEL来选中某个设备

  • 怎么访问配置空间:发起一个type 0的配置命令

    • PCI设备最多有8个功能,每个功能都有自己的配置空间(配置寄存器)
    • 你要访问哪个功能?哪个寄存器?发起
      在这里插入图片描述
  • CPU读取配置空间的BAR,得知:这个PCI设备想申请多大空间

  • CPU分配PCI地址,写到PCI设备的BAR里

PCI Agent设备的配置空间:

在这里插入图片描述

3.2 示例:配置PCI桥

  • 跟一般的PCI设备一样,通过IDSEL来选中它
  • 通过type 0配置命令读取配置空间,发现它是PCI桥设备,把分配的总线号写给它

在这里插入图片描述
PCI桥的配置空间:
在这里插入图片描述

3.3 示例:配置PCI桥后面的设备

  • 发起一个type 1的配置命令
  • 通过Bus Number访问到PCI桥
  • PCI桥根据Device Number去驱动IDSEL,选中下一级的PCI设备
  • 通过Function Number、Register Number访问PCI设备的配置空间

四、 访问PCI设备

  • CPU发出addr_cpu,被PCI Host桥转换为addr_pci
  • 某个PCI设备发现这个addr_pci是自己的,就驱动DEVSEL#,表示说:是我是我
  • PCI设备参与传输:接收数据、返回数据

致谢

以上笔记源自韦东山老师的视频课程,感谢韦老师,韦老师是嵌入式培训界一股清流,为嵌入式linux开发点起的星星之火,也愿韦老师桃李满园。聚是一团火,散是满天星!

在这样一个速食的时代,坚持做自己,慢下来,潜心琢磨,心怀敬畏,领悟知识,才能向下扎到根,向上捅破天,背着世界往前行!
仅此向嵌入行业里的每一个认真做技术的从业者致敬!


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

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

相关文章

ThinkPad R490电脑开机之后无限重启怎么重装系统?

ThinkPad R490电脑开机之后无限重启怎么重装系统?有用户使用ThinkPad R490电脑正常开机的情况下,出现了系统自动重启的情况,无法正常的使用电脑了。遇到这个情况怎么去重装一个新的电脑系统,恢复正常使用呢?来看看以下…

九种查找算法-红黑树

红黑树 2-3查找树能保证在插入元素之后能保持树的平衡状态,最坏情况下即所有的子节点都是2-node,树的高度为lgn,从而保证了最坏情况下的时间复杂度。但是2-3树实现起来比较复杂,于是就有了一种简单实现2-3树的数据结构&#xff0…

MySQL 数据库练习题记录02

文章目录前言一、数据库基础1.1 sql练习题1.2 sql语句执行顺序1.3 sql语句编写前言 本文主要记录B站视频视频链接的内容,做到知识梳理和总结的作用,项目git地址。 一、数据库基础 1.1 sql练习题 user表数据: idusername1张三2李四3王五4小刘 user_r…

代码随想录算法训练营第32天 回溯算法 java :491.递增子序列 46.全排列47.全排列 II

文章目录LeetCode 491.递增子序列题目详解注意难点示意图LeetCode 46.全排列题目讲解难点LeetCode47.全排列 II题目讲解示图难点总结LeetCode 491.递增子序列 题目详解 注意难点 在题目中有涉及到 子集序列中至少有两个元素 可以用来进行判断 在单层遍历之前需要声明一个数组…

统计学必备基础知识

一,统计学分为两种:1.描述性统计 2.推断性统计 1.统计数据的类型 (1).计量尺度分为3类:分类数据,顺序数据,数值型数据 分类数据:文字表达数据 顺序数据:非数据型数据,顺序数据…

【swagger】spring security中 swagger2,swagger3和knife4j集成的区别 真的弄懂了吗?

文章目录导包正确方式swagger2在security中放行swagger3在security中放行knife4j放行失败原因分析:swagger访问失败原因分析:作为一个强迫症重度的程序猿 不想多导一个jar包 本文创作背景是鉴于网上大多数是旧版本swagger2的教程,且没有针对2…

【数据结构初阶】第五篇——栈和队列

栈 栈的概念及结构 栈的实现 栈的初始化 销毁栈 入栈 出栈 获取栈顶元素 检测栈是否为空 获取栈中有效元素个数 队列 队列的概念和结构 队列的实现 队列的初始化 销毁队列 入队 出队 获取对头元素 获取队尾元素 判断队列是否为空 获取队列中元素个数 栈 栈…

13.包装类、正则表达式、Arrays类、常见算法、Lambda表达式

目录 一.包装类 1.1 什么是包装类 1.2 包装类的作用 1.3 自动装箱和自动拆箱 1.3.1 自动装箱 1.3.2 自动拆箱 1.4 包装类的特有功能 二.正则表达式 2.1 什么是正则表达式 2.2 正则表达式的规定字符 2.3 字符串对象匹配正则表达式的方法 2.4 正则表达式在字符串方法中…

21特征值和特征向量

特征值与特征向量初探 给定矩阵A,矩阵A乘以向量x,就像是使用矩阵A作用在向量x上,最后得到新的向量Ax。在这里,矩阵A就像是一个函数,接受一个向量x作为输入,给出向量Ax作为输出。 在这一过程中&#xff0c…

算法基础集训(第29天)------>DFS之排列数【DFS入门级算法,初学者必会】

一:概念定义该题对于排列数的定义是对给定的数字n,将从1~n的数字进行全排列并输出二:题目描述给定一个整数 n,将数字 1∼n 排成一排,将会有很多种排列方法。现在,请你按照字典序将所有的排列方法输出。输入…

Java——只出现一次的数字(2)

题目链接 leetcode在线oj题——只出现一次的数字(2) 题目描述 给你一个整数数组 nums ,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。 你必须设计并实现线性时间复杂度的算法且不使用额外空间来解…

Python对liunx中mysql数据库进行双表查询 10个案例带你了解

关于Python连接liunx中mysql数据库的方式在这一篇文章 这里写目录标题1.在Liunx服务器中的mysql新建一个表2.插入数据3.连接liunx中的mysql数据库1、查询1946班的成绩信息2,查询1944班,语文成绩大于60小于90的成绩信息3,查询学生表中1到6行的…

阿里国际站用户增长技术探索与实践

作者:阿里国际站用户增长团队 和众多传统行业一样,跨境贸易产业近年来也经历了数字化的转型创新,而首先参与进模式创新的地方主要集中于信息展示和业务撮合领域。本文将为大家分享阿里国际站在用户增长技术体系建设上的探索与实践。 一、跨境…

SpringBoot超大文件上传(总结)

SpringBoot超大文件上传,秒传!分片上传!断电续传!(总结)一. 秒传1、什么是秒传2、本文实现的秒传核心逻辑二. 分片上传1、什么是分片上传2、分片上传的场景三. 断点续传1、什么是断点续传2、应用场景3、实现断点续传的…

【ESP32 WiFi篇(六)】ESP32 WebSocket

文章目录1. WebSocket 概述2. WebSocket 的通信原理和机制3. WebSocket 与 HTTP 的关系3.1 相同点3.2 不同点3.3 关系4. WebSocket 技术出现之前,Web端实现即时通讯的方法有哪些?5. HTTP 存在的问题6. WebSocket 的特点7. WebSocket 数据帧格式1. WebSoc…

简单局域网网络故障排查和处置

简单局域网网络故障排查和处置一、了解基本网络构成1. IP传输通信图2.有线网络(一)物理层面(1)网线(2)网线的制作(3)网卡接口(4)光纤(5&#xff0…

【图像配准】使用OpenCV进行多图配准拼接

本篇主要利用OpenCV自带的配准拼接函数Stitcher_create来实现多幅图像的配准拼接 代码参考自:https://github.com/samggggflynn/image-stitching-opencv 图像拼接创建步骤 通常来说,根据多个图像创建全景图的步骤为以下几步: 检测两张图像的…

【pytest】三、pytest之setup和teardown,及封装

一、引言: 1)setup的作用:用来实现执行前的一些初始化操作(如:数据准备、连接设备、打开APP/浏览器、创建日志对象、创建数据库连接、创建接口的请求对象等操作); 2)teardown的作用:用来实现执…

C++学习/温习笔记:新型源码学编程(二)

写在前面 面向初学者撰写专栏,个人原创的学习C/C笔记(干货)编程练习所作源代码输出内容为中文,便于理解如有错误之处请各位读者指正请读者评论回复、参与投票,反馈给作者,我会获得持续更新笔记干货的动力。…

放弃内卷,创造新市场

在疫情,突然爆发的俄乌冲突,还有全球的物价上涨情况等社会问题逐渐变得尖锐的动荡中,让原本就不好的经济形势进入了寒冬期,各个行业也陆续进入了寒冬期,纷纷进入了内卷模式,尤其是对于跨境电商行业来说&…