一文打通Rockchip DP调试:从原理到实战,覆盖RK3399/RK3576/RK3588全平台

电子说

1.4w人已加入

描述

 

 

嵌入式开发中,DisplayPortDP)接口的调试常让工程师头疼 —— 不同芯片特性差异大、Type-C 与标准口配置不同、高分辨率输出异常、MST 多屏适配难… 尤其是 Rockchip RK3399RK3576RK3588 这三款主流芯片,DP 功能和调试逻辑各有侧重。

 

 

今天从原理配置代码调试排坑,手把手教你搞定全平台 DP 调试,新手也能快速上手!

 

 

一、先懂原理:三大芯片 DP 核心特性差异

 

调试前必须明确芯片能力,避免功能不支持却硬调” 的无用功。先看三款芯片的 DP 核心参数对比:

 

 

特性

 

 

RK3399

 

 

RK3576

 

 

RK3588

 

 

DP 版本

 

 

1.2

 

 

1.4a

 

 

1.4a

 

 

最大分辨率

 

 

4K@60HzVOPB

 

 

4K@120Hz

 

 

8K@30Hz

 

 

MST 多流模式

 

 

不支持

 

 

支持(路 Stream

 

 

不支持

 

 

VOP 数量 能力

 

 

个(VOPB4KVOPL2.6K

 

 

个 Video Port(对应 路 Stream

 

 

个 Video Port(仅 0-2 支持 DP

 

 

PHY 类型

 

 

Type-C PHY(与 USB3.0 共用)

 

 

USBDP PHY(与 USB3.0 共用)

 

 

USBDP PHY(双 PHY

 

 

特殊功能

 

 

支持 PHY 信号微调

 

 

支持 MST 菊花链 / HUB

 

 

支持双 DP 拼接(Split Mode

 

 

内核版本适配

 

 

4.4 及以上

 

 

6.1

 

 

5.10/6.1

 

 

关键原理补充

 

1.VOP 与 DP 的连接逻辑

 

 

RK3399DP 可选择 VOPB(高分辨率)或 VOPL(低分辨率)作为输入,同一时间仅用 个 U-PHY或 1);

 

 

RK3576个 DP 控制器 + 3 路 StreamStream-0 对应 VOP Video Port04K)、Stream-1 对应 Port12K)、Stream-2 对应 Port21080P),MST 模式需按能力绑定;

 

 

RK3588个 DP 控制器(DP0/DP1),各对应 路 Stream,仅 Video Port0-2 可输出到 DP,不支持 MST

 

 

1.PHY lane 复用规则

 

 

三款芯片均与 USB3.0 共用 PHYType-C 接口下需通过 PD 协议协商 lane 映射(如 RK3399 支持 C/D/E 三种映射,RK3576/RK3588 支持正反插自动切换),标准口需手动配置 lane 序号(4 lane/2 lane)。

 

 

二、实战配置:分模式 + 分平台落地

 

DP 配置核心分Type-C Alt ModeType-C 接口)和Legacy Mode(标准 DP 口),不同平台、不同内核版本配置差异较大,直接上可复用的实战方案。

 

 

1. 通用前提:编译选项与固件准备

 

无论哪款芯片,先确保内核编译选项开启:

 

 

  •  
  •  
  •  
  •  
  •  
# 必须开启的选项CONFIG_DRM_DP_AUX_CHARDEV=y  # 支持DPCD读写CONFIG_DRM_ROCKCHIP=y        # Rockchip DRM核心CONFIG_USB_TYPEC_TCPM=y      # Type-C TCPM框架(5.10+内核)CONFIG_EXTCON_PD_VIRTUAL=y   # RK3399 4.19及以下内核需开启(虚拟PD)

特殊固件:RK3399 DP 需加载微控制器固件,存放路径为/lib/firmware/rockchip/dptx.bin,缺失会导致驱动加载失败。

 

 

2. Type-C Alt Mode 配置(主流场景)

 

Type-C 接口需通过 PD 协议协商 lane 和 HPD,核心是配置DP 控制器 + PHY+PD 芯片,分平台示例:

 

 

1RK3399(内核 5.10+TCPM 架构)

 

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
# 1. 使能DP控制器,绑定VOPB(高分辨率)&cdn_dp {    status = "okay";    phys = <&tcphy0_dp>;  # 关联PHY0};&dp_in_vopb { status = "okay"; };  # 用VOPB&dp_in_vopl { status = "disabled"; };  # 禁用VOPL# 2. 配置Type-C PHY(TCphy0)&tcphy0 {    status = "okay";    svid = <0xff01>;  # DP固定SVID    orientation-switch;  # 支持正反插    port {        #address-cells = <1>;        #size-cells = <0>;        # 正反插切换端点        tcphy0_orientation_switch: endpoint@0 {            reg = <0>;            remote-endpoint = <&usbc0_orien_sw>;        };        # DP Alt Mode切换端点        tcphy_dp_altmode_switch: endpoint@1 {            reg = <1>;            remote-endpoint = <&dp_mode_sw>;        };    };};# 3. 配置PD芯片(以fusb302为例)&i2c2 {    usbc0: fusb302@22 {        compatible = "fcs,fusb302";        reg = <0x22>;        interrupts = <&gpio3 RK_PB4 IRQ_TYPE_LEVEL_LOW>;        vbus-supply = <&vbus5v0_typec>;        status = "okay";        usb_con: connector {            compatible = "usb-c-connector";            displayport = <&cdn_dp>;  # 绑定DP控制器            altmodes {                altmode@0 {                    reg = <0>;                    svid = <0xff01>;  # 对应DP                    vdo = <0xffffffff>;                };            };            # 绑定PHY切换端点            ports {                port@1 {                    reg = <1>;                    dp_mode_sw: endpoint {                        remote-endpoint = <&tcphy_dp_altmode_switch>;                    };                };            };        };    };};

2RK3576(支持 MSTType-C 模式)

 

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
# 1. 使能DP控制器+Stream-0(MST必须开Stream-0)&dp { status = "okay"; };  # 主DP节点&dp0 { status = "okay"; }; # Stream-0(SST/MST都需开)&dp0_in_vp2 { status = "okay"; };  # Stream-0绑定VOP Port2# 2. 配置USBDP PHY&usbdp_phy0 {    status = "okay";    orientation-switch;    svid = <0xff01>;    # SBU引脚(AUX_CH复用)    sbu1-dc-gpios = <&gpio4 RK_PA6 GPIO_ACTIVE_HIGH>;    sbu2-dc-gpios = <&gpio4 RK_PA7 GPIO_ACTIVE_HIGH>;    port {        # 同RK3399,绑定orientation和altmode端点    };};# 3. PD芯片配置(同RK3399,用fusb302/hub311)

3RK3588(双 DPType-C 模式)

 

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
# 使能DP0+绑定VOP Port2&dp0 { status = "okay"; };&dp0_in_vp2 { status = "okay"; };# 配置USBDP PHY0&usbdp_phy0 {    status = "okay";    orientation-switch;    svid = <0xff01>;    sbu1-dc-gpios = <&gpio4 RK_PA6 GPIO_ACTIVE_HIGH>;    sbu2-dc-gpios = <&gpio4 RK_PA7 GPIO_ACTIVE_HIGH>;};# PD芯片配置(同前)

3. Legacy Mode(标准 DP 口)配置

 

标准 DP 口无需 PD 协商,但需手动配置HPD 引脚lane 映射,以 RK3399(内核 5.10+)为例:

 

 

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
# 1. DP控制器配置(用U-PHY0,绑定VOPB)&cdn_dp {    status = "okay";    phys = <&tcphy0_dp>;    pinctrl-names = "default";    pinctrl-0 = <&dp_hpd>;  # HPD引脚配置    hpd-gpios = <&gpio4 RK_PD1 GPIO_ACTIVE_HIGH>;  # HPD用GPIO4_D1};&dp_in_vopb { status = "okay"; };# 2. PHY lane映射(4 lane模式,按硬件原理图适配)&tcphy0 {    status = "okay";    rockchip,dp-lane-mux = <2 3 0 1>;  # DP lane0→PHY2,lane1→PHY3,lane2→PHY0,lane3→PHY1};# 3. 配置HPD引脚&pinctrl {    dp {        dp_hpd: dp-hpd {            rockchip,pins = <4 RK_PD1 RK_FUNC_GPIO &pcfg_pull_down>;        };    };};

注意RK3399 内核 4.19 及以下需打HPD 通知补丁extcon-pd-virtual 驱动),开启CONFIG_EXTCON_PD_VIRTUAL=y,具体补丁见官方指南 2.2.2 节。

 

 

