屏幕与触摸调试

news2025/5/14 5:54:48

本章配套视频介绍:

../../_images/video.png

《28-屏幕与触摸设置》

【鲁班猫】28-屏幕与触摸设置_哔哩哔哩_bilibili

LubanCat-RK3588系列板卡都支持mipi屏以及hdmi显示屏的显示。

19.1. 旋转触摸屏

参考文章 触摸校准

参考文章 旋转触摸方向

配置触摸旋转方向

1
2
# 1.查看触摸输入设备
xinput list

如下图,可以看到 Goodix Capacitive TouchScreen 的设备, Goodix Capacitive TouchScreen 是野火1080p的触摸屏,如果使用的屏幕是树莓派5寸屏,则显示 fts_ts

注意

需要进入桌面后才能使用xinput命令,请保持进入桌面。如果是用ssh进终端操作,请先输入export DISPLAY=:0

未找到图片

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
# 根据名字列出变量
xinput list-props 'pointer:Goodix Capacitive TouchScreen' | grep "Coordinate Transformation Matrix"

# 根据id列出变量
xinput list-props 10 | grep "Coordinate Transformation Matrix"


#修改触摸方向(可根据名字修改) 默认方向
xinput set-prop 10 'Coordinate Transformation Matrix' 1 0 0 0 1 0 0 0 1

#修改触摸方向(可根据名字修改) 向左90度
xinput set-prop 10 'Coordinate Transformation Matrix' 0 -1 1 1 0 0 0 0 1

#修改触摸方向(可根据名字修改) 向右90度
xinput set-prop 10 'Coordinate Transformation Matrix' 0 1 0 -1 0 1 0 0 1

#修改触摸方向(可根据名字修改) 旋转180度
xinput set-prop 10 'Coordinate Transformation Matrix' -1 0 1 0 -1 1 0 0 1

19.1.1. 永久配置(单屏)

注意

本方法将会永久配置屏幕的触摸方向,配置完成后需要重启或者重启服务才能运行,直到重新修改配置

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#修改配置文件
sudo vi /etc/X11/xorg.conf.d/20-modesetting.conf

#在文件的后面添加或者修改下面内容(四选一,选择自己要调整的)
#"Goodix Capacitive TouchScreen"是5.5寸屏的修改方法,树莓派屏可以修改为``fts_ts``

#(默认,不旋转)
Section "InputClass"
        Identifier "Goodix Capacitive TouchScreen"
        Option "Coordinate Transformation Matrix" " 1 0 0 0 1 0 0 0 1 "
EndSection

#(默认,向右旋转90度)
Section "InputClass"
        Identifier "Goodix Capacitive TouchScreen"
        Option "Coordinate Transformation Matrix" " 0 1 0 -1 0 1 0 0 1 "
EndSection

#(默认,向左旋转90度)
Section "InputClass"
        Identifier "Goodix Capacitive TouchScreen"
        Option "Coordinate Transformation Matrix" " 0 -1 1 1 0 0 0 0 1 "
EndSection


#(默认,旋转180度)
Section "InputClass"
        Identifier "Goodix Capacitive TouchScreen"
        Option "Coordinate Transformation Matrix" " -1 0 1 0 -1 1 0 0 1 "
EndSection


#修改完成后可以重启或者运行下列命令重启显示服务
sudo systemctl restart lightdm.service

19.1.2. 永久配置(多屏)

注意

当要在多屏上实现触摸的旋转,如果屏幕的名字一样会导致相同名字的屏幕都进行旋转的情况,如果多屏情况下需要分别配置这时候使用id来设置旋转会更好

以下是dsi0和dis1分别接5.5寸屏幕的情况。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
#查看触摸输入设备
xinput list

#信息输出如下

⎡ Virtual core pointer                          id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ Goodix Capacitive TouchScreen             id=7    [slave  pointer  (2)]
⎜   ↳ Goodix Capacitive TouchScreen             id=8    [slave  pointer  (2)]
⎣ Virtual core keyboard                         id=3    [master keyboard (2)]
        ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
        ↳ headset-keys                              id=6    [slave  keyboard (3)]
        ↳ rk805 pwrkey                              id=9    [slave  keyboard (3)]
        ↳ febd0030.pwm                              id=10   [slave  keyboard (3)]
        ↳ Goodix Capacitive TouchScreen             id=11   [slave  keyboard (3)]
        ↳ Goodix Capacitive TouchScreen             id=12   [slave  keyboard (3)]

