开发者必备,10 分钟搞定 RK3588 PCIE 拆分!

描述

 

前言:

在嵌入式开发中,PCIe 接口的灵活配置直接影响设备扩展能力与性能发挥。RK3588作为旗舰芯片,其 PCIe 拆分机制更是让硬件设计与软件调试拥有了更多可能性。今天这篇技术笔记,就带大家快速吃透 RK3588 PCIE 拆分的核心逻辑、配置步骤与实战技巧,轻松上手!


 

一、RK3588 PCIE拆分映射关系图

 

PCIE的拆分机制的核心主要在于对于 PCIE PHY 的灵活拆分,并根据实际拆分情况进行PCIE控制器的匹配,从而实现不同 Lane 组合的扩展方案。

RK3588 PCIe 5 个 Controller 和 5 个 PHY 映射关系图:

PCIe

RK3588 的 PCIe 资源堪称豪华,这也是拆分能力的基础:

5 个 PCIe 控制器:1 个 4Lane DM 模式(支持 RC/EP)、1 个 2Lane RC 模式、3 个 1Lane RC 模式

两类 PHY 资源:PCIe 3.0 PHY(2 个 Port 共 4 个 Lane,支持拆分)+ 3 个 PCIe 2.0 Combo PHY(可与 SATA/USB 共用)


 

简单说,拆分的本质就是 “把 4 个PCIE 3.0 Lane 按需求拆成不同组合”,比如 4Lane×1、2Lane×2、2Lane+1Lane+1Lane,或是 1Lane×4,再通过设备树(DTS)配置让控制器与拆分后的 Lane 精准对接。

以PCIE 3.0拆分为示例,常见拆分组合直接套用:

4Lane×1:占用 3.0 PHY Port0+Port1 全通道,对接 4Lane 控制器

2Lane×2:Port0、Port1 各占 2Lane,分别对接 4Lane、2Lane 控制器

2Lane+1Lane+1Lane:Port0 占 2Lane,Port1 拆为两个 1Lane,对接 3 个控制器

1Lane×4:Port0、Port1 各拆为两个 1Lane,对接 4 个控制器

注意事项:拆分后若某组 PCIe 未使用,需将其禁用(disabled),但电源必须持续供电,否则会导致 PCIe 异常!


 

二、实战配置:DTS 配置详解

 

拆分的核心操作都在设备树(DTS)中完成,无需修改驱动,关键配置分两类:控制器配置和 PHY 配置。

 2.1  章控制器常用配置

compatible:指定工作模式(RC/EP),RK3588 需配置为 “rockchip,rk3588-pcie”(RC 模式)或 “rockchip,rk3588-pcie-ep”(EP 模式)

reset-gpios:必配项!设置 PERST# 复位信号,多 Lane 拆分时每个节点需配置不同引脚

num-lanes:Lane 数量,按实际拆分情况配置(如 1、2、4)

phys:指定 PHY 引用,Combo PHY 需同时声明工作模式(如<&combphy1_ps PHY_TYPE_PCIE>)


 

 2.2  PHY 配置核心

PCIe 3.0 PHY 的模式配置是关键,直接决定拆分方式:

  •  
  •  
  •  
  •  

&pcie30phy {    rockchip,pcie30-phymode = ; // 拆分模式    status = "okay";};

不同拆分对应的模式参数:

4Lane×1:PHY_MODE_PCIE_AGGREGATION(4)

2Lane×2:PHY_MODE_PCIE_NANBNB(0)

2Lane+1Lane+1Lane:PHY_MODE_PCIE_NANBBI(1)

1Lane×4:PHY_MODE_PCIE_NABIBI(3)


 

 2.3  典型场景配置示例

场景 1:3.0 4Lane RC + 2 个 2.0 1Lane

PCIe

  •  
  •  

// 电源配置vcc3v3_pcie30: vcc3v3-pcie30 {    compatible = "regulator-fixed";    regulator-name = "vcc3v3_pcie30";    regulator-min-microvolt = <3300000>;    regulator-max-microvolt = <3300000>;    enable-active-high;    gpios = <&gpio3 RK_PC3 GPIO_ACTIVE_HIGH>;    startup-delay-us = <5000>;    vin-supply = <&vcc12v_dcin>;};// Combo PHY使能&combphy1_ps { status = "okay"; };&combphy2_psu { status = "okay"; };// 1Lane控制器配置&pcie2x1l0 {    reset-gpios = <&gpio4 RK_PA5 GPIO_ACTIVE_HIGH>;    rockchip,skip-scan-in-resume;    status = "okay";};&pcie2x1l1 {    reset-gpios = <&gpio4 RK_PA2 GPIO_ACTIVE_HIGH>;    pinctrl-names = "default";    pinctrl-0 = <&rtl8111_isolate>;    status = "okay";};// 3.0 PHY配置(4Lane模式)&pcie30phy {    rockchip,pcie30-phymode = ;    status = "okay";};// 4Lane控制器配置&pcie3x4 {    reset-gpios = <&gpio4 RK_PB6 GPIO_ACTIVE_HIGH>;    vpcie3v3-supply = <&vcc3v3_pcie30>;    status = "okay";};

场景 2:3.0 拆分为 2 个 2Lane + 3 个 2.0 1Lane

PCIe

核心修改:PHY 模式改为PHY_MODE_PCIE_NANBNB,4Lane 控制器配置num-lanes = <2>,启用 2Lane 控制器(&pcie3x2)。

场景 3:3.0 拆分为 4 个 1Lane + 1 个 2.0 1Lane

PCIe

核心修改:PHY 模式改为PHY_MODE_PCIE_NABIBI,4Lane、2Lane 控制器均配置num-lanes = <1>,禁用对应 Combo PHY。


 

三、硬件设计关键要点

 

软件配置再完美,硬件不匹配也会功亏一篑,这3点必须注意:

1. 物理链路:确保拆分后的 Lane 与控制器的 TX/RX 信号对应,比如 1Lane×4 时,4 个通道需分别连接 PHY 的不同 Lane;RK3588 可支持多种 PCIe 模式的组合,最多可以 5 种模式同时使用。

PCIe

2. 时钟配置:3.0 的 REFCLKP/N 仅支持输入,4 个 1Lane 拆分时需为每个通道单独提供时钟;2.0 的 REFCLKP/N 支持输入 / 输出,默认由 RK3588 提供;

PCIe

3. 复位信号:每个拆分节点的 CLKREQ、WAKEN、PERST# 引脚必须独立配置并对应,否则无法稳定建立链路;

PCIe


 

四、总结

 

由此我们可以看到,在RK3588中其PCIe拆分的核心精髓,在于对PCIe 3.0 PHY物理通道的灵活划分,并与对应的控制器进行精准匹配。 

成功拆分配置关键在于:

1、硬件设计:需要保证物理链路、时钟、复位信号与拆分之后的通道配置一一对应。拆分本质上其实就是对于PCIE 3.0 PHY进行Lane通道的拆分,并将其与对应的控制器进行匹配和连接。

2、软件设置:需要通过设备树的配置来精确描述硬件链接,核心在于配置好PCIE PHY的相关模式,以及管理好各个控制器节点的复位信号以及使能状态。

通过理解PCIE的资源分配图,了解控制器以及PHYy之间的映射关系,注意DTS设备树的配置方式,便能够在开发过程中快速实现RK3588 PCIE 高速接口方案。

广州眺望电子科技有限公司专注于嵌入式处理器模组的研发与应用,提供从硬件设计到驱动开发,系统解决方案的全流程技术支持。欢迎关注我们的公众号,获取更多嵌入式项目开发实战经验。

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分