三、代码路径:快速定位核心文件

 

调试时需修改驱动或 DTS,先记准各平台的核心代码位置:

 

 

模块

 

 

RK3399

 

 

RK3576/RK3588

 

 

DP 控制器驱动

 

 

drivers/gpu/drm/rockchip/cdn-dp-*.c

 

 

drivers/gpu/drm/rockchip/dw-dp.c

 

 

PHY 驱动

 

 

drivers/phy/rockchip/phy-rockchip-typec.c

 

 

drivers/phy/rockchip/phy-rockchip-usbdp.c

 

 

参考 DTS

 

 

arch/arm64/boot/dts/rockchip/rk3399-evb-ind.dtsi

 

 

RK3576rk3576-evb1.dtsiRK3588rk3588-evb1-lp4.dtsi

 

 

PD 芯片驱动

 

 

drivers/usb/typec/tcpm/fusb302.c(通用)

 

 

drivers/usb/typec/tcpm/fusb302.c

示例:若 RK3399 DP Link Training 失败,可查看cdn-dp-link-training.c中的cdn_dp_link_train()函数,添加日志打印协商过程;RK3588 PHY 异常则查phy-rockchip-usbdp.cudphy_power_on/off()函数。

 

 

四、调试方法:大核心工具 平台特有技巧

 