因为设备树插件是顺序加载的,触摸驱动是顺序注册的,所以以上id为7对应dsi0的触摸,id为8对应dsi1的触摸,可以通过以下脚本分别配置两个屏幕触摸。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
#!/bin/bash

#获取dsi0触摸id
dis0_touch_id=$(xinput list | grep "Goodix Capacitive TouchScreen" | cut -f 2 | cut -d "=" -f 2 | head -n 1)
#获取dsi1触摸id
dis1_touch_id=$(xinput list | grep "Goodix Capacitive TouchScreen" | cut -f 2 | cut -d "=" -f 2 | tail -n +2 | head -n 1)

#打印id信息
echo dis0_touch_id=$dis0_touch_id
echo dis1_touch_id=$dis1_touch_id

#配置dsi0触摸,可自定义旋转方向
xinput set-prop $dis0_touch_id 'Coordinate Transformation Matrix' 1 0 0 0 1 0 0 0 1

#配置dsi1触摸,可自定义旋转方向
xinput set-prop $dis1_touch_id 'Coordinate Transformation Matrix' 0 -1 1 1 0 0 0 0 1

19.2. 触摸屏绑定屏幕

1
2
# 1.查看触摸输入设备
xinput list

如下图,可以看到 Goodix Capacitive TouchScreen 的设备, Goodix Capacitive TouchScreen 是野火1080p的触摸屏,如果使用的屏幕是树莓派5寸屏,则显示 fts_ts

因为触摸屏是指针设备,所以我们的触摸屏是要带着 slave  pointer

未找到图片

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
#查看当前的屏幕
xrandr -q

DSI-1:mipi屏
DSI-2:mipi屏
HDMI-1:HDMI屏
DP-1:DP屏幕
eDP-1:eDP屏幕

小编在用DSI-1,后面以DSI-1作为屏幕修改配置

#已知上面的Goodix Capacitive TouchScreen触摸屏的id号为10
#然后通过触摸屏的id号来绑定屏幕

xinput map-to-output 10 DSI-1

完成后就可以看到可以支持触摸屏映射了。

19.3. 旋转屏幕方向

19.3.1. 命令行配置

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
#查看当前的屏幕
xrandr -q

DSI-1:mipi屏
DSI-2:mipi屏
HDMI-1:HDMI屏
DP-1:DP屏幕
eDP-1:eDP屏幕

小编在用DSI-1,后面以DSI-1作为屏幕修改配置

#旋转屏幕-正常
xrandr --output DSI-1 --rotate normal

#旋转屏幕-向左90度
xrandr --output DSI-1 --rotate left

#旋转屏幕-向右90度
xrandr --output DSI-1 --rotate right

#旋转屏幕-旋转180度
xrandr --output DSI-1 --rotate inverted

19.3.2. 桌面配置

右击打开选择屏幕显示设置,然后可以按照下面图片的方法配置

未找到图片

19.4. 多屏异显

默认情况下为多屏异显,不需要进行配置,打开多个屏幕的设备树插件,接上屏幕即可显示不同内容。

19.5. 多屏同显

19.5.1. 使用命令脚本配置

以下以1080P HDMI屏幕和5.5寸mipi屏幕为例,通过udev规则调用脚本来支持HDMI热插拔时能够同显,通过自启动服务确保启动能够同显:

因为5.5寸屏幕默认是竖屏的,并且只能通过桌面配置图像输出来旋转,无法通过驱动或设备树修改显示方向,所以要通过前面介绍的屏幕和触摸旋转方法进行配置。

19.5.1.1. 创建udev规则
1
2
#创建udev规则文件
sudo vim /etc/udev/rules.d/99-monitor-hotplug.rules

然后在99-monitor-hotplug.rules添加以下内容

1
2
ACTION=="add", SUBSYSTEM=="drm", DEVPATH=="/devices/platform/display-subsystem/drm/card0", RUN+="/home/cat/monitor-hotplug.sh"
ACTION=="remove", SUBSYSTEM=="drm", DEVPATH=="/devices/platform/display-subsystem/drm/card0", RUN+="/home/cat/monitor-hotplug.sh"

