PCIe(PCI Express)设备的初始化过程是一个复杂而关键的过程,它确保了PCIe设备在系统启动时能够正确配置并与主机进行通信。以下是一个详细的PCIe设备初始化过程概述:
一、硬件初始化阶段
-
上电与复位:
- 当PCIe设备上电后,它首先会进入复位状态。在这个阶段,所有寄存器和内部状态机都会被重置到初始状态。
-
链路初始化与训练(Link Initialization & Training):
- 复位后,PCIe设备会进行链路初始化和训练。这是一个物理层控制过程,它配置和初始化设备的物理层、端口和相关链路,以便正常的数据包流量可以在链路上进行。此过程在重置后自动启动,无需任何软件参与。
- 链路训练状态机(LTSSM)负责引导完成PCIe设备识别、速率协商、电源管理、复位、链路位宽通道序列协商等功能。LTSSM状态机主要有11个状态,包括Detect(检测)、Polling(轮询)、Configuration(配置)等,这些状态之间会按照一定的逻辑进行转换。
二、软件识别与配置阶段
-
BIOS识别与枚举:
- 在系统启动时,BIOS会扫描系统中的PCIe总线,识别和枚举连接在总线上的所有PCIe设备。
- BIOS会为每个PCIe设备分配资源,如IO端口、内存地址等,并为它们创建相应的PCI设备结构体来表示每个PCIe设备。
-
操作系统枚举与加载驱动:
- 操作系统启动后,会进行更深入的PCIe设备枚举工作,包括文件系统相关目录的建立、访问方法的初始化等准备工作。
- 接着,操作系统会加载适当的PCIe设备驱动程序,并将其与相应的PCIe设备关联起来。驱动程序将负责设备的具体配置和通信。
三、设备配置与通信阶段
-
配置空间访问:
- 在PCIe设备的初始化过程中,配置空间起着至关重要的作用。配置空间是PCIe设备的一个特殊区域,它包含了设备的所有配置信息,如设备ID、供应商ID、中断线、基地址寄存器等。
- 主机和PCIe设备可以通过读写配置空间来交换配置信息,从而实现设备的配置和管理。
-
通信与数据传输:
- 一旦PCIe设备完成初始化,它就可以与主机进行通信和数据传输了。PCIe总线提供了高速、高带宽的通信能力,支持多种数据传输模式,如TLP(事务层数据包)和DLLP(数据链路层数据包)等。
四、电源管理与状态机
-
电源管理:
- PCIe协议定义了关于电源状态的管理机制,包括D0(正常运行状态)、D1、D2、D3(低功率状态)等。
- 设备和主机可以通过配置寄存器来实现电源状态管理,以节省功耗并提高系统的能效。
-
状态机管理:
- 除了LTSSM状态机外,PCIe设备还可能包含其他状态机来管理设备的不同状态和转换过程。
- 这些状态机确保了设备在各种情况下都能正常工作,并提供了灵活的管理和配置选项。
综上所述,PCIe设备的初始化过程是一个涉及硬件、软件和配置空间访问的复杂过程。它确保了PCIe设备在系统启动时能够正确配置并与主机进行通信,为系统的稳定性和性能提供了重要保障。