全新Linux教程-驱动大全-PCI和PCIe子系统-P2-PCI设备的访问方法-非桥设备

主要讲PCI设备的硬件访问方法。

1、PCI的硬件结构

        CPU发出的地址是CPU地址,可能是访问底下任何一个设备。地址范围不一样,访问到的外设就不一样。在嵌入式中,通常将4G内存地址空间分成好几个区域,不同的访问分给不同的地址。桥内存控制器会把CPU地址转换成addr_pci。PCI总线上的地址会到达底下的设备。此时就会引入一个问题,谁来相应这个地址(bridge底下挂载着总线,pci总线上有很多pci设备)?

        为了解决上述问题,需要去配置每个设备对应的地址范围(对每个设备进行分配固定地址)。首先就要知道每个设备需要多大的地址空间,例如A设备需要1MB,B设备需要2MB等等。驱动程序需要把PCI地址中的某一段分配给这个设备例如A-B。

步骤:

(1)读设备上的配置寄存器,得到设备的种类,得到需要申请的地址大小。如何选中要配置的设备呢?通过IDSEL信号选中设备(初始化的时候应该会对每个issel号扫描一遍)。

(2)驱动程序分配对应大小的PCI地址给设备。

(3)将地址访问写回PCI的配置寄存器。

(4)配置好后就可以像内存一样读写。

图片来自哪里?

2、PCI硬件信号

AD[31:0]地址和数据复用的线,Frame信号用于判断时读还是写:当Frame信号为低的时候,clk信号由低电平变高电平,此时AD上传输的是地址。如下图所示。在后续的时钟例传输的就是data。 注意这里还有个IDSEL信号,是用来配置设备时去选中中设备。

《来自PCI3.0规范手册:PCI Local Bus Specification Revision 3.0》

总线上既有地址又有数据,如何分辨什么时候是数据地址?

在配置的时候,如何正确的选中设备?

如下图所示,当总线上有很多设备时候。一开始的时候,这些设备都没有配置。此时页不知道上面传输的地址信号是用来访问谁的,设备无法做出响应。此时如何进行配置设备。答案是通过IDSEL信号,一般选用AD31-11信号来选中不同的设备(通过不同的引脚来选中设备),所有最多有20个设备。CPU通过AD31引脚选中第一个设备,然后去读它的配置空间的信息。可以得到设备类型,device ID和type等。

如何访问某个配置寄存器?

type0的配置空间的分布如下图。基地址寄存器是在分配好地址空间之后,驱动会把地址范围写到Base Address Register寄存器中。以后设备就可以检测到这些地址属于自己的范围。对于每个设备都有256字节的寄存器。设备可能有多种功能,function(最多8中功能),对于每种功能都有256字节的配置寄存器。此时就涉及到如何选中这个设备中某一个功能了。答案就是用data总线上的0-10位。11-31位刚刚说了用来当IDSEL信号。

《PCI规范手册》

如何选中设备中的某个功能?以及选中某个寄存器?

(1)选中设备,通过IDSEL信号。(2)使用AD[31:0]指定function和register (3)指定读或者写,通过C/BE#信号指定,可以配置配置读配置写,IO读和IO写。(4)基地址寄存器会写入起始地址。

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

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

相关文章

Github首页美化(updating)

Github首页美化 一、新建仓库二、美化Github首页主页访问量统计仓库状态统计常用语言占比统计社交链接 界面展示 一、新建仓库 对Github首页进行美化,需要新建一个仓库名和自己 Github 用户名相同的仓库;并且需要添加一个 README.md自述文件即可。 如果…

nVisual在线网络规划设计软件

●01● nVisual在线网络规划设计软件 在信息化快速发展的今天,网络基础设施的建设与优化变得尤为关键。为了满足现代通信行业对高效、精准的网络规划需求,nVisual在线网络规划设计软件应运而生,它通过集成先进的GIS技术和网络规划工具&#…

sprinboot+vue集成neo4j图数据库