DP 调试的核心是 先看状态,再查日志,最后硬软结合,以下方法覆盖 90% 场景:

 

 

1. 基础状态排查:确认 DP 是否被识别

 

所有调试从连接状态” 开始,通过/sys/class/drm节点快速判断:

 

 

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
# 1. 查看所有DRM设备(找DP节点,如card0-DP-1)ls /sys/class/drm/# 2. 查看DP使能/连接状态cat /sys/class/drm/card0-DP-1/enabled  # enabled/disabledcat /sys/class/drm/card0-DP-1/status  # connected/disconnected# 3. 查看显示器支持的分辨率cat /sys/class/drm/card0-DP-1/modes# 4. 保存EDID(用于分析显示器参数)cat /sys/class/drm/card0-DP-1/edid > /data/dp_edid.bin
RK3588

解读:若statusdisconnectedType-C 口查 PD 协商,标准口查 HPD 引脚;若enableddisabled,查驱动加载或 DTS 绑定。

 

 

2. 强制控制 DP:快速测试硬件是否正常

 

当怀疑软件使能逻辑有问题时,强制开启 / 关闭 DP 验证硬件:

 

 

  •  
  •  
  •  
  •  
  •  
  •  
# 强制禁用DPecho off > /sys/class/drm/card0-DP-1/status# 强制使能DPecho on > /sys/class/drm/card0-DP-1/status# 恢复热插拔检测echo detect > /sys/class/drm/card0-DP-1/status

3. DPCD 读写:排查 AUX_CH 通信

 

AUX_CH 是 DP 的 控制通道,读写 DPCDDP 配置数据)可判断 AUX 是否正常:

 

 

  •  
  •  
  •  
  •  
  •  
# 前提:开启CONFIG_DRM_DP_AUX_CHARDEV=y# 读取DPCD(例:读0x00200开始的2个寄存器)dd if=/dev/drm_dp_aux0 bs=1 skip=$((0x00200)) count=2 status=none | od -tx1# 写入DPCD(例:向0x100写入0x0a、0x80)echo -e -n "x0ax80" | dd of=/dev/drm_dp_aux0 bs=1 seek=$((0x100)) count=2 status=none

正常标志:读取返回ret=0,异常则返回-110(超时),需查 AUX 时钟或硬件。

 

 

4. Type-C 专属调试:PD 协商与 TCPM 日志

 

Type-C 口连接异常(如disconnected),优先查 PD 芯片和 TCPM 框架日志:

 

 

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
# 1. 查看PD/TCPM节点(以fusb302为例)ls /sys/kernel/debug/usb/  # 找fusb302-2-0022(PD芯片)、tcpm-2-0022(TCPM框架)# 2. 查看TCPM协商日志(关键看DISCOVER_IDENTITY/ENTER_MODE等阶段)cat /sys/kernel/debug/usb/tcpm-2-0022# 3. 查看Type-C正反插状态cat /sys/class/typec/port0/orientation  # normal/reverse# 4. 确认DP Alt Mode是否识别(svid=0xff01为DP)cat /sys/class/typec/port0-partner/port0-partner.0/svid

正常流程:日志需包含

DISCOVER_IDENTITYDISCOVER_SVIDSDFP_TO_UFP_ENTER_MODEATTENTION,缺失则查 PD 芯片供电或 I2C 通信。

 

 

5. 平台特有调试技巧

 

1RK3399PHY 信号微调

 

 DP 输出花屏、闪屏,可能是 PHY 信号幅值 加重不足,需调整寄存器(UPHY0 基地址0xff7c0000):

 

 

  •  
  •  
  •  
  •  
  •  
  •  
# 1. 电压幅值调整(lane0,0x00最大,0x36最小)io -4 0xff7d0140 0x2a  # 中等幅值# 2. 预加重调整(lane0,0xff最大,0x00最小)io -4 0xff7d0130 0x15  # 中等加重# 3. boost使能(增强信号,lane0)io -4 0xff7d0784 0x700  # 最大boost

2RK3576MST 多屏信息查看

 

MST 模式下需确认拓扑和带宽分配,通过以下命令排查:

 

 

  •  
  •  
# 查看MST拓扑、带宽、连接器路径cat /sys/kernel/debug/dri/0/DP-1/dp_mst_info

