0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

ArmSoM Rockchip系列产品 通用教程 之 Display 使用

Rockchip系列教程 来源:Rockchip系列教程 作者:Rockchip系列教程 2024-03-06 15:50 次阅读

1. Display简介​

RK3588 的VOP (video output process)分为4个Port:

port 分辨率
VP0 4K
VP1 4K
VP2 4K
VP3 1080P

RK3588 VP 和各显⽰接口的连接关系:

wKgaomXm29uANya2AAFC6yr5YRE190.png

需要注意的是,RK3588 的 HDMI 和 DP ⽀持 8K 输出,但是在 8K 输出模式下,⼀个显⽰接口需要同时占⽤ VP0 和 VP1 。所以如果产 品上需要⽀持 8K 显⽰输出,VP1 上要注意不要连接其他显⽰接口。

1.2 RK3588支持的显示接口​

2个DP

2个HDMI/eDP 共用接口

2个MIPI DSI

BT656/BT1120

2. ArmSoM-W3显示接口​

ArmSoM-W3有着丰富的显示接口。最多支持四路显示输出:两路HDMI,一路MIPI-DSI,外加一路DP接口。可以做到多屏同显/异显。

下面对各个显示输出接口的配置和使用作基本的介绍

3. HDMI​

ArmSoM-W3硬件上有两个 HDMI 显示输出接口:2x HDMI OUT2.1

其中一个HDMI OUT 支持 8K@60fps 或者 4K@120fps另一个HDMI OUT 支持 4K@60fps

3.1 HDMI相关的DTS配置​

kernelarcharm64bootdtsrockchiprk3588-armsom-w3.dts

//打开 HDMI0 功能&hdmi0 {        status = "okay";};//打开 HDMI0 的 硬件 phy&hdptxphy_hdmi0 {        status = "okay";};//配置HDMI0到VP0上面&hdmi0_in_vp0 {        status = "okay";};//打开 HDMI0 音频输出&hdmi0_sound {        status = "okay";};//配置HDMI0上面显示开机logo&route_hdmi0 {        status = "okay";};//打开 hdmi1 功能&hdmi1 {        status = "okay";};//打开 hdmi1 的 硬件 phy&hdptxphy_hdmi1 {    status = "okay";};//配置HDMI1到VP1上面&hdmi1_in_vp1 {        status = "okay";};//打开 HDMI1 音频输出&hdmi1_sound {        status = "okay";};//配置HDMI1上面显示开机logo&route_hdmi1 {        status = "okay";};

4. DP​

ArmSoM-W3硬件上有一个 Type-C 接口输出的DP,分辨率可达 8192x4320@30Hz, PHY 链路速率可以达到 8.1Gbps/lane。

4.1 DTS配置​

4.1.1 DP 控制器的配置如下:​

&dp0 {status = "okay";};&dp0_in_vp2 {status = "okay";};

4.1.2 PHY 配置如下:​

