首页 > 其他分享 >【RK3568】点亮eDP屏幕+双屏异显

【RK3568】点亮eDP屏幕+双屏异显

时间:2024-07-30 16:55:26浏览次数:9  
标签:status 引脚 双屏 edp 背光 eDP RK3568 屏幕

一、驱动eDP屏幕

        一般来说,屏幕的规格书中会找到屏幕的相关参数,如没有,也可直接找屏幕厂商要,首先打开屏幕的规格书,搜索EDID Table,可找到如下信息:

        (1)显示时序配置

        将这些参数对应到设备树中,即可完成下面修改,关键节点就是显示时序配置的display-timings节点,在这个节点中将hactive,vactive,hsyn-len等数值填入对应的EDID表中的数值;

edp屏幕节点设备树配置:

edp_panel: edp-panel {
        status = "okay";                                        // 表示设备状态为启用
        compatible = "simple-panel";                            // 指定兼容的设备类型
        backlight = <&backlight2>;                              // 指定背光设备
        enable-gpios = <&gpio2 RK_PA3 GPIO_ACTIVE_LOW>;         // 用于启用 eDP 面板的 GPIO 引脚,低电平有效
        pinctrl-names = "default";                              // 引脚控制器的名称
        pinctrl-0 = <&zhx_edp_en_gpio>;                         // 引脚控制器的配置
        prepare-delay-ms = <120>;                               // 准备时间延迟,单位为毫秒
        enable-delay-ms = <120>;                                // 启用时间延迟,单位为毫秒
        unprepare-delay-ms = <120>;                             // 取消准备时间延迟,单位为毫秒
        disable-delay-ms = <120>;                               // 禁用时间延迟,单位为毫秒
        bus-format = <MEDIA_BUS_FMT_RGB888_1X24>;               // 总线格式,24 位 RGB888

        bpc = <8>;                                              // 位深度(Bits Per Channel),8 位

        // 显示时序配置
        display-timings {
            native-mode = <&edp_timing1>;                       // 本地模式配置
            edp_timing1: timing1 {
                clock-frequency = <112200000>;                  // 时钟频率,单位为 Hz
                hactive = <1920>;                               // 水平有效像素
                vactive = <1080>;                               // 垂直有效像素
                hfront-porch = <100>;                           // 水平前肩
                hsync-len = <100>;                              // 水平同步脉冲长度
                hback-porch = <205>;                            // 水平后肩
                vfront-porch = <20>;                            // 垂直前肩
                vsync-len = <20>;                               // 垂直同步脉冲长度
                vback-porch = <20>;                             // 垂直后肩
                hsync-active = <0>;                             // 水平同步极性,0 表示低电平有效
                vsync-active = <0>;                             // 垂直同步极性,0 表示低电平有效
                de-active = <0>;                                // 数据使能极性,0 表示低电平有效
                pixelclk-active = <0>;                          // 像素时钟极性,0 表示低电平有效
            };
        };

        // 定义 eDP 面板的端口
        port {
            panel_in_edp: endpoint {
                remote-endpoint = <&edp_out_panel>;             // 连接到 eDP 输出端点
            };
        };
    };

其中上面代码中:

enable-gpios:这个gpio对应你设备上的eDP屏幕的使能引脚

        (2)背光

        在上面的edbpanel节点中背光引用的是backlight2,这是我的背光节点

backlight2: backlight2 {
                    compatible = "pwm-backlight";
                    pwms = <&pwm6 0 25000 0>;//根据原理图得知使用的是哪一个pwm
                    enable-gpios = <&gpio0 RK_PC7 GPIO_ACTIVE_HIGH>;//背光电路的使能引脚,有点屏幕没有,可以省略
                    pinctrl-names = "default";
                    pinctrl-0 = <&edp_bl_en>;
                    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 = <50>; // 背光默认亮度
            };

        在背光中,要指定背光使用的是哪一个pwm,在原理图可以找到,若背光电路有使能引脚,则要设置gpio功能,再就是设置背光的默认亮度,也就是屏幕点亮后的默认亮度;

        (3)指定vop

        rk3568中必须要为屏幕设置vop,并且如果要开发多屏异显的话,vop还不能冲突,如下表

        

        可以看到rk3568支持3个vop,若eDP使用vop0的话,MIPI只能使用vop1,eDP屏幕vop配置

