驱动之路#60:PCIe 快速扫盲

发布时间:2026/10/14 12:50:24
驱动之路#60:PCIe 快速扫盲 本系列分享的是我当初学习 Linux 驱动的来时路。前面聊了不少 I2C、SPI 这种低速外设接口。从这一篇开始简单了解一个更“高速”的接口PCIe。做嵌入式开发时PCIe 也很常见。比如NVMe SSDWiFi / 蓝牙模块4G / 5G 模块以太网扩展卡采集卡AI 加速卡FPGA 板卡某些高速外设。在 RK3588、RK3576 这类高端 SoC 上也会集成 PCIe 控制器用来扩展高速外设。这篇先不深入 Linux PCIe 驱动也不讲 LTSSM、BAR、MSI、中断、枚举这些细节只做一次快速扫盲PCIe 到底是什么版本和 Lane 怎么看为什么它适合高速设备1. PCIe 是什么PCIe全称是Peripheral Component Interconnect Express中文一般叫高速外围组件互连。它可以理解成主控 / CPU 和高速外设之间的一条高速数据通道。在 PC 里独立显卡、NVMe SSD、网卡、采集卡很多都是通过 PCIe 接到主板上的。在嵌入式平台里PCIe 也经常用来接NVMe SSDPCIe WiFi 模块4G / 5G 模块工业采集卡高速网卡AI / FPGA 扩展模块。如果用大白话理解可以把 PCIe 看成系统内部的“高速公路”—— CPU / SoC 是城市中心PCIe 外设是各个功能区PCIe Link 是连接它们的高速通道。I2C、SPI 更像普通小路适合传感器、寄存器、低速外设。PCIe 则更像高速公路适合大数据量、高带宽、低延迟设备。下图是其整体架构呈现一个树状结构2. PCIe 的 3 层结构PCIe 协议可以粗略分成三层。事务层数据链路层物理层。先不用深究每层简单理解即可。1事务层负责“要干什么”事务层主要负责把读写请求封装成 PCIe 能识别的数据包。比如我要读某个设备寄存器我要写一段数据我要访问某块内存空间。这些请求最终会被封装成 TLP也就是 Transaction Layer Packet。可以简单理解为事务层负责表达“我要做什么操作”。2数据链路层负责“传得可靠”数据链路层主要负责可靠性。比如数据有没有出错包有没有丢需不需要重传顺序是否正确。可以理解为数据链路层负责让数据传输更可靠。3物理层负责“怎么在线上传”物理层就更底层了。它负责实际电气信号传输包括差分信号高速 SerDes链路训练Lane 建立速率协商电气特性。调 PCIe 硬件问题时比如链路起不来、Link 不稳定、速率降级很多时候都和物理层有关。3. PCIe 是点对点通信PCIe 和老 PCI 最大区别之一就是通信方式变了。老 PCI 更像一群人共用一条路。PCIe 更像每个设备都有自己的专属通道。典型 PCIe 系统可以简单理解成树状结构如果中间有 PCIe Switch还可以继续扩展多个设备Root Complex↓PCIe Switch├── NVMe SSD├── 网卡└── 加速卡这里先记住两个角色Root Complex通常在 CPU / SoC 这一侧负责发起和管理 PCIe 总线Endpoint外设端比如 NVMe SSD、网卡、WiFi 模块等。在嵌入式平台里RK3588 / RK3576 这类 SoC 通常作为 Root Complex外接的 NVMe、WiFi、5G 模块就是 Endpoint。4. PCIe 的 Lane 是什么讲 PCIe一定绕不开 Lane。Lane 可以简单理解成PCIe 的一条车道。一个 Lane 由两对高速差分信号组成一对 TX负责发送一对 RX负责接收。也就是说1 个 Lane 通常包含TXTX-RXRX-共 4 根差分信号线。PCIe 是全双工通信发送和接收可以同时进行。常见的 Lane 宽度有这里的 x1、x4、x16表示多少条 Lane 捆绑在一起。比如PCIe x11 条 LanePCIe x44 条 LanePCIe x1616 条 Lane5. PCIe 版本怎么理解PCIe 从 1.0、2.0、3.0 一路发展到 4.0、5.0、6.0、7.0后续还有 8.0。大体规律是每一代 PCIe单 Lane 传输速率基本都会翻倍。常见速率这里单位是 GT/s不是直接等于 GB/s。GT/s 表示每秒传输多少次符号。不同版本编码方式不同所以实际有效带宽还要考虑编码、协议开销等因素。对初学者来说先不用死抠换算细节。先记住版本越高单 Lane 速度越快。6. 版本和 Lane 决定总带宽PCIe 带宽由两个因素决定版本Lane 数。版本决定单 Lane 速度。Lane 数决定有多少条“车道”。可以简单理解成总带宽 ≈ 单 Lane 带宽 × Lane 数。比如PCIe 3.0 x1PCIe 3.0 x4PCIe 4.0 x4PCIe 5.0 x16这些说法里3.0 / 4.0 / 5.0表示 PCIe 版本x1 / x4 / x16表示 Lane 数。所以同样是 PCIe 3.0x4 肯定比 x1 带宽高。同样是 x4PCIe 4.0 又比 PCIe 3.0 更快。7. PCIe 向下兼容PCIe 还有一个很重要的特点向下兼容。比如PCIe 4.0 主板可以插 PCIe 3.0 设备PCIe 3.0 设备插到 PCIe 4.0 插槽里也能工作只是最终速率会按双方都支持的较低版本运行。Lane 数也类似。比如一个 x4 设备插到更宽的插槽上通常会按它自己支持的 Lane 数工作。反过来如果一个设备需要 x4但平台实际只给了 x1那它可能只能跑 x1甚至无法满足性能需求。所以选型时不要只看“支持 PCIe”还要看支持哪个版本支持几条 Lane实际板子引出了几条 Lane设备最终协商到了什么速率8. Link 是什么两个 PCIe 设备之间建立起来的连接通常称为 Link。一个 Link 可以由 1 条或多条 Lane 组成。比如PCIe x1 Link1 条 LanePCIe x4 Link4 条 LanePCIe x16 Link16 条 LanePCIe 设备上电后并不是一开始就直接高速传输。它需要经过链路训练也就是常说的 Link Training。训练完成后双方会协商出当前速率当前 Lane 数链路状态。如果信号质量不好或者板级设计有问题可能会出现Link 起不来只协商到低速x4 变成 x1Gen3 退到 Gen2系统识别不到设备。这些就是后面调 PCIe 时经常会遇到的问题。9. PCIe 常见应用场景1PC 场景PC 里最常见的是独立显卡常见 x16NVMe SSD常见 x4网卡 / 声卡 / 采集卡常见 x1 / x4。比如 NVMe SSD 为什么比 SATA SSD 快很多很大原因就是 NVMe 走 PCIe而 SATA 带宽上限低很多。2服务器 / 工业设备服务器和工业设备里PCIe 更常用于高带宽扩展多网口阵列卡RAID / HBA 卡高速采集卡AI 推理卡FPGA 卡GPU 加速卡高速存储扩展。这些设备对带宽、延迟、稳定性要求都比较高。3嵌入式平台在嵌入式平台里PCIe 也很常见。比如 RK3588 / RK3576 这类 SoCPCIe 可以用来接NVMe SSDPCIe WiFi4G / 5G 模块千兆 / 2.5G 网卡工业采集卡AI 扩展模块。嵌入式里常见的可能是PCIe 2.0 x1PCIe 3.0 x1PCIe 3.0 x2PCIe 3.0 x4。具体支持什么版本、多少 Lane要看 SoC 手册和板级设计。10. 嵌入式里看 PCIe重点关注什么在嵌入式项目里PCIe 不只是软件问题也不是随便接上就能跑。要重点关注参考时钟 REFCLK复位 PERST#电源时序差分线 TX/RX 是否接对AC 耦合电容Lane 数配置PCIe 版本配置时钟源是 Common Clock 还是 Separate ClockPCB 差分阻抗线长和走线匹配设备树配置内核驱动支持。尤其是高速 PCIe硬件设计非常关键。如果链路起不来软件能做的有限。很多时候最后都要回到原理图、PCB、时钟、复位和示波器/协议分析仪上。11. PCIe 和 I2C / SPI 最大区别前面我们学过 I2C 和 SPI。它们和 PCIe 有明显区别。I2C低速两根线适合传感器、PMIC、触摸等配置类设备SPI中高速协议简单适合 Flash、屏幕、ADC 等板级外设PCIe高速复杂总线适合 SSD、网卡、加速卡等大带宽设备。I2C / SPI 很多时候是外设寄存器读写。PCIe 则是完整的高速互连系统涉及枚举配置空间BARDMA中断电源管理链路训练协议分层驱动模型。所以 PCIe 学起来会比 I2C / SPI 更复杂。但刚入门时不用怕先抓住几个关键词Root ComplexEndpointLinkLaneGenBARMSIDMA。后面再慢慢拆。12. PCIe 最新发展怎么看PCIe 规范一直在往更高速发展。PCI特殊兴趣组织https://pcisig.com/截至目前PCIe 7.0 已经发布PCIe 8.0 也已经在推进目标是达到 256.0 GT/s并计划在 2028 年发布正式规范。但注意规范更新不等于工程项目马上就能用上。实际产品落地会滞后很多。在嵌入式开发里目前更常见的还是 PCIe 2.0 / 3.0 / 4.0 这类配置。所以对于我们做 BSP / 嵌入式调试来说重点不是追最新版本而是把当前平台支持的版本、Lane 数、链路训练和驱动适配搞清楚。13. 总结PCIe 可以简单理解成CPU / SoC 和高速外设之间的高速点对点通信通道。它的几个核心概念串行点对点每个设备通过独立 Link 通信差分传输每个 Lane 包含 TX/RX 两对差分线版本 Gen决定单 Lane 速度Lane 数决定总带宽Link两个 PCIe 设备之间建立的通信链路Root Complex主控侧Endpoint外设侧。一句话记住PCIe 的带宽由“版本 × Lane 数”共同决定。在嵌入式平台里PCIe 常用于 NVMe SSD、WiFi / 5G 模块、网卡、采集卡、AI 加速模块等高速外设。不过 PCIe 比 I2C / SPI 复杂得多调试时不能只看软件。时钟、复位、电源、差分线、Lane、设备树、内核驱动一个环节没对上设备就可能枚举不出来。完

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询