然后重新加载规则:

1
2
sudo udevadm control --reload-rules
sudo systemctl restart udev

以上规则是插入和拔掉HDMI都会调用/home/cat/monitor-hotplug.sh脚本。

19.5.1.2. 自启动调用配置

在桌面登录用户的家目录下创建启动文件:

1
2
3
4
5
#以cat用户为例
mkdir /home/cat/.config/autostart

#创建配置文件
vim /home/cat/.config/autostart/screen_settings.desktop

在screen_settings.desktop文件中添加以下内容:

1
2
3
4
5
6
7
8
[Desktop Entry]
Type=Application
Exec=/home/cat/monitor-hotplug.sh
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
Name=My App
Comment=Start My App on login

以上自启动配置是启动自动调用/home/cat/monitor-hotplug.sh脚本

19.5.1.3. 创建同显脚本
1
2
#创建udev调用的脚本
sudo vim /home/cat/monitor-hotplug.sh

然后在monitor-hotplug.sh添加以下内容

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!/bin/bash

export DISPLAY=:0

# Define your desired resolutions and settings
DSI_MODE="1080x1920"
HDMI_MODE="1920x1080"
ROTATION="right"

# Function to detect HDMI connection status
function check_hdmi_connection {
        HDMI_STATUS=$(</sys/class/drm/card0-HDMI-A-1/status)

        if [ "$HDMI_STATUS" = connected ]; then
                xrandr --output DSI-1 --mode $DSI_MODE --rotate $ROTATION
                xrandr --output HDMI-1 --mode $HDMI_MODE
                xrandr --output HDMI-1 --same-as DSI-1 --auto
        elif [ "$HDMI_STATUS" = disconnected ]; then
                xrandr --output DSI-1 --mode $DSI_MODE --rotate $ROTATION
        fi
}

# Run the function to check HDMI connection status
check_hdmi_connection

然后添加脚本执行权限:

1
sudo chmod 777 /home/cat/monitor-hotplug.sh

以上monitor-hotplug.sh脚本中就使用了前面介绍的命令进行旋转和同显,截取代码如下:

1
2
3
xrandr --output DSI-1 --mode $DSI_MODE --rotate $ROTATION
xrandr --output HDMI-1 --mode $HDMI_MODE
xrandr --output HDMI-1 --same-as DSI-1 --auto

重启后进入可以发现两个屏幕同显了,并且拔掉HDMI再插入也弄够进行同显。

19.6. 关闭桌面登录及保留屏幕开启

一般屏幕开启与桌面登录会绑定在一起,你开启了屏幕,屏幕就会作为一个新的终端, 下文教你如何在使用屏幕的情况下关闭屏幕终端

1
2
3
4
5
6
7
8
9
#关闭用户图形界面,使用tty登录。

sudo systemctl set-default multi-user.target
sudo reboot

#开启用户图形界面。

sudo systemctl set-default graphical.target
sudo reboot

19.7. 屏幕调试方法

19.7.1. mipi 屏幕

mipi屏幕调试一般都要着重关注屏幕的上电初始序列 :panel-init-sequence和下电初始化序列:panel-exit-sequence。

准备工作:在拿到一块新mipi屏幕的时候,一般屏幕厂商都会给我们两样东西,分别是 屏幕规格书 和 屏幕初始化序列。 以下拿野火5.5寸1080p屏幕为例。屏幕的资料请查阅 (野火)5.5寸 1080p 屏幕资料文档

在 屏幕规格书 可以获取到屏幕参数,在 初始化序列中 可以获取到屏幕的panel-init-sequence代码。如下图:

未找到图片

19.7.1.1. 调试步骤分析:

mipi屏幕的点亮流程如下,以猫2为例。

  • 步骤一先将屏幕的背光点亮

在猫2的设备树配置的节点中,我们需要添加关于背光的配置。如图:

未找到图片

由mipi屏幕的接口电路图得知,屏幕背光由PWM4去配置,如下

未找到图片