一 、java后台 1.1 package com.admin.domain;/*** 功能描述:** author wangwei* date 2024-01-15 22:13*/ public class ConnectWeb {private String connectWebId;private String connectWebName;private String connectWebInfo;private String personWebIdAlph…

Vue.js------Vue组件基础

能够理解Vue组件概念和作用能够掌握封装创建组件能力能够使用组件之间通信能够完成todo案例 一.Vue组件创建和使用 1.折叠面板-实现多个 创建一个文件夹demo 具体步骤请参考vue.js---vue基础 ⚫ 解决方案: 采用vue提供的单.vue文件-组件方式来封装一套然后复用 在component…

构建Python中的分布式日志系统:ELK与Fluentd的结合

👽发现宝藏 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 在现代软件开发中,日志系统是至关重要的组成部分。它们不仅用于故障排查和性能监…

利用Python进行大规模数据处理

👽发现宝藏 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 利用Python进行大规模数据处理:Hadoop与Spark的对比 随着数据量的不断增长&…

centos linux 7.9安装php8.2.18不支持mysqli模块,如何解决?

🏆本文收录于「Bug调优」专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&…

蓝桥杯竞赛类型:Web应用开发 全程详解

既然大家准备报名蓝桥杯,那么对蓝桥杯就应该有一定的了解了。没有了解也没关系,简单来说,蓝桥杯就是一个计算机竞赛,竞赛类型大多是使用各种语言写算法,当然还有本文的主体——Web应用开发。对蓝桥杯有了基本了解之后&…

Https协议如何保证安全性?

Https和Http的关系 Https是Http里的一层加密层,如果协议走了这一层加密层,那么就是https。如果没有,则是单纯的http。 因为没有走ssl/tls这层加密层,所以这是单纯的http协议,数据在网络中传输是明文的,也…

用html写一个有趣的动态背景

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>一个有趣的动态背景</title><link rel"stylesheet" href"./style.css"> </head> <body> <canvas id&…

STM32 F103 C8T6开发笔记14:与HLK-LD303-24G测距雷达通信

今日尝试配通STM32 F103 ZET6与HLK-LD303-24G测距雷达的串口通信解码 文章提供测试代码...... 目录 HLK-LD303-24G测距雷达外观&#xff1a; 线路连接准备&#xff1a; 定时器与串口配置准备&#xff1a; 定时器2的初始化&#xff1a; 串口1、2初始化&#xff1a; 串口1、2自定…

【Java开发指南 | 第十五篇】Java Character 类、String 类

读者可订阅专栏&#xff1a;Java开发指南 |【CSDN秋说】 文章目录 Java Character 类转义序列 Java String 类连接字符串 Java Character 类 Character 类是 Java 中用来表示字符的包装类&#xff0c;它提供了一系列静态方法用于对字符进行操作&#xff0c;其主要分为静态方法…

AAAI-24 | EarnHFT:针对高频交易的分层强化学习(RL)框架

AAAI-24 | EarnHFT:针对高频交易的分层强化学习&#xff08;RL&#xff09;框架 原创 QuantML QuantML 2024-04-15 09:25 上海 EarnHFT 摘要(Abstract):高频交易&#xff08;HFT&#xff09;使用计算机算法在短时间内&#xff08;例如秒级&#xff09;做出交易决策&#xff…

C++实战——日期类的实现

日期类的实现 前言一、日期类概念实现运用场景 二、日期类的具体实现代码构造函数拷贝构造函数获取日期&#xff08;内联函数&#xff09;赋值加等减等加减小于小于等于大于大于等于相等不相等前置后置前置- -后置- -关于类里重载的比较运算符为什么要加外部const示例 Date.hDa…

【人工智能】机器学习算法综述及常见算法详解

目录 推荐 1、机器学习算法简介 1.1 机器学习算法包含的两个步骤 1.2 机器学习算法的分类 2、线性回归算法 2.1 线性回归的假设是什么&#xff1f; 2.2 如何确定线性回归模型的拟合优度&#xff1f; 2.3 如何处理线性回归中的异常值&#xff1f; 3、逻辑回归算法 3.1 …

现代数据中心中智能网卡/DPU的演进

数据中心是一个大型的连接服务器和存储系统池&#xff0c;通常由组织用于远程存储、处理或分发大量数据。组织可以拥有和管理其数据中心&#xff0c;也可以租用由第三方&#xff08;亚马逊或谷歌云等云服务提供商&#xff09;管理的基础设施&#xff0c;并通过互联网访问资源。…

IS62LV256AL-45ULI功能参数介绍及如何优化电源稳定性以适应

IS62LV256AL-45ULI功能参数介绍-公司新闻-配芯易-深圳市亚泰盈科电子有限公司 制造商:ISSI 产品品种:静态随机存取存储器 RoHS:是 存储容量:256 kbit 组织:32 k x 8 拜访时刻:45 ns 接口类型:Parallel 电源电压-最大:3.63 V 电源电压-最小:2.97 V 电源电流—最大值:5…

前端学习<四>JavaScript基础——38-offset相关属性和匀速动画(含轮播图的实现)

前言 JS动画的主要内容如下&#xff1a; 1、三大家族和一个事件对象&#xff1a; 三大家族&#xff1a;offset/scroll/client。也叫三大系列。 事件对象/event&#xff08;事件被触动时&#xff0c;鼠标和键盘的状态&#xff09;&#xff08;通过属性控制&#xff09;。 2…

java算法day59 | 单调栈part02 ● 503.下一个更大元素II ● 42. 接雨水

503.下一个更大元素II 思路&#xff1a; 相比于单纯寻找下一个最大元素&#xff0c;要遍历两边数组&#xff0c;注意i%nums.length。 class Solution {public int[] nextGreaterElements(int[] nums) {int[] resnew int[nums.length];for(int i0;i<res.length;i){res[i]-1;…

【大数据】bigtable,分布式数据库的鼻祖

目录 1.概述 2.数据模型 3.API 4.架构 5.一个完整的读写过程 6.如何查找到要的tablet 7.LSM树 1.概述 本文是作者阅读完bigtable论文后对bigtable进行的一个梳理&#xff0c;只涉及核心概念不涉及具体实操&#xff0c;具体实操会在后续的文章中推出。 GFS的出现虽然解…