重点看MST Port Info(设备连接是否正确)和Atomic state info(带宽是否超限)。

 

 

3RK3588:高分辨率配置验证

 

4K@120Hz 输出需提高 VOP ACLK,验证是否生效:

 

 

  •  
  •  
# 查看VOP ACLK(需为800MHz)cat /sys/kernel/debug/clk/clk_summary | grep "aclk_vop"

6. 日志增强:调整 DRM 打印等级

 

当需要更详细的调试信息(如 ATOMIC 提交、DP Link Training),动态开启日志:

 

 

  •  
  •  
  •  
  •  
# DRM日志等级:0x10=ATOMIC,0x100=DP相关echo 0x110 > /sys/module/drm/parameters/debug  # 同时开启ATOMIC和DP日志# 查看日志dmesg | grep -i "dp"

五、问题解决:类高频异常实战排坑

 

结合官方 FAQ 和实际项目经验,整理最常遇到的问题及解决方案:

 

 

1. 插入 DP 无显示,但 Link Training 成功

 

现象:日志有clock recovery succeeded+channel equalization succeeded,但显示器无图像。

 

 

原因 & 解决

 

 

dclk 分配错误:日志中set dclk_vop2 to XXX, get YYY(请求值实际值),需查时钟树配置(cat /sys/kernel/debug/clk/clk_summary),联系 FAE 确认分频参数;

 

 

未分配图层:执行cat /sys/kernel/debug/dri/0/summary,若无Esmartx-win0: ACTIVE,需用户空间分配显示缓冲区(如调用 DRM 接口创建图层)。

 

 

RK3588

2. Type-C 口 DP 始终 disconnected

 

现象statusdisconnectedTCPM 日志无协商流程。

 

 

解决步骤

 

 

1. PD 芯片供电:确认vbus5v0_typec是否正常(用万用表测电压);

 

 

2.提高 I2C 速率:在 PD 芯片节点添加clock-frequency = <400000>(默认 100K,提至 400K);

 

 

3.换认证 Type-C 线:部分线材不支持 DP Alt Mode,优先用原装线;

 

 

4.RK3399 内核 4.19 及以下:确认extcon-pd-virtual驱动已加载(lsmod | grep extcon_pd_virtual)。

 

 

3. AUX_CH 异常(ret=-110

 

现象DPCD 读写超时,日志有failed to probe DP link: -110

 

 

解决方向

 

 

aux16m 时钟异常RK3576/RK3588 默认clk_aux16m 15.84MHz,查cat /sys/kernel/debug/clk/clk_summary | grep "aux16m",异常则恢复 GPLL 为 1188MHz

 

 

DP dual mode 转接线RK3588 不支持 dual modeDP+HDMI TMDS),若用 “DP 转 HDMI” 线,需换 HDMI2.0 及以上版本线材;

 

 

信号干扰Type-C 直连时,断开 USB DP/DM 引脚测试,换屏蔽性好的线材。

 

 

4. RK3399 标准 DP 口 HPD 无响应

 

现象:标准 DP 口插入显示器,status仍为disconnected

 

 

解决

 

 

内核 5.10+:确认 DTS hpd-gpios配置正确,引脚电平是否随插拔变化(用gpiod_get_value命令);

 

 

内核 4.19 及以下:打 HPD 通知补丁(extcon-pd-virtual驱动),开启CONFIG_EXTCON_PD_VIRTUAL=yDTS 添加虚拟 PD 节点(见官方指南 2.2.3 节)。

 

 

5. RK3576 MST 多屏输出部分无显示

 

现象路 Stream 中某路无图像,dp_mst_info显示带宽充足。

 

 

解决

 

 

检查 Stream 与 VOP 绑定:必须按 能力匹配” 绑定(Video Port0→Stream-0Port1→Stream-1Port2→Stream-2),DTS 中禁用不匹配的 endpoint

 

 

分辨率过滤:Stream-2 最大支持 1080P,若接 2K 显示器会被过滤,需限制用户空间输出分辨率。

 

 

六、总结:全平台调试关键点

 

1.RK3399:关注内核版本适配(TCPM/EXTCON)、PHY 信号微调、HPD 引脚配置;

 

 

2.RK3576MST 模式需算带宽(总带宽≤7.97Gbps)、Stream-VOP 严格绑定、AUX 时钟检查;

 

 

3.RK3588:双 DP 配置区分 DP0/DP14K@120Hz 需提 VOP ACLK、避免 dual mode 转接线。

 

 

最后给个通用调试流程:先看连接状态再查驱动日志硬件测信号(PHY/AUX软件调配置(DTS / 时钟) ,按层排查,DP 问题很快就能定位!

 

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

全部0条评论

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

×
20
完善资料,
赚取积分