基于RK3588的PCIE外设的实现

目标

PCI,即外围组件互联Peripheral Component Interconnect。

PCIe是PCI的升级,即PCI Express,其最高速度比PCI(133MB/s)有了极大提高(10GB/s)。

有x2,x4,x8,x12,x16,x32通道的7种规格。

涉及PCIE的3种角色

  1. Root Complex,简称RC,根节点,接入CPU。
  2. Switch,简称SW,用于拓展PCIE接口,类似HUB作用。
  3. Endpoint,简称EP,终端设备

目的

现在有2块RK3588的设备,PCIE接口互相连接在一起,要求他们使用PCIE进行通讯,这意味着其中一块是RC,如果电脑一样,承担HOST角色;另外一块是EP,类似一种能接入电脑PCIE卡槽的外设。

RK3588芯片关于PCIe的介绍

RK3588共有5个PCIe的控制器,硬件IP是一样的,配置不一样,其中一个4Lane DM模式可以支持作为 EP使用,另外一个2Lane和3个1Lane控制器均只能作为RC使用。

RK3588有两种PCIe PHY,其中一种为pcie3.0PHY,含2个Port共4个Lane,另一种是pcie2.0的PHY有3 个,每个都是2.0 1Lane,跟SATA和USB combo使用。 pcie3.0 PHY的4Lane可以根据实际需求拆分使用,拆分后需要合理配置对应的控制器,所有配置在DTS 中完成,无需修改驱动。

使用限制:

  1. pcie30phy拆分后,pcie30x4控制器,工作于2Lane模式时只能固定配合pcie30phy的port0,工 作于1Lane模式时,只能固定配合pcie30phy的port0lane0;

2. pcie30phy拆分后,pcie30x2控制器,工作于2Lane模式时只能固定配合pcie30phy的port1,工 作于1Lane模式时,只能固定配合pcie30phy的port1lane0;

3. pcie30phy拆分为4个1Lane,pcie3phy的port0lane1只能固定配合pcie2x1l0控制器,pcie3phy 的port1lane1只能固定配合pcie2x1l1控制器;

 4. pcie30x4控制器工作于EP模式,可以使用4Lane模式,或者2Lane模式使用pcie30phy的port0, pcie30phy的port1中2lane可以作为RC配合其他控制器使用。默认使用common clock作为 reference clock时,无法实现pcie30phy port0的lane0工作于EP模式,lane1工作于RC模式配合 其他控制器使用,因为Port0的两个lane是共用一个输入的reference clock,RC和EP同时使用 clock可能会有冲突。

5. RK3588 pcie30phy 如果只使用其中一个port,另一个port也需要供电,refclk等其他信号可接地

### RK3588芯片PCIE接口使用配置 #### 配置概述 RK3588芯片的PCIe接口支持多种工作模式,包括根复合体(Root Complex, RC)和端点(Endpoint, EP)。当作为RC功能时,需要特定的兼容属性设置。具体来说,在设备树中应配置`compatible = "rockchip,rk3588-pcie", "snps,dw-pcie"`[^2]。 #### 设备树节点示例 为了使RK3588能够正确识别并初始化其PCIe接口,需在对应的设备树文件中定义如下结构: ```dts &pcie { compatible = "rockchip,rk3588-pcie", "snps,dw-pcie"; reg = <...>; interrupts = <...>; clocks = <...>; resets = <...>; status = "okay"; pinctrl-names = "default"; pinctrl-0 = <&pcie_pins_a>; num-lanes = <2>; /* 或者其他数量 */ max-link-speed = <3>; /* PCIe Gen3 */ snps,pads-non-sticky-bit; }; ``` 上述代码片段展示了如何通过修改设备树来适配RK3588PCIe特性,其中包含了必要的寄存器映射、中断线路以及电源管理等方面的信息。 #### 支持的外设及其驱动加载 对于常见的外围组件如以太网控制器RTL8125,在Linux Kernel版本5.10及以上,默认情况下已内置相应的驱动模块。只需确保编译选项`CONFIG_R8169=m`被启用即可自动加载此网卡的支持[^3]。 #### 故障排查建议 如果遇到启动过程中停滞不前的情况,可能是因为某些硬件或软件层面的问题所引起。一种有效的解决方法是尝试替换官方提供的SDK中的内核镜像,这有助于排除因自定义改动而导致的潜在不稳定因素[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chenyq14

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值