按照rk屏幕背光的配置方法,我们可以得到如下backlight节点

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
 backlight: backlight {
             status = "okay";
             compatible = "pwm-backlight";
             pwms = <&pwm4 0 50000 0>;
             brightness-levels = <
                      95  95  95  95  95  95  95  95
                      95  95  95  95  95  95  95  95
                      95  95  95  95  95  95  95  95
                      95  95  95  95  95  95  95  95
                      95  95  95  95  95  95  95  95
                      95  95  95  95  95  95  95  95
                      95  95  95  95  95  95  95  95
                      95  95  95  95  95  95  95  95
                      95  95  95  95  95  95  95  95
                      95  95  95  95  95  95  95  95
                      95  95  95  95  95  95  95  95
                      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>;
     };
  • 步骤二根据屏幕规格书和初始化序列配置dsi节点

屏幕初始化代码部分截图如下。

未找到图片

在linux系统中,LCD屏会有初始化和反初始化的过程。我们需要在MIPI DSI驱动中,将这些厂家提供的初始化代码转换为相应的DCS序列。

由于屏幕厂商没有提供寄存器手册,所以我不用知道他们到底设置了哪一个寄存器,我们只需要将初始化代码转化为如下格式的设备树配置就行了。

1
命令类型+延时+数据长度+数据

在屏幕初始化序列代码中包含三类指令,分别是: SET_GENERIC W_D delay_ms

在讲转换之前,我们先来看一下rk屏幕设备树初始化序列的命令类型。

  • 0x05 命令类型: 单字节数据 (DCS Short Write, no parameters)

  • 0x15 命令类型: 双字节数据 (DCS Short Write, 1 parameter)

  • 0x39 命令类型: 多字节数据 (DCS Long Write, n parameters n > 2)

那么我们该如何转换呢?首先,我们先数一下个数,以 SET_GENERIC 为开始,下一个 SET_GENERIC 为结束作为一次数据发送,数一数一共有几个数据。其次看延时,看看厂家提供的初始化代码里面有没有延时。

那么对于双字节序列:

1
2
3
 //Set_D2
 SET_GENERIC(2);
 W_D(0xD2);W_D(0x77);

我们将其转化成如下配置:

1
 15 00 02 D2 77

对于多字节序列:

1
2
 SET_GENERIC(4);
 W_D(0xB9);W_D(0xFF);W_D(0x83);W_D(0x99);

我们将其转化成如下配置:

1
 39 00 04 B9 FF 83 99

对于单字节延时序列:

1
2
3
 SET_GENERIC(1);
 W_D(0x11);
 delay_ms(200);

我们将其转化成如下配置:

1
 05 C8 01 11

将初始化序列代码整理一下就可以得到RK 屏幕的DCS序列,如下

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
panel-init-sequence = [
             39 00 04 B9 FF 83 99
             15 00 02 D2 77
             39 00 10 B1 02 04 74 94 01 32 33 11 11 AB 4D 56 73 02 02
             39 00 10 B2 00 80 80 AE 05 07 5A 11 00 00 10 1E 70 03 D4
             15 00 02 36 02
             39 00 2D B4 00 FF 02 C0 02 C0 00 00 08 00 04 06 00 32 04 0A 08 21 03 01 00 0F B8 8B 02 C0 02 C0 00 00 08 00 04 06 00 32 04 0A 08 01 00 0F B8 01
             39 05 22 D3 00 00 00 00 00 00 06 00 00 10 04 00 04 00 00 00 00 00 00 00 00 00 00 01 00 05 05 07 00 00 00 05 40
             39 05 21 D5 18 18 19 19 18 18 21 20 01 00 07 06 05 04 03 02 18 18 18 18 18 18 2F 2F 30 30 31 31 18 18 18 18
             39 05 21 D6 18 18 19 19 40 40 20 21 06 07 00 01 02 03 04 05 40 40 40 40 40 40 2F 2F 30 30 31 31 40 40 40 40
             39 00 11 D8 A2 AA 02 A0 A2 A8 02 A0 B0 00 00 00 B0 00 00 00
             15 00 02 BD 01
             39 00 11 D8 B0 00 00 00 B0 00 00 00 E2 AA 03 F0 E2 AA 03 F0
             15 00 02 BD 02
             39 00 09 D8 E2 AA 03 F0 E2 AA 03 F0
             15 00 02 BD 00
             39 00 03 B6 8D 8D
             39 05 37 E0 00 0E 19 13 2E 39 48 44 4D 57 5F 66 6C 76 7F 85 8A 95 9A A4 9B AB B0 5C 58 64 77 00 0E 19 13 2E 39 48 44 4D 57 5F 66 6C 76 7F 85 8A 95 9A A4 9B AB B0 5C 58 64 77
             05 C8 01 11
             05 C8 01 29
     ];

