• 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#去配置读/写寄存器操作,比如第一次就要去读设备配置信息,分配内存空间等
      在这里插入图片描述

    返回总目录

  • 相关阅读:
    分布式缓存
    利用SOP完成新客户培育
    GoLong的学习之路,进阶,语法之并发(并发错误处理)补充并发三部曲
    在线教育系统,引领了全新的教学模式
    Flink 1.13 源码解析——JobManager启动流程 WebMonitorEndpoint启动
    Journal of statistical software:追踪前沿的统计学软件
    2022/11/28-29总结
    Eureka 服务注册与发现
    常见问题汇总
    【超实用】教你生成GUID
  • 原文地址:https://blog.csdn.net/DSMGUOGUO/article/details/125995802