&edp {
    force-hpd;                                                  // 强制热插拔检测
    status = "okay";
    connect = <&vp0_out_edp>;                                   // 连接到 VP0 的 eDP 输出
    ports {
        port@1 {
            reg = <1>; 

            edp_out_panel: endpoint {
                remote-endpoint = <&panel_in_edp>;              // 连接到 eDP 面板的输入端点
            };
        };
    };
};

 ports 节点中连接到edp-panel节点中的port

(4)使能相关接口

// 启用 eDP PHY
&edp_phy {
    status = "okay";
};

// 启用 eDP 输入 VP0
&edp_in_vp0 {
    status = "okay";
};

// 禁用 eDP 输入 VP1
&edp_in_vp1 {
    status = "disabled";
};

// 路由 eDP
&route_edp {
    status = "okay";
    connect = <&vp0_out_edp>;                                   // 连接到 VP0 的 eDP 输出
};

// 启用 PWM6
&pwm6 {
    status = "okay";
};

为了方便管理,我将eDP相关的配置单独放一个文件,如果要想我这样操作,需要将其他设备树文件中的类似于上述的操作语句注释,避免在此文件中启用了,但是顶层设备树又将它关闭了,完整设备树源码:

/*********************************************************************
* 文件名:rk3568-ZHX-eDP.dtsi
* 描述:  eDP屏幕配置
* 更新:
* 时间:  2024/7/19                   
* 版本:  V1.1                                 
**********************************************************************/

/ {
    // 定义 eDP 面板
    edp_panel: edp-panel {
        status = "disable";                                        // 表示设备状态为启用
        compatible = "simple-panel";                            // 指定兼容的设备类型
        backlight = <&backlight2>;                              // 指定背光设备
        enable-gpios = <&gpio2 RK_PA3 GPIO_ACTIVE_LOW>;         // 用于启用 eDP 面板的 GPIO 引脚,低电平有效
        pinctrl-names = "default";                              // 引脚控制器的名称
        pinctrl-0 = <&zhx_edp_en_gpio>;                         // 引脚控制器的配置
        prepare-delay-ms = <120>;                               // 准备时间延迟,单位为毫秒
        enable-delay-ms = <120>;                                // 启用时间延迟,单位为毫秒
        unprepare-delay-ms = <120>;                             // 取消准备时间延迟,单位为毫秒
        disable-delay-ms = <120>;                               // 禁用时间延迟,单位为毫秒
        bus-format = <MEDIA_BUS_FMT_RGB888_1X24>;               // 总线格式,24 位 RGB888

        bpc = <8>;                                              // 位深度(Bits Per Channel),8 位

        // 显示时序配置
        display-timings {
            native-mode = <&edp_timing1>;                       // 本地模式配置
            edp_timing1: timing1 {
                clock-frequency = <112200000>;                  // 时钟频率,单位为 Hz
                hactive = <1920>;                               // 水平有效像素
                vactive = <1080>;                               // 垂直有效像素
                hfront-porch = <100>;                           // 水平前肩
                hsync-len = <100>;                              // 水平同步脉冲长度
                hback-porch = <205>;                            // 水平后肩
                vfront-porch = <20>;                            // 垂直前肩
                vsync-len = <20>;                               // 垂直同步脉冲长度
                vback-porch = <20>;                             // 垂直后肩
                hsync-active = <0>;                             // 水平同步极性,0 表示低电平有效
                vsync-active = <0>;                             // 垂直同步极性,0 表示低电平有效
                de-active = <0>;                                // 数据使能极性,0 表示低电平有效
                pixelclk-active = <0>;                          // 像素时钟极性,0 表示低电平有效
            };
        };

        // 定义 eDP 面板的端口
        port {
            panel_in_edp: endpoint {
                remote-endpoint = <&edp_out_panel>;             // 连接到 eDP 输出端点
            };
        };
    };

    // 定义背光设备
    backlight2: backlight2 {
        compatible = "pwm-backlight";                           // 指定兼容的设备类型为 PWM 背光
        pwms = <&pwm6 0 25000 0>;                               // PWM 配置,使用 pwm6,频率为 25000 Hz
        enable-gpios = <&gpio0 RK_PC7 GPIO_ACTIVE_HIGH>;        // 用于启用背光的 GPIO 引脚,高电平有效
        pinctrl-names = "default";                              // 引脚控制器的名称
        pinctrl-0 = <&edp_bl_en>;                               // 引脚控制器的配置
        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 = <100>;                        // 默认亮度级别
    };
};

