2. PCIe协议体系与Marvell产品映射

PCIe不是一块“黑盒芯片”,而是一套严格分层的协议体系。理解这套体系,是理解Marvell PCIe控制器、交换芯片和PHY产品定位的前提。本节先建立PCIe的三层协议栈模型,再梳理事务类型与配置空间,最后把协议层次与Marvell的产品线一一对应起来。

一、PCIe三层协议栈:事务层、数据链路层、物理层

PCIe规范把通信过程划分为三个层次,自上而下分别是事务层(Transaction Layer)、数据链路层(Data Link Layer)和物理层(Physical Layer)。发送方向的数据自上层向下封装,接收方向则自下层向上解封装。

事务层是PCIe与软件交互的边界。它负责生成和解析事务层包(TLP,Transaction Layer Packet),处理请求与完成,管理流量控制信用(Flow Control Credit),并支持虚拟通道(VC)与服务质量(QoS)。软件发出的存储器读写、配置读写、I/O读写,最终都由事务层转化为TLP。

数据链路层位于事务层与物理层之间,核心职责是保证TLP在单条链路上可靠传输。它给TLP加上序列号(Sequence Number)和链路CRC(LCRC),生成数据链路层包(DLLP),并实现ACK/NAK重传机制。若接收端校验失败,会通过NAK触发发送端重传,从而把物理链路的偶发误码屏蔽在链路层内部。

物理层负责把数据链路层的包转换为差分信号,完成串并转换、时钟恢复、均衡、加扰/解扰以及链路训练(LTSSM)。PCIe Gen1到Gen5采用8b/10b或128b/130b编码,Gen6引入PAM4与FLIT模式。物理层的电气特性直接决定了链路能跑多快、多远、多稳。

PCIe 三层协议栈与 Marvell 产品映射 软件 / 驱动层 配置空间访问 · 存储器读写 · MSI/MSI-X 中断 · 枚举与 BAR 分配 事务层 Transaction Layer TLP 生成/解析 · 请求与完成 · 流量控制信用 · VC/QoS · 事务排序 事务类型:Memory / IO / Config / Message / Completion 数据链路层 Data Link Layer 序列号 SN · LCRC 校验 · ACK/NAK 重传 · DLLP(Ack/Nak/PM/Flow Control) 保证单链路可靠传输,屏蔽物理层偶发误码 物理层 Physical Layer LTSSM 链路训练 · 加扰/解扰 · 8b/10b 或 128b/130b 编码 · SerDes · 均衡 Gen1~Gen5 NRZ,Gen6 PAM4 + FLIT;决定速率、距离与信号完整性 发送封装 接收解封装 Marvell 产品映射 控制器/端点:事务层+链路层+物理层集成 · 交换芯片:多端口事务层与路由 · PHY/SerDes:物理层电气与均衡

二、事务类型:PCIe到底在传什么

事务层定义了四类基本请求,加上完成包,构成PCIe的全部通信语义。

  • 存储器事务(Memory):读写系统内存或设备内存,是数据搬运的主力。读请求产生带数据的完成包(CplD),写请求为Posted写,不需要完成包。
  • 配置事务(Config):读写设备的配置空间,用于枚举、BAR分配、能力发现。配置读产生CplD,配置写为非Posted,需要完成确认。
  • I/O事务(IO):传统I/O读写,现代PCIe设备基本不再使用,仅用于兼容旧系统。
  • 消息事务(Message):传递中断(MSI/MSI-X)、电源管理、错误报告等带内消息,不占用存储器地址空间。

按是否需要完成包,事务又分为Posted(写、消息)和Non-Posted(读、配置写、I/O写)。Posted事务不等待完成,吞吐高但错误只能靠链路层重传或上层超时处理;Non-Posted事务必须等待完成包,能获得明确的成功/失败状态,但引入往返延迟。理解这一区别,对分析DMA吞吐和延迟至关重要。

三、配置空间:设备的“身份证”与“能力清单”

每个PCIe功能都有4KB配置空间,前256字节与PCI兼容,后384字节为PCIe扩展。关键区域包括:

区域 偏移 作用
Vendor / Device ID 0x00 / 0x02 厂商标识与设备型号,Marvell设备可据此识别
Command / Status 0x04 / 0x06 使能存储器/IO访问、总线主控,反映链路与错误状态
BAR0~BAR5 0x10~0x24 基地址寄存器,映射设备寄存器或内存窗口
Capabilities 链 0x34 起 PM、MSI、MSI-X、PCIe Capability、AER 等能力
PCIe 扩展配置 0x100 起 扩展能力、SR-IOV、ATS、PASID 等

枚举时,主机通过配置读获取Vendor/Device ID,分配BAR,再遍历Capabilities链发现设备能力。例如,若设备支持MSI-X,驱动会读取MSI-X Capability中的Table Size和Table BIR/Offset,据此映射中断表。若支持SR-IOV,则读取SR-IOV Capability中的VF数量与VF BAR布局。这些信息决定了驱动如何初始化设备。

四、Marvell PCIe产品线与协议层次的对应

Marvell的PCIe产品大致可分为三类,分别对应协议栈的不同层次与不同系统角色。

PCIe控制器/端点IP:集成事务层、数据链路层和物理层,作为设备侧或主机侧接口。典型应用包括SSD控制器、网卡、加速卡中的PCIe端点。它直接处理TLP生成、配置空间、MSI-X中断和DMA,是软件可见的“设备”。

PCIe交换芯片:在事务层实现多端口路由与交换。它维护每个端口的配置空间,完成TLP的地址路由、ID路由和隐式路由,并支持端口间流量隔离、QoS和热插拔。交换芯片把上游主机与多个下游设备连接起来,是构建PCIe拓扑的核心。

PHY/SerDes:聚焦物理层,完成串并转换、均衡、时钟恢复和链路训练。它决定链路速率(Gen3/4/5/6)、通道损耗预算和信号完整性。在系统设计中,PHY与控制器/交换芯片的配合决定了链路能否稳定跑到目标速率。

从调试视角看:链路训练失败看物理层(LTSSM、均衡、参考时钟);TLP重传或CRC错误看数据链路层(LCRC、ACK/NAK);配置空间读不到、BAR分配异常、中断不触发,则回到事务层与软件枚举。把问题定位到正确的层次,是PCIe排障的第一步。

把三层协议栈与Marvell产品线对齐后,可以看到:控制器和交换芯片都跨越事务层与链路层,区别在于端口数量与路由能力;PHY则专注物理层。选型时,先明确系统需要的是端点、交换还是PHY,再确认目标速率、通道数和配置空间能力,才能把协议需求落到具体产品上。