0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

几个简单的例子来熟悉寄存器BAR的机制

SwM2_ChinaAET 来源:未知 作者:李倩 2018-05-09 09:25 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

基地址寄存器(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 NP-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都设置为不使用。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 寄存器
    +关注

    关注

    31

    文章

    5620

    浏览量

    130444
  • PCIe
    +关注

    关注

    16

    文章

    1483

    浏览量

    88955

原文标题:【博文连载】PCIe扫盲——基地址寄存器(BAR)详解

文章出处:【微信号:ChinaAET,微信公众号:电子技术应用ChinaAET】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    IDT SSTVF16857AGLF DDR寄存器:特性与应用解析

    IDT SSTVF16857AGLF DDR寄存器:特性与应用解析 在电子工程师的设计工作中,DDR寄存器是非常重要的组件。今天我们就来深入了解一下Integrated Device
    的头像 发表于 04-14 10:05 96次阅读

    74AHC594:8位移位寄存器的详细解析与应用

    74AHC594:8位移位寄存器的详细解析与应用 在电子设计领域,移位寄存器是一种常见且重要的数字电路元件,它能够实现数据的串行输入、串行输出或并行输出。今天,我们就来深入了解一下SGMICRO公司
    的头像 发表于 03-26 09:10 503次阅读

    74HC595 8位移位寄存器:设计与应用全解析

    74HC595 8位移位寄存器:设计与应用全解析 在电子工程师的工具箱中,移位寄存器是一个非常实用的组件。今天,我们就来深入了解一下SG Micro Corp的74HC595 8位串行输入/串行输出
    的头像 发表于 03-16 10:35 398次阅读

    74LV595A:8位移位寄存器的全方位解析

    74LV595A:8位移位寄存器的全方位解析 在电子设计领域,移位寄存器是一种常用的逻辑元件,能实现数据的串行输入和并行输出。今天我们要深入探讨SGMICRO的74LV595A,一款功能强大的8位
    的头像 发表于 03-16 10:35 288次阅读

    LAT1170+如何理解 RAMECC FAR 寄存器的值

    电子发烧友网站提供《LAT1170+如何理解 RAMECC FAR 寄存器的值.pdf》资料免费下载
    发表于 01-09 16:12 0次下载

    【NCS随笔】nRF54L15使用UICR寄存器保存数据

    nRF54L15使用UICR寄存器保存数据 本文章主要是讲解如何使用nRF54L15的UICR寄存器保存一些基础数据 一、UICR寄存器的说明 UICR(用户信息配置寄存器)**是非易
    的头像 发表于 11-27 17:09 1750次阅读

    嵌入式系统必懂的 20 个寄存器

    嵌入式开发看起来很复杂,但很多操作其实都离不开寄存器寄存器就是MCU内部的存储单元,它们控制着处理和外设的行为。熟悉这些寄存器,你就能更
    的头像 发表于 11-14 10:28 1375次阅读
    嵌入式系统必懂的 20 个<b class='flag-5'>寄存器</b>

    NVMe高速传输之摆脱XDMA设计32:寄存器功能验证与分析2

    寄存器最大值为 64’hFFFFFFFFFFFFFFFF,到达最大值后一个时钟周期后翻转回 0, 在随机时刻使用 force 将寄存器赋值临近最大值, 当寄存器达到最大值后, 翻转回到 0, 读取数值为 0, 仿真行为符合设计预
    的头像 发表于 10-14 17:06 896次阅读
    NVMe高速传输之摆脱XDMA设计32:<b class='flag-5'>寄存器</b>功能验证与分析2

    ‌SN74LVC595A 8位移位寄存器技术文档总结

    SN74LVC595A器件包含一个8位串行输入、并联输出移位寄存器,该寄存器为8位D型存储寄存器供电。存储寄存器具有并行的 3 态输出。为移位寄存器
    的头像 发表于 09-28 15:09 1679次阅读
    ‌SN74LVC595A 8位移位<b class='flag-5'>寄存器</b>技术文档总结

    ‌SN74HCT595 8位移位寄存器技术解析与应用指南

    Texas Instruments SN74HCT595/SN74HCT595-Q1 8位移位寄存器包含8位串进并出移位寄存器,向8位D类存储寄存器馈送信号。存储寄存器具有并行 3 状
    的头像 发表于 09-19 14:31 1245次阅读
    ‌SN74HCT595 8位移位<b class='flag-5'>寄存器</b>技术解析与应用指南

    TPIC6595 8位功率移位寄存器技术文档摘要

    该TPIC6595是一款单片、高压、大电流功率的8位移位寄存器,设计用于需要相对较高负载功率的系统。该器件在输出端包含一个内置电压钳位,用于电感瞬态保护。功率驱动应用包括继电器、螺线管和其他中电流
    的头像 发表于 09-09 11:10 1053次阅读
    TPIC6595 8位功率移位<b class='flag-5'>寄存器</b>技术文档摘要

    ‌TPIC6B595 8位功率移位寄存器技术文档总结

    TPIC6B595器件是一款单片、高压、中电流功率8位移位寄存器,设计用于需要相对高负载功率的系统。该器件在输出端包含一个内置电压钳位,用于电感瞬态保护。功率驱动应用包括继电器、螺线管和其他中电流
    的头像 发表于 09-09 10:16 1184次阅读
    ‌TPIC6B595 8位功率移位<b class='flag-5'>寄存器</b>技术文档总结

    ‌TLC6C5912 12通道移位寄存器LED驱动技术文档总结

    该TLC6C5912是一款单片、中压、低电流功率 12 位移位寄存器 设计用于需要相对中等负载功率的系统,例如 LED。 该器件包含一个 12 位串行输入并行输出移位寄存器,可为 12 位馈电
    的头像 发表于 08-26 14:16 1164次阅读
    ‌TLC6C5912 12通道移位<b class='flag-5'>寄存器</b>LED驱动<b class='flag-5'>器</b>技术文档总结

    使用寄存器点亮LED灯

    学习本章时,配合以上芯片手册中的“19. I/O Ports”章节一起阅读,效果会更佳,特别是涉及到寄存器说明的部分。本章内容涉及到较多寄存器方面的深入内容,对于初学者而言这些内容丰富也较难理解,但非常有必要细读研究、夯实基础。
    的头像 发表于 05-28 17:37 1505次阅读
    使用<b class='flag-5'>寄存器</b>点亮LED灯

    第四章 什么是寄存器

    本篇文章我们讲解了寄存器的概念、地址映射和寄存器操作等内容,内容比较干,大家有个概念即可,不要求全部熟记掌握,有需要时可重复查阅观看。下一篇我们将开始进行实操内容,通过控制单片机的GPIO来点亮一颗LED,敬请期待!
    的头像 发表于 05-21 14:23 1687次阅读
    第四章 什么是<b class='flag-5'>寄存器</b>