// 启用 eDP PHY
&edp_phy {
    status = "okay";
};

// 启用 eDP 输入 VP0
&edp_in_vp0 {
    status = "okay";
};

// 禁用 eDP 输入 VP1
&edp_in_vp1 {
    status = "disabled";
};

// 路由 eDP
&route_edp {
    status = "okay";
    connect = <&vp0_out_edp>;                                   // 连接到 VP0 的 eDP 输出
};

// 启用 PWM6
&pwm6 {
    status = "okay";
};

// 配置 eDP
&edp {
    force-hpd;                                                  // 强制热插拔检测
    status = "okay";
    connect = <&vp0_out_edp>;                                   // 连接到 VP0 的 eDP 输出
    ports {
        port@1 {
            reg = <1>; 

            edp_out_panel: endpoint {
                remote-endpoint = <&panel_in_edp>;              // 连接到 eDP 面板的输入端点
            };
        };
    };
};

&pinctrl {
    zhx_edp_bl_en: zhx_edp_bl_en {
        rockchip,pins = <0 RK_PC7 RK_FUNC_GPIO &pcfg_pull_down>;
    };
    zhx_edp_en_gpio: edp-en-gpio {
        rockchip,pins = <2 RK_PA3 RK_FUNC_GPIO &pcfg_pull_none>;
    };
};

        将该文件在rk3568-evb5-ddr4-v10.dtsi文件中包含,编译查看现象即可

二、双屏异显

        我这里使用MIPI+eDP屏幕双屏异显的方式,前提条件,MIPI屏幕已经点亮。

        (1)指定主副屏

        在rk3568中双屏异显需要先配置主副屏,若不设置主副屏,显示可能会有问题,

device/rockchip/rk356x/rk3568_r/rk3568_r.mk文件中末尾添加

PRODUCT_PROPERTY_OVERRIDES += vendor.hwc.device.primary=DSI

PRODUCT_PROPERTY_OVERRIDES += vendor.hwc.device.extend=eDP

  vendor.hwc.device.primary指定主屏为MIPI, vendor.hwc.device.extend指定副屏为eDP

        (2)异显的两种方案

  • Android Presentation,需要 APP 应用开发中调用相应接口使指定的 view (Presentationview 是一个特殊的 dialog 类型 view)在副屏中显示。 
  • Android Activity 指定屏幕启动,APP 在启动 activity 时可以使用 display id 参数在对应的屏幕上直接显示

        这里使用的是第二种方法。

        这里提供一个Demo,可以自行测试显示情况,

链接: https://pan.baidu.com/s/19zjnUSb2Ser-P_64GvJ8EQ?pwd=dh7h 提取码: dh7h 
--来自百度网盘超级会员v6的分享

主要代码:

    /**
     * 在副屏上启动 Activity
     *
     * @param context 上下文对象
     */
    private void launchActivityOnSecondScreen(Context context) {
        ActivityOptions options = ActivityOptions.makeBasic();

        // 获取 DisplayManager 服务
        DisplayManager displayManager = (DisplayManager) context.getSystemService(Context.DISPLAY_SERVICE);
        // 获取所有的展示类型的显示设备
        Display[] presentationDisplays = displayManager.getDisplays(DisplayManager.DISPLAY_CATEGORY_PRESENTATION);

        // 如果有可用的副屏显示设备
        if (presentationDisplays.length > 0) {
            Display secondDisplay = presentationDisplays[0];
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                options.setLaunchDisplayId(secondDisplay.getDisplayId());
            }

            // 创建并启动新的 Activity
            Intent intent = new Intent(context, Screen2.class);
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(intent, options.toBundle());
        }
    }

