• Linux ARM平台开发系列讲解(PCIE) 2.13.2 PCI设备的访问方法(非桥设备)


    1. 概述

    PCI/PCIE分为桥设备和非桥设备,这节介绍非乔设备的一个访问原理

    2. 硬件结构

    在这里插入图片描述

    • 怎么访问到某个PCI设备?

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

    3. PCI本地总线的信号

    类别信号
    系统引脚CLK:给PCI设备提供时钟
    RST#:用于复位PCI设备
    地址/数据引脚AD[31:00]:地址、数据复用
    C/BE[3:0]:命令或者字节使能
    PAR:校验引脚
    接口控制FRAME#:PCI主设备驱动此信号,表示一个传输开始了、进行中
    IRDY#:Initiator ready, 传输发起者就绪,一般由PCI主设备驱动此信号
    TRDY#:Target ready,目标设备驱动,表示它就绪了
    STOP#:目标设备驱动,表示它想停止当前传输
    LOCK#:锁定总线,独占总线,有PCI桥驱动此信号
    IDSEL:Initialization Device Select,配置设备时,用来选中某个PCI设备
    DEVSEL#:Device Select,PCI设备驱动此信号,表示说:我就是你想访问的设备
    仲裁引脚REQ#:申请使用PCI总线
    GNT#:授予,表示你申请的PCI总线成功了,给你使用
    错误通知引脚PERR#:奇偶校验错误
    SERR#:系统错误
    中断引脚(可选)INTA#INTB#INTC#INTD#
    • 如下图就是PCI各个信号的名字
      在这里插入图片描述

    4. 访问PCI设备

    4.1 怎么访问PCI设备

    • CPU发出地址addr_cpu
    • PCI桥把addr_cpu转换为addr_pci
    • PCI总线上所有设备都检测addr_pci地址,发现它属于某个设备的地址,该设备就负责完成此传输

    4.2 PCI设备类型

    PCI设备可以简单地分为PCI Bridge(桥设备)和PCI Agent(非桥设备):

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

    4.3 怎么配置PCI Agent设备

    PCI_SPEV_V3_0》中提到了设备的访问格式,如下图:

    在这里插入图片描述
    在这里插入图片描述

    • 第一步:IDSEL 拉高选中要访问的设备
    • 第二步:在FRAME#拉低有效的第一个时钟CLK的情况下,在AD总线上写入Address,后面再写入Data,用来设置像访问的哪个地址和哪个寄存器‘
    • 第三步:通过C/BE#去配置读/写寄存器操作,比如第一次就要去读设备配置信息,分配内存空间等
      在这里插入图片描述

    返回总目录

  • 相关阅读:
    面相分析API接口
    【电力系统】含电热联合系统的微电网运行优化附matlab代码和复现论文
    金仓数据库 KingbaseES V8 GIS数据迁移方案(4. 基于SuperMap平台的数据迁移到KES)
    ffmpeg源码阅读之avformat_open_input
    redis的eval命令
    利用HTTP2,新型DDoS攻击峰值破纪录
    利用决策树找出最优特征组合
    模型部署——融合BN和Conv层
    asp.net core在其他程序集获取HttpContext
    【java爬虫】使用selenium获取某交易所公司半年报数据
  • 原文地址:https://blog.csdn.net/DSMGUOGUO/article/details/125995802