再结合屏幕规格书中的屏幕参数,得到如下配置。

未找到图片

未找到图片

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
 disp_timings0: display-timings {
       native-mode = <&dsi0_timing0>;
       dsi0_timing0: timing0 {
               clock-frequency = <131376000>;
           hactive = <1080>;
               vactive = <1920>;
               hsync-len = <10>;
               hback-porch = <20>;
               hfront-porch = <10>;
               vsync-len = <5>;
               vback-porch = <20>;
               vfront-porch = <10>;
               hsync-active = <0>;
               vsync-active = <0>;
               de-active = <0>;
               pixelclk-active = <0>;
             };
     };
  • 步骤三打开对应的dsi节点,开机logo,pwm等

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
&route_dsi0 {
       status = "okay";
       connect = <&vp1_out_dsi0>;
};

&video_phy0 {
       status = "okay";
};

&dsi0_in_vp0 {
       status = "disabled";
};

&dsi0_in_vp1 {
       status = "okay";
};

&pwm4 {
       status = "okay";
};
  • 步骤四编译烧写,调试屏幕

19.7.2. lvds 屏幕

  • GM8775C

原生显示接口不支持双通道LVDS屏幕的数据输出,因此需要借助显示转换芯片才能实现单/双通道lvds屏幕的驱动。下面介绍使用GM8775C芯片的显 示方案。以rk3566 LubanCat-1H为例。

GM8775C 型 DSI 转 LVDS 发送器主要实现将 MIPI DSI 转单/双通道 LVDS功能,电路图如下

未找到图片

GM8775C 型 DSI 转 LVDS 发送器主要实现将 MIPI DSI 转单/双通道 LVDS功能,MIPI 支持 1/2/3/4 通道可选,最大支持 4Gbps 速率。 GM8775C 主要应用于前端视频应用处理器和后端显示设备之间,用于做 DSI 到 LVDS转换驱动输出功能。前端视频应用处理器输出 4lane DSI 数据,并 同步输出 1lane DSI 时钟信号。 GM8775C 将该 DSI 信号转换成 LVDS 差分信号输出,驱动后级显示器完成转换、传输和显示功能。示意图如下

未找到图片

以野火在售的单通道lvds屏幕为例,panel-init-sequence 需要填写 MIPI 向 GM8775C 芯片下发的寄存器参数,根据屏幕时序参数和硬件连接情况,此 处借助 GM8775C 配套的上位机软件,在软件界面中设置屏幕的参数,即可得到转换好的实际寄存器设置参数。

屏幕参数如下

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
dsi0_timing0: timing0 {
    clock-frequency = <71107200>;
        hactive = <1280>;
    vactive = <800>;

    hsync-len   = <32>;
    hback-porch = <80>;
    hfront-porch= <48>; //1440

    vsync-len    = <6>;
    vback-porch  = <14>;
    vfront-porch = <3>;  //823

    hsync-active = <0>;
    vsync-active = <0>;
    de-active = <0>;
    pixelclk-active = <0>;
     };

上位机软件配置如下

未找到图片

mipi时钟计算 dsi clk = Bitclk / 2  = H-total x V-total x fps x 位深 / lane number / 2

后续加上SSR展频,得到完整panel-init-sequence配置

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
     panel-init-sequence = [
             23 00 02 27 AA
             23 00 02 48 02
             23 00 02 B6 20
             23 00 02 01 00
             23 00 02 02 20
             23 00 02 03 35
             23 00 02 04 08
             23 00 02 05 20
             23 00 02 06 0A
             23 00 02 07 00
             23 00 02 08 03
             23 00 02 09 06
             23 00 02 0A 03
             23 00 02 0B 82
             23 00 02 0C 27
             23 00 02 0D 01
             23 00 02 0E 80
             23 00 02 0F 20
             23 00 02 10 20
             23 00 02 11 03
             23 00 02 12 1B
             23 00 02 13 03
             23 00 02 14 01
             23 00 02 15 23
             23 00 02 16 40
             23 00 02 17 00
             23 00 02 18 01
             23 00 02 19 23
             23 00 02 1A 40
             23 00 02 1B 00
             23 00 02 1E 46
             23 00 02 51 30
             23 00 02 1F 10
             23 00 02 2A 01
             //如下为SSR展频,不加可能点不亮
             23 00 02 6A     08
             23 00 02 6C     9E
             23 00 02 6D 07
             23 00 02 6E     00
             23 00 02 6F     8A
             23 00 02 70 19
             23 64 02 71 00
             ];

