PCIe扫盲——基地址寄存器(BAR)详解
基地址寄存器(BAR)在配置空间(Configuration Space)中的位置如下图所示:
其中Type0 Header最多有6个BAR,而Type1 Header最多有两个BAR。这就意味着,对于Endpoint来说,最多可以拥有6个不同的地址空间。但是实际应用中基本上不会用到6个,通常1~3个BAR比较常见。
主要注意的是,如果某个设备的BAR没有被全部使用,则对应的BAR应被硬件全被设置为0,并且告知软件这些BAR是不可以操作的。对于被使用的BAR来说,其部分低比特位是不可以被软件操作的,只有其高比特位才可以被软件操作。而这些不可操作的低比特决定了当前BAR支持的操作类型和可申请的地址空间的大小。
一旦BAR的值确定了(Have been programmed),其指定范围内的当前设备中的内部寄存器(或内部存储空间)就可以被访问了。当该设备确认某一个请求(Request)中的地址在自己的BAR的范围内,便会接受这请求。
下面用几个简单的例子来熟悉BAR的机制:
例1. 32-bit Memory Address Space Request
如下图所示,请求一个4KB的NP-MMIO一般需要以下三个步骤:
Step1:如图中(1)所示,未初始化的BAR的低比特(11~4)都是0,高比特(31~12)都是不确定的值。所谓初始化,就是系统(软件)向整个BAR都写1,来确定BAR的可操作的最低位是哪一位。当前可操作的最低位为12,因此当前BAR可申请的(最小)地址空间大小为4KB(2^12)。如果可操作的最低位为20,则该BAR可申请的(最小)地址空间大小为1MB(2^20)。
Step2:完成初始化(写1操作)之后,软件便开始读取BAR的值,来确定每一个BAR对应的地址空间大小和类型。其中操作的类型一般由最低四位所决定,具体如上图右侧部分所示。
Step3:最后一步是,软件向BAR的高比特写入地址空间的起始地址(Start Address)。如图中所示,为0xF9000000。
例2. 64-bit Memory Address Space Request
下面是一个申请64MB P-MMIO地址空间的例子,由于采用的是64-bit的地址,因此需要两个BAR。具体如下图所示:
例3. IO Address Space Request
下面是一个申请IO地址空间的例子,如下图所示:
注:需要特别注意的是,软件对BAR的检测与操作(Evaluating)必须是顺序执行的,即先BAR0,然后BAR1,……,直到BAR5。当软件检测到那些被硬件设置为全0的BAR,则认为这个BAR没有被使用。
注:无论是PCI还是PCIe,都没有明确规定,第一个使用的BAR必须是BAR0。事实上,只要设计者原意,完全可以将BAR4作为第一个BAR,并将BAR0~BAR3都设置为不使用。
注:原文最早发表于本人的ChinaAET博客(http://blog.chinaaet.com/justlxy/)
PCIe扫盲——基地址寄存器(BAR)详解相关推荐
- pcie握手机制_【博文连载】PCIe扫盲——Ack/Nak 机制详解(一)
原标题:[博文连载]PCIe扫盲--Ack/Nak 机制详解(一) 前面在数据链路层入门的文章中简单地提到过Ack/Nak机制的原理和作用,接下来的几篇文章中将对Ack/Nak机制进行详细地介绍. A ...
- PCIe扫盲——128/130b编码详解
前面的文章介绍过PCIe的Gen1和Gen2模式下,物理层使用的是8b/10b的编码.这种编码方式能够实现直流均衡,并且能将数据流中的连0连1控制在5个以内(最多5个连续的1或者0),从而可以降低物理 ...
- pci配置基地址_PCIe扫盲——基地址寄存器(BAR)详解
基地址寄存器(BAR)在配置空间(Configuration Space)中的位置如下图所示: 其中Type0 Header最多有6个BAR,而Type1 Header最多有两个BAR.这就意味着,对 ...
- qml学习笔记(二):可视化元素基类Item详解(上半场anchors等等)
原博主博客地址:http://blog.csdn.net/qq21497936 本文章博客地址:http://blog.csdn.net/qq21497936/article/details/7851 ...
- Java记录 -22- Java的基类Object详解
Java的基类Object详解 Java的JDK文档要经常查阅使用,最好查看英文的文档. Oracle官方在线 Java API Specifications http://www.oracle.co ...
- moviepy音视频剪辑:视频剪辑基类VideoClip详解
☞ ░ 前往老猿Python博文目录 ░ 一.概述 在<moviepy音视频剪辑:moviepy中的剪辑基类Clip详解>和<moviepy音视频剪辑:moviepy中的剪辑基类Cl ...
- pcie读写ddr_一文详解PCIe内存空间到AXI内存空间的转换
UltraScale系列芯片包含PCIe的Gen3 Integrated Block IP核在内的多种不同功能的IP核都会有一页设置为PCIe:BARs,设置IP核的Base address regi ...
- 深度学习 --- 径向基神经网络RBF详解
上一节我们基本上打开了深度学习的大门,其实下一步应该是卷积神经网络即CNN了,但是呢卷积神经网络的最后一层采用的是径向基神经网络,为了以后到CNN不用再费力气将RBF和保持CNN的整体性和连贯性,因此 ...
- Android Action Bar 详解篇
作为Android 3.0之后引入的新的对象,ActionBar可以说是一个方便快捷的导航神器.它可以作为活动的标题,突出活动的一些关键操作(如"搜索"."创建" ...
最新文章
- 七天学会NodeJS
- 【NLP】FedNLP: 首个联邦学习赋能NLP的开源框架,NLP迈向分布式新时代
- Linux:常用命令大全
- 【蓝桥杯】基础练习 数列排序
- shell脚本初体验
- SAP UI5 sap.viz.ui5.controls.VizFrame 的 aggregation 之一:dataset
- python3设置编码_python3 中文乱码与默认编码格式设定方法
- 小米MIX 4内部代号曝光:“众神之王”三季度降临
- linux下lsof命令,Linux lsof命令使用详解
- 【Deep Learning 四】课程一(Neural Networks and Deep Learning),第三周(Shallow neural networks)答案
- C#开发高亮语法编辑器(一)——TextBox ,RichTextBox的局限性
- cat 监控 java,分布式监控CAT客户端的SpringBoot集成
- 【老生谈算法】matlab实现模糊数学模型源码——模糊数学模型
- MT2601智能穿戴芯片处理器参数介绍
- 《大侦探皮卡丘》天龙八部在路上
- 来聊一聊广告主“又爱又恨”的EDM营销那档子事儿!
- 如何在CAD中进行修剪命令操作?
- 《MS17-010(永恒之蓝)—漏洞复现及防范》
- el-checkbox点击后面的内容不选中复选框
- 网络安全学习记录-13
热门文章
- 达州铭仁园2021年高考成绩查询,持续更新!达州各县市区中学2019年高考成绩报喜了...
- 猫(modem) 路由器 交换机 中继器 集线器 网桥 wifi协议和以太网协议 WAN(wide area network) LAN(local area network)
- Flutter版本玩Android客户端(1)——搭建主页面
- “中银杯”辽宁省第十九届职业院校技能大赛软件测试赛项
- PHP 抽象类的简单测试与总结
- tomcat的webapps下资源访问404
- 第十四周项目二成绩姓名排名
- 虚拟机中Linux怎么与宿主机、外网通信
- Coinbase为热门电子商务平台推出加密货币插件
- 低级格式化和高级格式化的区别是什么?