ArmSoM RK3588/RK3576核心板,Rockchip Display 使用

news/2025/1/8 16:03:13/文章来源:https://www.cnblogs.com/armsom/p/18659955

1. Display简介​

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

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

RK3588 VP 和各显⽰接口的连接关系: display-rk3588-vp

需要注意的是,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接口。可以做到多屏同显/异显。 dispaly-armsom-w3

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

3. HDMI​

  • ArmSoM-W3硬件上有两个 HDMI 显示输出接口:2x HDMI OUT2.1
  • 其中一个HDMI OUT 支持 8K@60fps 或者 4K@120fps另一个HDMI OUT 支持 4K@60fps

3.1 HDMI相关的DTS配置​

  • kernel\arch\arm64\boot\dts\rockchip\rk3588-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>;
};
};
};
};
};
};
 
 &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/enabled
disabled
 

status 查看连接状态:

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

4.2.2 强制使能/禁⽤ DP​

#强制禁⽤ DP
rk3588_s:/ # echo off > /sys/class/drm/card0-DP-1/status
#强制使能 DP
rk3588_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 原理图​

display-mipi-sch

5.2 屏幕显示时序图​

display-mipi-sigenal

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
208209210211212213214215
216217218219220221222223
224225226227228229230231
232233234235236237238239
240241242243244245246247
248249250251252253254255
>;
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>;
};
};
};
};
 
//打开背光的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 状态如下图: display-vop

  • Video Portx: 表⽰当前的 Video Port 的状态
  • Connector: Video Port 当前连接的输出接口
  • Display mode: Video Port 当前输出时序
  • Clusterx-winx(Esmartx-winx): 图层信息

5.5 MIPI-DSI 预览​

display-armsom-10-hd

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/865937.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JNI接口--实现Java调用C++

1、JNI原理概述 通常为了更加灵活高效地实现计算逻辑,我们一般使用C/C++实现,编译为动态库,并为其设置C接口和C++接口。用C++实现的一个库其实是一个或多个类的简单编译链产物,然后暴露其实现类的构造方法和纯虚接口类。这样就可以通过多态调用到库内部的实现类及其成员方法…

Leaflet 实现离线瓦片资源 + 飞线迁徙 + 自定义标记点位实现

npm install leaflet 注意构建webpack配置module: {rules: [{test: /\.(png|jpg|gif|jpeg|svg)$/,include: /node_modules[\\/]leaflet/,use: [{loader: url-loader,options: {outputPath: static/images}}]}] } 注意外部资源代理方式proxy: {/cdn: {target: https:// + ip + :…

Training Transformers with 4-bit Integers

目录概符号说明4-bit FQTLearned Step Size QuantizationHadamard QuantizationBit Splitting and Leverage Score Sampling代码Xi H., Li C., Chen J. and Zhu J. Training transformers with 4-bit integers. NeurIPS, 2023.概 本文针对 4-bit 中训练中一些特点 (针对 transf…

python SQLAlchemy ORM——从零开始学习 02简单的增删查改

02 简单的增删查改 前情提要:承接了01中的engine以及User类 2-1 了解会话机制个人理解 在SQLAlchemy 增删查改中是依赖会话(Session)这个机制进行操作的,我个人的理解是用“会话“进行连接数据库周期的一系列管理操作(以下是ai生成对此会话的理解)ai理解 在 SQLAlchemy 中…

YASKAWA机械手维修DX100示教器通电无反应

安川机器人DX100示教器通电无反应可能由多种原因导致,以下是一些常见的原因及对应的解决方法:可能原因电源问题:电源线破损或电源插座接触不良。 硬件故障:示教器内部电路板或元件(如内存条、处理器或显示屏等)损坏。 软件问题:软件发生错误或版本不匹配。 其他故障:…

春节电商爆单背后的协作黑科技!

每到春节,电商平台的交易额都会迎来新一轮爆发。但你是否思考过,支撑这一庞大运作的团队如何在高压之下确保高效协作?答案或许就藏在你忽略的细节里:在线文档协作。 春节购物高峰的背后:团队协作挑战重重 春节期间,消费者习惯于提前囤年货、抢促销,购物高峰往往集中爆发…

Transformer、编码器、解码器、全连接FFN、自注意力机制、嵌入向量、残差连接层归一化

一.提出背景 Transformer最早是Google在2017年的Attention Is All You Need论文中提出,用于解决解决传统的序列到序列(Seq2Seq)模型在处理可变长序列时遇到的问题。(序列到序列:指的是模型的输入是一段序列,模型输出也是序列;比如语音识别中给模型一段中文语音序列,让模…

JS-22 字符串的方法_concat()

concat方法用于链接两个字符串,返回一个新字符串,不改变原字符串 var s1=zifuchuan var s2=tow s1.concat(s2)//"zifuchuantow" s1//"zifuchuan" 该方法可以接受多个参数 two.concat(zifuchuan,three)//"zifuchuanthreetwo" 如果参数不是字符串…

年货抢购狂潮来袭,协作效率如何提升?

每年春节,都是电商企业竞争最激烈的战场。从年前的大促销到年后的物流爆单,作为电商团队的一员,你是否为节日期间高强度的工作节奏而焦虑?特别是在跨部门协作时,沟通不畅、任务延误、文档混乱等问题是否成为了团队效率的致命瓶颈? 在这一背景下,在线文档协作成为了提升春…

ASE100N10-ASEMI中低压N沟道MOS管ASE100N10

ASE100N10-ASEMI中低压N沟道MOS管ASE100N10编辑:ll ASE100N10-ASEMI中低压N沟道MOS管ASE100N10 型号:ASE100N10 品牌:ASEMI 封装:TO-220 批号:最新 最大漏源电流:100A 漏源击穿电压:100V RDS(ON)Max:8.8mΩ 引脚数量:3 芯片个数: 沟道类型:N沟道MOS管、低压MOS管 …

raylib U1S05 - 添加一个开始页面

先来看效果 看之前让我吐个槽。刚才编辑一半,结果我手贱点了个退出登录,然后都没了˃̣̣̥᷄⌓˂̣̣̥᷅开始按钮的图片是用豆包AI生成的,然后用美图秀秀抠图,改颜色。懒得自己搞素材的同学保存下面的三个图,注意改名字。普通状态 鼠标放上去 鼠标点击start_normal.png …