《PCI EXPRESS体系结构导读》---(1)基本概念

  • BAR寄存器记录的是PCI地址空间的物理基地址,我们称之为BAR空间,这个地址不是存储器DDR的物理地址。

  • BAR空间PCI地址空间的物理地址可以存放IO地址空间,也可以存放存储器地址空间。

  • ARM处理器访问IO地址空间时,将PCI设备使用的IO地址空间映射为处理器的存储器DDR地址空间(所以PCI的地址空间会成为DDR地址空间的一部分);当处理器访问这个DDR地址时,主桥将DDR地址转换为PCI总线内的IO地址(封装为TLP包),然后通过PCI的IO总线事务对PCI设备的IO地址进行读写操作。

  • DDR读写事务与IO读写事务类似,ARM处理器将BAR空间映射到DDR地址空间吗,然后处理器通过DDR读写指令访问DDR地址空间,主桥将DDR的读写请求转换为PCI总线空间内的读写事务,再发送给目标。

  • PCI设备能直接使用的是PCI总线地址空间内的地址,PCI总线事务中出现的地址也是PCI地址域内的地址。但是处理器能直接使用的是DDR地址。

  • PCI总线空间地址和DDR地址的映射关系是有inbound 和outbound寄存器维系的。

  • PCI设备【配置空间的访问】,即配置读写总线事务,使用ID号进行寻址。ID号:总线号(bus id)+设备号(dev id)+功能号(func id)

  • 总线号是软件通过DFS深度优先算法扫描出来的,并且依次编号。

  • 处理器使用iATU寄存器组维护DDR地址空间和PCI总线地址空间的相互映射。iATU有inbound和outbound寄存器组,分别维护的是PCI总线地址空间至DDR地址空间的映射,DDR地址空间至PCI总线地址空间。

  • 只有当CPU的读写范围是在outbound寄存器组管理的地址空间内时吗,HOST主桥才能将这个读写访问转换为PCI总线域上的读写访问。

  • inbound和outbound窗口中两边寄存器中的地址常是相同的值,但是他们属于DDR域和PCI总线域,不是一个地址,只是数值相同。

  • inbound寄存器将PCI总线地址转换为DDR地址。当PCI设备进行DMA读写时,只有访问地址在inbound中,HOST主桥才能将读写请求转换为DDR读写请求。

  • 关于配置空间,有3中。分别是PCI agent设备使用的配置空间、PCI桥使用的配置空间和cardbus桥使用的配置空间。

  • PCI配置空间中出现的地址都是PCI总线地址,属于PCI总线地址空间。

  • PCI桥作为一个特殊的PCI设备,具有独立的配置空间。PCI桥的配置空间可以管理其下的PCI设备。PCI桥的配置在软件便利总线树时进行配置,不需要专门的软件驱动进行设备。

  • PCI设备配置空间,class id将PCI设备分类为显卡、网卡、pci桥等等。 header表明这个设备的类型是多功能设备还是单功能设备;以及配置空间的类型。interrupt line寄存器是软件配置时写入的,记录PCI设备使用的中断向量号。BAR0-5寄存器保存PCI设备使用的PCI总线空间内的基地址和大小。

  • BAR空间的访问,BAR寄存器中记录了PCI设备需要使用的PCI总线空间范围。当CPU想要访问这段空间时,需要将PCI总线地址转换为DDR地址进行访问。pci_dev->resource[bar].start参数保存了BAR空间基地址的DDR地址。

  • PCI桥的配置空间。与PCI设备不同的是,PCI桥只有两个BAR寄存器。secondary bus相关的寄存器;总线IO和存储器地址空间, IO/MEMORY BASE/LIMIT。可预读空间和不可预读空间,prefetchbale memory。

  • PCI总线的配置,分为两类,Type00h配置请求,Type01h配置请求。使用Type00h配置请求,来访问与主桥和PCI桥直接相连的PCI设备和PCI桥;而Type01h需要至少穿越一个PCI桥,访问没有与其直接相连的PCI设备或PCI桥,这个穿越的PCI桥会将Type01h转换为Type00h配置请求。

相关推荐
9527华安31 分钟前
FPGA实现PCIe数据通信培训课程,提供工程源码+视频教程+FPGA开发板
fpga开发·pcie·视频教程·培训
一袋米扛几楼982 小时前
【报错问题】解决 Vercel 部署报错:Express 类型失效与 TypeScript 2349/2339/2769 错误排查
ubuntu·typescript·express
懒人村杂货铺1 天前
Express + TypeScript 后端通用标准规范
javascript·typescript·express
前端小超人rui2 天前
【Node.js Express中间件理解及中间件分类和作用】
中间件·node.js·express
前端小超人rui2 天前
封装Express 自定义中间件
中间件·node.js·express
Aolith2 天前
从前端模拟到全栈认证:我的论坛 JWT 实战复盘
node.js·express
Aolith5 天前
全栈论坛笔记:异步、HTTP 与安全基础
express
爱吃芹菜炒肉6 天前
Chapter 16: Power Management
服务器·c语言·网络·tcp/ip·pcie
Aolith7 天前
学 Express 被 app.use 绕晕了?用流水线思维一次性搞懂 5 种中间件
后端·express
森叶7 天前
告别端口占用!用 Unix Domain Socket 管道让 Express 飞起来
服务器·unix·express