标签:status,引脚,双屏,edp,背光,eDP,RK3568,屏幕
From: https://blog.csdn.net/weixin_62370184/article/details/140798789

相关文章

  • 案例源码公开!分享瑞芯微RK3568J与FPGA的PCIe通信案例,嵌入式必读!
    ARM+FPGA架构有何种优势近年来,随着中国新基建、中国制造2025的持续推进,单ARM处理器越来越难满足工业现场的功能要求,特别是能源电力、工业控制、智慧医疗等行业通常需要ARM+FPGA架构的处理器平台来实现特定的功能,例如多路/高速AD采集、多路网口、多路串口、多路/高速并行DI/DO......
  • Android开发 - 存储辅助类 SharedPreferences 解析
    SharedPreferences简介SharedPreferences是Android平台上一个轻量级的存储辅助类,用来保存应用的一些常用配置。SharedPreferences的数据以键值对(key,val)的进行保存在以xml形式的文件中。在应用中通常做一些简单数据的持久化缓存从editor的put方法可以看出SharedPreferenc......
  • 【Android】数据存储方案——文件存储、SharedPreferences、SQLite数据库用法总结
    文章目录文件存储存储到文件读取文件SharedPreferences存储存储获取SharedPreferences对象Context类的getSharedPreferences()方法Activity类的getPreferences()方法PreferenceManager类中的getDefaultSharedPreferences()方法示例读取记住密码的功能SQLite......
  • Linux获取线程调度策略pthread_attr_getschedpolicy
    thread_attr_getschedpolicy 函数是POSIX线程(pthread)库中用于获取线程属性对象中的调度策略的函数。在实时系统中,调度策略决定了线程如何被调度器选择来执行。pthread_attr_getschedpolicy 函数允许你查询一个已创建的线程属性对象(pthread_attr_t 类型)中设置的调度策略......
  • RK3568 gps N303-5Q
    修改目录kernel-5.10device/rockchip/rk356x/frameworks/basesystem/coredts配置kernel-5.10&uart4{       status="okay";       pinctrl-0=<&uart4m0_xfer>;+      gnss{+               //compatible="u-blox,ne......
  • SharedPreferences 和 MMKV 是何方神圣
    一、概述SharedPreferences和MMKV都是Android平台保存本地数据的工具,用于保存一些常用配置。二、SharedPreferences1.类似Map集合,将Key-Value对存储于硬盘上的XML文件,以XML文件的形式保存在/data/data/包名/shared_prefs目录下。数据较多时会有性能问题。2.SharedPrefe......
  • RK3568平台(基础篇)开机LOGO
    一.开机LOGO概述rk3568开机logo由uboot和kerne两阶段所用图片构成uboot启动阶段主动加载logo.bmp,kernel启动阶段会加载logo.bmp和logokernel.bmp。在内核编译时这两张图片会打包到resource.img镜像,然后再合并到boot.img;logo文件直接关系boot.img大小boot.img分区超出分......
  • RK3568平台(vendor篇)分区设置
    一.分区概述在对评估板进行开发验证时,时常会遇到根目录空间不足的情况,而在其他分区又有冗余空间,这时则需要对分区大小重新进行分配,合理化利用分区空间。如何查看分区大小:df-h指令查看parameter.txt分区表修改路径rockdev/parameter.txt二.parameter.txt分区表介绍FI......
  • 鸿蒙OpenHarmony南向/北向快速开发教程-迅为RK3568开发板
    鸿蒙OpenHarmony南向/北向快速开发教程-迅为RK3568开发板 大家期待已久的迅为RK3568开发板终于迎来了鸿蒙4.1系统的强势支持!想知道如何实现快速开发学习吗?跟着我们一起来探索吧!    迅为RK3568开发板:     想象一下,你手中的RK3568开发板能够轻松运行鸿蒙4.1......
  • 解决TensorFlow中的FailedPreconditionError:未初始化的变量
    解决TensorFlow中的FailedPreconditionError:未初始化的变量......