访问PCI/PCIe设备的流程

描述

访问 PCI/PCIe 设备的流程

PCI/PCIe 设备的配置信息

PCI/PCIe 设备上有配置空间(配置寄存器),用来表明自己"需要多大的地址空间"。

注意,这是 PCI/PCIe 地址空间。

主机读取设备配置信息、分配空间

主机上的程序访问 PCI/PCIe 设备,读出配置信息。

分配地址空间:注意,分配的是 PCI/PCIe 地址空间。

把地址空间首地址写入设备。

CPU 地址空间和 PCI/PCIe 地址空间怎么转换?

假设 CPU 发出的 addr_cpu,是用来访问 PCI 设备的,转换关系为:

addr_pci  = addr_cpu + offset

在 PCI/PCIe 控制器中,有某个寄存器,有来保存 offset 值。

主机像读写内存一样访问设备

示例代码如下:

volatile unsigned int *p = addr_cpu;
unsigned int val;
*p = val;  /* 写, 硬件会把addr_cpu转换为addr_pci去写PCI/PCIe设备 */
val = *p;  /* 读, 硬件会把addr_cpu转换为addr_pci去读PCI/PCIe设备 */

| 本文参考 百问网-韦东山驱动大全 |

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

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分