19.7.3. edp 屏幕

edp屏幕的适配较为简单,只需要修改下时序即可。野火在售的edp屏幕的设备树插件配置如下:

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 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
     #include <dt-bindings/gpio/gpio.h>
     #include <dt-bindings/pinctrl/rockchip.h>
     #include <dt-bindings/display/drm_mipi_dsi.h>
     #include <dt-bindings/interrupt-controller/irq.h>
     #include <dt-bindings/display/rockchip_vop.h>

     / {

             fragment@0 {
                     target = <&route_edp>;

                     __overlay__ {
                             status = "okay";
                             connect = <&vp0_out_edp>;
                     };
             };

             fragment@1 {
                     target = <&edp_phy>;

                     __overlay__ {
                             status = "okay";
                     };
             };

             fragment@2 {
                     target = <&edp_in_vp0>;

                     __overlay__ {
                             status = "okay";
                     };
             };

             fragment@3 {
                     target = <&edp_in_vp1>;

                     __overlay__ {
                             status = "disabled";
                     };
             };

             fragment@4 {
                     target = <&edp>;

                     __overlay__ {
                             status = "okay";
                             // hpd-gpios = <&gpio4 RK_PC4 GPIO_ACTIVE_HIGH>; //热插拔信号检测
                             force-hpd; //强制hpd,忽略物理hdp信号

                             ports {
                                     #address-cells = <1>;
                                     #size-cells = <0>;

                                     port@1 {
                                             reg = <1>;
                                             edp_out_panel: endpoint@0 {
                                                     remote-endpoint = <&panel_in_edp>;
                                             };
                                     };
                             };
                     };
             };

             fragment@5 {
                     target-path = "/";

                     __overlay__ {
                             edp_panel: edp-panel {
                                     compatible = "simple-panel";
                                     backlight = <&backlight_lvds_edp>;
                                     status = "okay";
                                     //bus-format = <MEDIA_BUS_FMT_RBG888_1X24>;
                                     prepare-delay-ms = <100>; //AUX通信前延时
                                     enable-delay-ms = <100>;

                                     display-timings {
                                             native-mode = <&timing0>;

                                             timing0: timing0 {
                                                     clock-frequency = <75590000>;
                                                     hactive = <1280>;
                                                     vactive = <800>;

                                                     hfront-porch = <126>;
                                                     hsync-len = <100>;
                                                     hback-porch = <10>;

                                                     vfront-porch = <16>;
                                                     vsync-len = <12>;
                                                     vback-porch = <3>;

                                                     hsync-active = <0>;
                                                     vsync-active = <0>;
                                                     de-active = <0>;
                                                     pixelclk-active = <0>;
                                             };
                                     };

                                     ports {
                                             panel_in_edp: endpoint {
                                                     remote-endpoint = <&edp_out_panel>;
                                                     };
                                             };
                                     };
                             };
                     };

                     fragment@6 {
                             target = <&route_hdmi>;

                             __overlay__ {
                                     status = "disabled";
                             };
                     };

                     fragment@7 {
                             target = <&hdmi_in_vp0>;

                             __overlay__ {
                             status = "disabled";
                             };
                     };

                     fragment@8 {
                             target = <&hdmi_in_vp1>;

                             __overlay__ {
                             status = "disabled";
                             };
                     };

                     fragment@9 {
                             target = <&hdmi>;

                             __overlay__ {
                                     status = "disabled";
                             };
                     };

                     fragment@10 {
                             target = <&vp0>;

                             __overlay__ {
                             rockchip,plane-mask = <(1 << ROCKCHIP_VOP2_CLUSTER0 | 1 << ROCKCHIP_VOP2_ESMART0 | \
                                                                             1 << ROCKCHIP_VOP2_SMART0)>;
                             rockchip,primary-plane = <ROCKCHIP_VOP2_SMART0>;
                             };
                     };
             };

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用 百度云大模型平台 做 【提示词优化】

