码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Linux ARM平台开发系列讲解(PCIE) 2.13.3 PCI设备的访问方法(桥设备)


    1. 概述

    上一节讲述了PCI非桥设备的访问,这一节就讲述PCI桥设备的访问

    2. PCI设备类别及配置方法

    2.1 PCI设备的分类

    根据PCI设备类型的划分,可以将PCI设备分为三类,分别为PCI Agent、PCI Bridge和Cardbus Bridge,它们各自的含义分别如下:

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

    2.2 如何区分PCI设备类型

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

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

    在这里插入图片描述

    2.3 如何配置PCI设备

    上一章节提到了非桥设备的配置,配置桥设备,同样是要遵循该规则,具体如下:

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

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

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

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

    2.4 如何配置PCI桥设备

    • PCI桥设备的配置空间表如下:
      在这里插入图片描述
    • 跟一般的PCI设备一样,通过IDSEL来选中它
    • 通过type 0配置命令读取配置空间,发现它是PCI桥设备,把分配的总线号写给它

    2.5 如何配置PCI桥设备后面的桥设备

    • PCI桥设备同样可以挂载桥设备,如下图:
      在这里插入图片描述

    那么重点来了,CPU如何去配置桥设备的桥设备呢?

    在这里插入图片描述

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

    2.6 访问PCI设备

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

    返回总目录

  • 相关阅读:
    Linux中安装vnStat和vnStati监视网络流量
    编译原理实验1——词法分析程序设计原理与实现
    mysql中的锁
    嵌入式学习笔记(28)按键和CPU的中断系统
    玩玩“小藤”开发者套件 Atlas 200I DK A2 之VSCode远程连接
    记一次 .NET 某电子厂OA系统 非托管内存泄露分析
    [附源码]Java计算机毕业设计SSM飞羽羽毛球馆管理系统
    png转gif怎么操作?png动图怎么制作
    记一次MySQL5初始化被kill的问题排查
    .NET静态代码织入——肉夹馍(Rougamo) 发布1.1.0
  • 原文地址:https://blog.csdn.net/DSMGUOGUO/article/details/126103792
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号