PCIe学习笔记(一)——硬件设备识别扫盲篇(史无前例的好文章)

1 篇文章 1 订阅

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

以上是在理论层面上全面的了解了PCIe,具体我们在使用的过程中,需要通过软件的方式来实现,从而能够正确的被上层应用使用。
pci驱动在linux中的描述如下:
Once the driver knows about a PCI device and takes ownership, the
driver generally needs to perform the following initialization:

Enable the device
Request MMIO/IOP resources
Set the DMA mask size (for both coherent and streaming DMA)
Allocate and initialize shared control data (pci_allocate_coherent())
Access device configuration space (if needed)
Register IRQ handler (request_irq())
Initialize non-PCI (i.e. LAN/SCSI/etc parts of the chip)
Enable DMA/processing engines

When done using the device, and perhaps the module needs to be unloaded,
the driver needs to take the follow steps:

Disable the device from generating IRQs
Release the IRQ (free_irq())
Stop all DMA activity
Release DMA buffers (both streaming and coherent)
Unregister from other subsystems (e.g. scsi or netdev)
Release MMIO/IOP resources
Disable the device

PCIe的BAR地址是如何分配的呢?

在PCIE配置空间里,0x10开始后面有6个32位的BAR寄存器,BAR寄存器中存储的数据是表示PCIE设备在PCIE地址空间中的基地址,注意这里不是表示PCIE设备内存在CPU内存中的映射地址,至于这两者之间如何转换,就是前面提到的TLP的工作。
枚举的过程描述可以参考:
http://blog.chinaaet.com/justlxy/p/5100053320
https://blog.csdn.net/buyi_shizi/article/details/51068609枚举
总结如下:
1 向BAR空间写1。
2 读取BAR值,确定地址空间大小和类型。
3 像高比特写入地址空间地址(系统分配的)。

  • 23
    点赞
  • 167
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
PCIE(Peripheral Component Interconnect Express)是一种计算机扩展总线标准,用于连接外部设备与计算机主板之间的数据传输。PCIe连接的设备可以是显卡、声卡、网卡等。 Flow control(流量控制)是PCIE中的一种基础机制,用于在设备之间传输数据时确保数据的可靠传输。 PCIE的flow control可以分为两种方式:Credit-based Flow Control(基于信用控制)和Acknowledgment/Negative Acknowledgment Flow Control(确认/否定确认控制)。 基于信用控制是PCIE中最常用的流量控制机制。发送方设备在发送数据之前会向接收方设备发送一个信用(credit)值,表示发送方设备可以发送的最大数据量。接收方设备在接收到数据后会发回一个更新的信用值给发送方设备,发送方设备根据接收到的信用值确定下一次可以发送的数据量。通过这种方式,可以有效控制不同速度的设备之间的数据传输,避免数据丢失或信道阻塞。 确认/否定确认控制是PCIE中的一种备用方式,当发送方设备发送数据后,接收方设备会发回一个确认或否定确认信号给发送方设备,以告知是否成功接收数据。如果发送方设备收到否定确认信号,则会重新发送数据,确保数据的可靠性。 总结来说,PCIE中的flow control机制是为了确保数据的可靠传输而设计的。基于信用控制和确认/否定确认控制是两种常用的流量控制方式,可以根据不同的需求选择适合的方式来控制数据的传输。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值