1. 百度云大模型平台 百度智能云千帆大模型平台 &#xfeff; 平台功能&#xff1a;演示了阿里云大模型的百炼平台&#xff0c;该平台提供Prompt工程功能&#xff0c;支持在线创建和优化Prompt模板模板类型&#xff1a;平台提供多种预制模板&#xff0c;同时也支持用户自定义…

IJCAI 2025 | 高德首个原生3D生成基座大模型「G3PT」重塑3D生成的未来

国际人工智能联合会议&#xff08;IJCAI&#xff09;是人工智能领域最古老、最具权威性的学术会议之一&#xff0c;自1969年首次举办以来&#xff0c;至今已有近六十年的历史。它见证了人工智能从萌芽到蓬勃发展的全过程&#xff0c;是全球人工智能研究者、学者、工程师和行业专…

Samtec助力电视广播行业

【摘要前言】 现代广播电视技术最有趣的方面之一就是界限的模糊。过去&#xff0c;音频和视频是通过射频电缆传输的模拟技术采集的&#xff0c;而现在&#xff0c;数字世界已经取代了模拟技术。物理胶片和磁带已让位于数字存储设备和流媒体。 在这个过程中&#xff0c;连接器…

密码学--仿射密码

一、实验目的 1、通过实现简单的古典密码算法&#xff0c;理解密码学的相关概念 2、理解明文、密文、加密密钥、解密密钥、加密算法、解密算法、流密码与分组密码等。 二、实验内容 1、题目内容描述 ①随机生成加密密钥&#xff0c;并验证密钥的可行性 ②从plain文件读入待…

SpringBoot整合MQTT实战:基于EMQX实现双向设备通信(附源码)

简言&#xff1a; 在万物互联的时代&#xff0c;MQTT协议凭借其轻量级、高效率的特性&#xff0c;已成为物联网通信的事实标准。本教程将带领您在Ubuntu系统上搭建EMQX 5.9.0消息服务器&#xff0c;并使用Spring Boot快速实现两个客户端的高效通信。通过本指南&#xff0c;您将…

从零开始掌握FreeRTOS(2)链表之节点的定义

目录 节点 节点定义 节点实现 根节点 根节点定义 精简节点定义 根节点实现 在上篇文章,我们完成了 FreeRTOS 的移植。在创建任务之前,我们需要先了解FreeRTOS的运转机制。 FreeRTOS是一个多任务系统,由操作系统来管理执行每个任务。这些任务全都挂载到一个双向循…

【数据结构】——双向链表

一、链表的分类 我们前面学习了单链表&#xff0c;其是我们链表中的其中一种&#xff0c;我们前面的单链表其实全称是单向无头不循环链表&#xff0c;我们的链表从三个维度进行分类&#xff0c;一共分为八种。 1、单向和双向 可以看到第一个链表&#xff0c;其只能找到其后一个…

mybatis中${}和#{}的区别

先测试&#xff0c;再说结论 userService.selectStudentByClssIds(10000, "wzh or 11");List<StudentEntity> selectStudentByClssIds(Param("stuId") int stuId, Param("field") String field);<select id"selectStudentByClssI…

抗量子计算攻击的数据安全体系构建:从理论突破到工程实践

在“端 - 边 - 云”三级智能协同理论中&#xff0c;端 - 边、边 - 云之间要进行数据传输&#xff0c;网络的安全尤为重要&#xff0c;为了实现系统总体的安全可控&#xff0c;将构建安全网络。 可先了解我的前文&#xff1a;“端 - 边 - 云”三级智能协同平台的理论建构与技术实…

uniapp|实现手机通讯录、首字母快捷导航功能、多端兼容(H5、微信小程序、APP)

基于uniapp实现带首字母快捷导航的通讯录功能,通过拼音转换库实现汉字姓名首字母提取与分类,结合uniapp的scroll-view组件与pageScrollTo API完成滚动定位交互,并引入uni-indexed-list插件优化索引栏性能。 目录 核心功能实现动态索引栏生成​联系人列表渲染​滚动定位联动性…

【Linux】基础IO(二)