&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   >;    port {        #address-cells = <   1   >;        #size-cells = <   0   >;        usbdp_phy0_orientation_switch: endpoint@0 {            reg = <   0   >;            remote-endpoint = <   &usbc0_orien_sw   >;        };        usbdp_phy0_dp_altmode_mux: endpoint@1 {            reg = <   1   >;            remote-endpoint = <   &dp_altmode_mux   >;        };    };};

4.1.3 Type-C 接口配置PD 芯片

Type-C 接口需要通过 Type-C 的 CC 检测和 PD 协商来配置 lane 和 HPD 的状态, 所以还需要配置 PD 芯 ⽚(当前⽀持的 PD 芯⽚有 fusb302, husb311):

&i2c4 {    status = "okay";    pinctrl-names = "default";    pinctrl-0 = <   &i2c4m1_xfer   >;    usbc0: fusb302@22 {        compatible = "fcs,fusb302";        reg = <   0x22   >;        interrupt-parent = <   &gpio3   >;        interrupts = <   RK_PB4 IRQ_TYPE_LEVEL_LOW   >;        int-n-gpios = <   &gpio3 RK_PB4 GPIO_ACTIVE_LOW   >;        pinctrl-names = "default";        pinctrl-0 = <   &usbc0_int   >;        //vbus-supply = <   &vcc12v_dcin   >;        vbus-supply = <   &vbus5v0_typec   >;        status = "okay";        ports {            #address-cells = <   1   >;            #size-cells = <   0   >;            port@0 {                reg = <   0   >;                usbc0_role_sw: endpoint@0 {                    remote-endpoint = <   &dwc3_0_role_switch   >;                };            };        };        usb_con: connector {            compatible = "usb-c-connector";            label = "USB-C";            data-role = "dual";            power-role = "dual";            try-power-role = "sink";            op-sink-microwatt = <   1000000   >;            sink-pdos =                <   PDO_FIXED(5000, 3000, PDO_FIXED_USB_COMM)                 PDO_FIXED(9000, 3000, PDO_FIXED_USB_COMM)                 PDO_FIXED(12000, 3000, PDO_FIXED_USB_COMM)   >;            source-pdos =                <   PDO_FIXED(5000, 3000, PDO_FIXED_USB_COMM)   >;            altmodes {                #address-cells = <   1   >;                #size-cells = <   0   >;                altmode@0 {                    reg = <   0   >;                    svid = <   0xff01   >;                    vdo = <   0xffffffff   >;                };            };            ports {                #address-cells = <   1   >;                #size-cells = <   0   >;                port@0 {                    reg = <   0   >;                    usbc0_orien_sw: endpoint {                        remote-endpoint = <   &usbdp_phy0_orientation_switch   >;                    };                };                port@1 {                    reg = <   1   >;                    dp_altmode_mux: endpoint {                        remote-endpoint = <   &usbdp_phy0_dp_altmode_mux   >;                    };                };            };        };    };};

4.1.4 配置DP开机 logo​

 &route_dp0 {    status = "okay";    connect = <   &vp2_out_dp0   >;};

需要注意的是,这⾥的 connect 属性配置 DP 在 U-Boot 阶段绑定 VOP Port2, 所以 dtsi 中的配置要允许 DP绑定 VOP Port2:

&dp0_in_vp2 {    status = "okay";};

提示

⽬前不⽀持 Type-C 接口的 DP 开机 logo!

4.2 调试​

4.2.1 查看 connector 状态:​

在 /sys/class/drm ⽬录下可以看到驱动注册的各个 card,其中 card0-DP-1 是 DP 显⽰设备

armsom@armsom:~$ ls /sys/class/drm/card0  card0-DP-1  card0-HDMI-A-1  card0-Writeback-1  card1  renderD128  renderD129  version

以 card0-DP-1 为例,其⽬录下有如下内容:

armsom@armsom:~$ ls /sys/class/drm/card0-DP-1/device  dpms  edid  enabled  modes  power  status  subsystem  uevent

enable 查看使能状态:

armsom@armsom:~$ cat /sys/class/drm/card0-DP-1/enableddisabled

status 查看连接状态:

armsom@armsom:~$ cat /sys/class/drm/card0-DP-1/statusdisconnected

4.2.2 强制使能/禁⽤ DP​

#强制禁⽤ DPrk3588_s:/ # echo off > /sys/class/drm/card0-DP-1/status#强制使能 DPrk3588_s:/ # echo on > /sys/class/drm/card0-DP-1/status#恢复热插拔检测rk3588_s:/ # echo detect > /sys/class/drm/card0-DP-1/status

5. MIPI DSI​

ArmSoM-W3硬件上有一个 MIPI-DSI 显示输出接口,支持 DPHY2.0 和 4 Lane 的数据输出,分辨率可达 4K@60Hz

5.1 原理图​

wKgZomXm2-GAL4XuAAHdZa8iSho165.png

5.3 MIPI DSI相关的DTS配置​

5.3.1背光配置​

dsi1_backlight: dsi1-backlight {        status = "okay";        compatible = "pwm-backlight";        pwms = <   &pwm2 0 25000 0   >;        brightness-levels = <              0  20  20  21  21  22  22  23             23  24  24  25  25  26  26  27             27  28  28  29  29  30  30  31             31  32  32  33  33  34  34  35             35  36  36  37  37  38  38  39             40  41  42  43  44  45  46  47             48  49  50  51  52  53  54  55             56  57  58  59  60  61  62  63             64  65  66  67  68  69  70  71             72  73  74  75  76  77  78  79             80  81  82  83  84  85  86  87             88  89  90  91  92  93  94  95             96  97  98  99 100 101 102 103            104 105 106 107 108 109 110 111            112 113 114 115 116 117 118 119            120 121 122 123 124 125 126 127            128 129 130 131 132 133 134 135            136 137 138 139 140 141 142 143            144 145 146 147 148 149 150 151            152 153 154 155 156 157 158 159            160 161 162 163 164 165 166 167            168 169 170 171 172 173 174 175            176 177 178 179 180 181 182 183            184 185 186 187 188 189 190 191            192 193 194 195 196 197 198 199            200 201 202 203 204 205 206 207            208 209 210 211 212 213 214 215            216 217 218 219 220 221 222 223            224 225 226 227 228 229 230 231            232 233 234 235 236 237 238 239            240 241 242 243 244 245 246 247            248 249 250 251 252 253 254 255        >;        default-brightness-level = <   200   >;        enable-gpios = <   &gpio2 RK_PC2 GPIO_ACTIVE_HIGH   >;        pinctrl-names = "default";        pinctrl-0 = <   &dsi1_backlight_en   >;    };

5.3.2 屏幕上电时序以及参数配置​

&dsi1 {    status = "okay";    dsi1_panel: panel@0 {        status = "okay";        compatible = "simple-panel-dsi";        reg = <   0   >;        power-supply = <   &vcc_lcd_mipi1   >;  //使用gpio模拟regulator        reset-gpios = <   &gpio2 RK_PC1 GPIO_ACTIVE_LOW   >;        backlight = <   &dsi1_backlight   >;        pinctrl-names = "default";        pinctrl-0 = <   &dsi1_lcd_rst_gpio   >;        reset-delay-ms = <   10   >;        enable-delay-ms = <   10   >;        prepare-delay-ms = <   10   >;        unprepare-delay-ms = <   10   >;        disable-delay-ms = <   10   >;        dsi,flags = <   (MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST |            MIPI_DSI_MODE_LPM | MIPI_DSI_MODE_EOT_PACKET)   >;        dsi,format = <   MIPI_DSI_FMT_RGB888   >;        dsi,lanes  = <   4   >;        panel-init-sequence = [            15 00 02 B0 01            15 00 02 C0 26            15 00 02 C1 10            15 00 02 C2 0E            15 00 02 C3 00            15 00 02 C4 00            15 00 02 C5 23            15 00 02 C6 11            15 00 02 C7 22            15 00 02 C8 20            15 00 02 C9 1E            15 00 02 CA 1C            15 00 02 CB 0C            15 00 02 CC 0A            15 00 02 CD 08            15 00 02 CE 06            15 00 02 CF 18            15 00 02 D0 02            15 00 02 D1 00            15 00 02 D2 00            15 00 02 D3 00            15 00 02 D4 26            15 00 02 D5 0F            15 00 02 D6 0D            15 00 02 D7 00            15 00 02 D8 00            15 00 02 D9 23            15 00 02 DA 11            15 00 02 DB 21            15 00 02 DC 1F            15 00 02 DD 1D            15 00 02 DE 1B            15 00 02 DF 0B            15 00 02 E0 09            15 00 02 E1 07            15 00 02 E2 05            15 00 02 E3 17            15 00 02 E4 01            15 00 02 E5 00            15 00 02 E6 00            15 00 02 E7 00            15 00 02 B0 03            15 00 02 BE 04            15 00 02 B9 40            15 00 02 CC 88            15 00 02 C8 0C            15 00 02 C9 07            15 00 02 CD 01            15 00 02 CA 40            15 00 02 CE 1A            15 00 02 CF 60            15 00 02 D2 08            15 00 02 D3 08            15 00 02 DB 01            15 00 02 D9 06            15 00 02 D4 00            15 00 02 D5 01            15 00 02 D6 04            15 00 02 D7 03            15 00 02 C2 00            15 00 02 C3 0E            15 00 02 C4 00            15 00 02 C5 0E            15 00 02 DD 00            15 00 02 DE 0E            15 00 02 E6 00            15 00 02 E7 0E            15 00 02 C2 00            15 00 02 C3 0E            15 00 02 C4 00            15 00 02 C5 0E            15 00 02 DD 00            15 00 02 DE 0E            15 00 02 E6 00            15 00 02 E7 0E            15 00 02 B0 06            15 00 02 C0 A5            15 00 02 D5 1C            15 00 02 C0 00            15 00 02 B0 00            15 00 02 BD 30            15 00 02 F9 5C            15 00 02 C2 14            15 00 02 C4 14            15 00 02 BF 15            15 00 02 C0 0C            15 00 02 B0 00            15 00 02 B1 79            15 00 02 BA 8F            05 78 01 11            05 78 01 29        ];        panel-exit-sequence = [            05 32 01 28            05 78 01 10        ];        disp_timings1: display-timings {            native-mode = <   &dsi1_timing0   >;            dsi1_timing0: timing0 {                clock-frequency = <   160000000   >;                hactive = <   1200   >;                vactive = <   1920   >;                hfront-porch = <   80   >;                hsync-len = <   1   >;                hback-porch = <   60   >;                vfront-porch = <   35   >;                vsync-len = <   1   >;                vback-porch = <   25   >;                hsync-active = <   0   >;                vsync-active = <   0   >;                de-active = <   0   >;                pixelclk-active = <   1   >;            };        };        ports {            #address-cells = <   1   >;            #size-cells = <   0   >;            port@0 {                reg = <   0   >;                panel_in_dsi1: endpoint {                    remote-endpoint = <   &dsi1_out_panel   >;                };            };        };    };    ports {        #address-cells = <   1   >;        #size-cells = <   0   >;        port@1 {            reg = <   1   >;            dsi1_out_panel: endpoint {                remote-endpoint = <   &panel_in_dsi1   >;            };        };    };};

5.3.3 打开对应的dsi节点,开机logo​

//打开背光的pwm节点    &pwm2 {        status = "okay";        pinctrl-names = "active";        pinctrl-0 = <   &pwm2m2_pins   >;    };        //在dsi1上接了一个mipi屏,这个配置开启dsi1     &dsi1 {        status = "okay";    };        &mipi_dcphy1 {        status = "okay";    };        //默认dsi配置vp2和vp3上面,这里配置为dsi使用vp3,可以根据屏的分辨率来确认使用vp2还是vp3,vp2支持4K,vp3只支持 2048x1536    &dsi1_in_vp2 {        status = "disabled";    };        &dsi1_in_vp3 {        status = "okay";    };        //配置dsi1显示开机logo    &route_dsi1 {        status = "okay";        connect = <   &vp3_out_dsi1   >;    };

5.4. 调试​

通过如下指令即可查询 VOP 的状态:

cat /sys/kernel/debug/dri/0/summary

获取的 VOP 状态如下图:

wKgZomXm2-iASeomAADWEINzaDM335.png

Video Portx: 表⽰当前的 Video Port 的状态

Connector: Video Port 当前连接的输出接口

Display mode: Video Port 当前输出时序

Clusterx-winx(Esmartx-winx): 图层信息

5.5 MIPI-DSI 预览

wKgaomSD5VmABtCNADawuVLUPwg57.jpeg


审核编辑 黄宇

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

    关注

    1

    文章

    52

    浏览量

    24701
  • Rockchip
    +关注

    关注

    0

    文章

    72

    浏览量

    18530
  • RK3588
    +关注

    关注

    6

    文章

    312

    浏览量

    4215
收藏 人收藏

    评论

    相关推荐

    RK3588开发板(armsom-w3)PWM实操

    RK3588开发板(armsom-w3) PWM实操
    的头像 发表于 06-10 10:38 2037次阅读
    RK3588开发板(<b class='flag-5'>armsom</b>-w3)<b class='flag-5'>之</b>PWM实操

    ArmSoM Rockchip系列产品通用教程之Camera使用

    1. Camera 简介 ​ ArmSoM系列产品使用的是mipi-csi接口的摄像头 ArmSoM-Sige7支持双摄同显: 2. RK3588硬件通路框图 ​ rk3588支持2个isp硬件
    的头像 发表于 04-10 14:59 1540次阅读
    <b class='flag-5'>ArmSoM</b> <b class='flag-5'>Rockchip</b><b class='flag-5'>系列产品</b><b class='flag-5'>通用</b>教程之Camera使用

    54600系列产品说明

    54600系列产品说明
    发表于 01-21 08:44

    客户为什么会选择3700系列产品

    客户为什么会选择3700系列产品?3700系列产品有什么优点?
    发表于 05-07 06:33

    RX系列产品分别分为哪几种?RX系列产品具备哪些功能?

    RX系列产品分别分为哪几种?RX系列微控制器有哪些性能?RX系列产品具备哪些功能?
    发表于 07-01 10:57

    产品介绍】武汉芯源Cortex-M0+通用 MCU CW32F系列产品介绍

    Cortex-M0+ 通用 MCU CW32F系列家族型号展示2021年10月14日,经过多年的市场调研和潜心研发,武汉芯源半导体自主研发的首款基于 Cortex-M0+ 内核微控制器产品
    发表于 08-09 10:17

    RK3588平台产测ArmSoM-W3 DDR压力测试

    root@linaro-alip:/rockchip-test# ./rockchip_test.sh DDR压力测试开始: ArmSoM 产品介绍: http
    发表于 10-09 19:29

    RK3588平台产测ArmSoM产品高温环境测试

    1. 简介 ArmSoM团队在产品量产之前都会对产品做几次专业化的功能测试以及性能压力测试,以此来保证产品的质量以及稳定性 优秀的产品都要进
    发表于 10-12 09:57

    armsom:为何选择rk3588开发与Jetson Nano引脚兼容的嵌入式产品

    引言: 当armsom决定采用RK3588芯片开发一款与Jetson Nano引脚兼容的产品时,这意味着一次重要的技术决策,为开发者和制造商提供了更大的灵活性。这篇文章将解释我们选择RK3588
    发表于 10-18 17:35

    ASDX系列产品手册

    ASDX系列产品手册。
    发表于 04-28 11:45 10次下载

    ArmSom--摄像头开发指南(二)

    一.简介RK3588从入门到精通开发板:ArmSoM-W3Kernel:5.10.160OS:Debian11上篇文档介绍了rockchip平台怎么配置MIPI-CSI的通路,本⽂主要介绍在
    的头像 发表于 11-06 10:30 1605次阅读
    <b class='flag-5'>ArmSom</b>--摄像头开发指南(二)

    ArmSoM-W3应用开发安装docker

    1.简介RK3588从入门到精通系列专题开发板:ArmSoM-W3Kernel:5.10.160OS:Debian11本⽂介绍ArmSoM-W3在Debian11下如何安装
    的头像 发表于 11-20 10:05 420次阅读
    <b class='flag-5'>ArmSoM</b>-W3应用开发<b class='flag-5'>之</b>安装docker

    ArmSoM Rockchip系列产品 通用教程 CAN 使用

    都采用CAN总线来实现汽车内部控制系统之间的数据通信。 RK3568/RK3588的CAN驱动文件:drivers/net/can/rockchip/rockchip_canfd.c 在
    的头像 发表于 02-29 16:52 717次阅读
    <b class='flag-5'>ArmSoM</b> <b class='flag-5'>Rockchip</b><b class='flag-5'>系列产品</b> <b class='flag-5'>通用</b>教程 <b class='flag-5'>之</b> CAN 使用

    ArmSoM Rockchip系列产品 通用教程 RTC 使用

    1. RTC 简介​ RTC:(Real_Time Clock):实时时钟 HYM8563是一种低功耗实时时钟(RTC)芯片,用于提供精确的时间和日期信息。它提供一个可编程的时钟输出,一个中断输出和一个掉电检测器,所有的地址和数据都通过I2C总线接口串行传递。最大总线速度为 400Kbits/s,每次读写数据后,内嵌的字地址寄存器会自动递增 以下是HYM8563芯片的主要特点和功能: 时钟和日历功能:HYM8563具有时钟和日历功能,可提供准确的时间和日期信息。它支持年、月、日、星期、小时、
    的头像 发表于 03-05 16:57 471次阅读
    <b class='flag-5'>ArmSoM</b> <b class='flag-5'>Rockchip</b><b class='flag-5'>系列产品</b> <b class='flag-5'>通用</b>教程 <b class='flag-5'>之</b> RTC 使用

    ArmSoM Rockchip系列产品 通用教程 UART 使用

    1. UART 简介 ​ Rockchip UART (Universal Asynchronous Receiver/Transmitter) 基于16550A串口标准,完整模块支持以下功能
    的头像 发表于 03-08 14:39 785次阅读