吹个牛先:计划写三篇文章,本文主要描述PCIe设备识别过程,接下来会完成两篇,(二)中断,(三)数据传输
博观而约取,厚积而薄发
写在开始的话,不知道看了多少资料才总结出一点知识,能输入已经很不容易,何况想要输出,有十能输出一二就算不错了。所以这个过程中真的很难坚持下来,何况没有实际项目作为载体,真的不知道实际运用中这些知识够不够用,这只是基于我之前的经验,认为一个全新的硬件模块中需要掌握的部分。
1 首先要了解这个硬件的用途,物理接口,pin定义。
2 要知道需要做什么样的配置才能使得设备达到我们的预期。
3 设备工作中最重要的就是三个模块,正确识别,注册中断以及终端处理函数,数据传输。
完成以上三步一个硬件模块的bringup就完成了。本文忽略了大部分细节,只为了用最短的篇幅描述好PCIe。
MSI、MSI-X中断和TLP这里不详细展开去说,必要的时候会带出来。

首先用一张图来直观的呈现出要了解PCIe,我们需要知道的一些基本概念。
由于PCI/PCIe常见设备分为Bridge和Agent两种,这两种设备的区分是写在配置空间的header字段中的,所以配置空间也有两种类型:
其中Agent的配置空间类型称为Type 00h,Bridge的配置空间,它的类型被称为Type 01h。
PCI/PCIe的配置地址空间Configuration Space是一个与Memory空间和IO空间并列的独立的空间。
- 对Legacy PCI来讲,Configuration Space有256 Bytes
- 对于PCIe, Configuration Space有4096 Bytes
BAR(Base Address Registers):决定PCI/PCIe设备空间映射到系统空间具体位置的寄存器,映射方式有两种,分别是IO和Memory映射,因此配置空间的访问方式也有两种: - IO方式(CF8h/CFCh)
- Memory方式(ECAM)
https://blog.youkuaiyun.com/vc66vcc/article/details/81014637
https://blog.youkuaiyun.com/huangkangying/article/details/50570612
用华为hisi的芯片来描述PCIe在linux中的驱动注册过程,可以参考本文:

本文详述了PCIe设备的识别流程及Linux环境下PCIe驱动的注册过程。涵盖物理层检测、配置空间理解、中断处理及数据传输等核心环节,深入解析LTSSM状态机,提供华为hisi芯片PCIe驱动实例。
最低0.47元/天 解锁文章
2万+

被折叠的 条评论
为什么被折叠?