&#x1f4dd;前言&#xff1a; 上篇文章我们对Linux的基础IO有了一定的了解&#xff0c;这篇文章我们来讲讲IO更底层的东西&#xff1a; 重定向及其原理感受file_operation文件缓冲区 &#x1f3ac;个人简介&#xff1a;努力学习ing &#x1f4cb;个人专栏&#xff1a;Linux…

【生存技能】ubuntu 24.04 如何pip install

目录 原因解决方案说明关于忽略系统路径 在接手一个新项目需要安装python库时弹出了以下提示: 原因 这个报错是因为在ubuntu中尝试直接使用 pip 安装 Python 包到系统环境中&#xff0c;ubuntu 系统 出于稳定性考虑禁止了这种操作 这里的kali是因为这台机器的用户起名叫kali…

SHAP分析!Transformer-GRU组合模型SHAP分析,模型可解释不在发愁!

SHAP分析&#xff01;Transformer-GRU组合模型SHAP分析&#xff0c;模型可解释不在发愁&#xff01; 目录 SHAP分析&#xff01;Transformer-GRU组合模型SHAP分析&#xff0c;模型可解释不在发愁&#xff01;效果一览基本介绍程序设计参考资料 效果一览 基本介绍 基于SHAP分析…

知名人工智能AI培训公开课内训课程培训师培训老师专家咨询顾问唐兴通AI在金融零售制造业医药服务业创新实践应用

AI赋能未来工作&#xff1a;引爆效率与价值创造的实战营 AI驱动的工作革命&#xff1a;从效率提升到价值共创 培训时长&#xff1a; 本课程不仅是AI工具的操作指南&#xff0c;更是面向未来的工作方式升级罗盘。旨在帮助学员系统掌握AI&#xff08;特别是生成式AI/大语言模型…

Qt Creator 配置 Android 编译环境

Qt Creator 配置 Android 编译环境 环境配置流程下载JDK修改Qt Creator默认android配置文件修改sdk_definitions.json配置修改的内容 Qt Creator配置 异常处理删除提示占用编译报错连接安卓机调试APP闪退 环境 Qt Creator 版本 qtcreator-16.0.1Win10 嗯, Qt这个开发环境有点难…

智能手表蓝牙 GATT 通讯协议文档

以下是一份适用于智能手表的 蓝牙 GATT 通讯协议文档&#xff0c;适用于 BLE 5.0 及以上标准&#xff0c;兼容 iOS / Android 平台&#xff1a; 智能手表蓝牙 GATT 通讯协议文档 文档版本&#xff1a;V1.0 编写日期&#xff1a;2025年xx月xx日 产品型号&#xff1a;Aurora Wat…

RT-THREAD RTC组件中Alarm功能驱动完善

使用Rt-Thread的目的为了更快的搭载工程&#xff0c;使用Rt-Thread丰富的组件和第三方包资源&#xff0c;解耦硬件&#xff0c;在更换芯片时可以移植应用层代码。你是要RTT的目的什么呢&#xff1f; 文章项目背景 以STM32L475RCT6为例 RTC使用的为LSE外部低速32 .756k Hz 的…

用ffmpeg压缩视频参数建议

注意:代码中的斜杠\可以删除 一、基础压缩命令&#xff08;画质优先) libx265​​推荐配置 ffmpeg -i input.mp4 -c:v libx265 -crf 25 -preset medium -c:a aac -b:a 128k output.mp4-crf&#xff1a;建议25-28&#xff08;值越小画质越高&#xff09; -preset&#xff1a;平…

输入顶点坐标输出立方体长宽高的神经网络 Snipaste贴图软件安装

写一个神经网络&#xff0c;我输入立方体投影线段的三视图坐标&#xff0c;输出分类和长宽高 放这了明天接着搞 -------------------------------------------- 开搞 然而我的数据是这样的 winget install Snipaste f1启动&#xff0c;双击贴图隐藏 用右边4个数据做输入…

用python清除PDF文件中的水印(Adobe Acrobat 无法删除)

学校老师发的资料&#xff0c;有时候会带水印&#xff0c;有点强迫症的都想给它去掉。用Adobe Acrobat试了下&#xff0c;检测不到水印&#xff0c;无法删除&#xff01;分析发现原来这类PDF文件是用word编辑的&#xff0c;其中的水印是加在了页眉中&#xff01; 自己动手想办法…