ITX-3588J MIPI显示屏无法显示

固件类型:自行编译的固件
SDK包名称:rk3588_repo_sdk_v0.1.0a.7z
SDK修改内容:rk3588-firefly-itx-3588j.dts
Log日志:ubuntu_rk3588j_panel_err.txt

本帖最后由 wqh_001 于 2022-6-13 20:44 编辑

刚到手的ITX-3588J和DM-M10R800 V2 显示屏模组连接到一起。
网上下载并烧录“ITX-3588J-BE45-A1_Ubuntu20.04-Gnome-r211_v0.1.0a_220424.img”,ubuntu正常启动,HDMI与MIPI-DSI均正常。

在rk3588_repo_sdk_v0.1.0a.7z开发包上更新至rk3588/linux_release_v1.0.0b。
1.未做任何修改,全编译后,仅升级kernel/boot.img,ubuntu正常启动,HDMI正常,原始dts没有panel设备树,故panel无显示。

2.修改设备树rk3588-firefly-itx-3588j.dts为:

/dts-v1/;

#include "rk3588-firefly-itx-3588j.dtsi"
#include "rk3588-firefly-itx-cam-8ms1m.dtsi"

/ {
    model = "Firefly ITX-3588J HDMI(Linux)";
    compatible = "rockchip,rk3588-firefly-itx-3588j", "rockchip,rk3588";

    backlight: backlight {
        status = "okay";
        compatible = "pwm-backlight";
        enable-gpios = <&gpio2 RK_PC4 GPIO_ACTIVE_HIGH>;
        pwms = <&pwm12 0 50000 1>;
    };
};

&pwm12 {
        pinctrl-0 = <&pwm12m1_pins>;
        status = "okay";
};

//设置 dsi0 的开机 logo
&route_dsi0 {
        status = "okay";
        connect = <&vp3_out_dsi0>;
};

//把 dsi0 连接在 Port3 上
&dsi0_in_vp3 {
        status = "okay";
};

//打开 DPHY
&mipi_dcphy0 {
        status = "okay";
};

//打开 dsi0(注意这一部分较重要,涉及到屏幕的上电时序)
&dsi0 {
    status = "okay";
    //rockchip,lane-rate = <1000>;
    dsi0_panel: panel@0 {
        status = "okay";
        compatible = "simple-panel-dsi";
        reg = <0>;

        //选择之前的配置的背光节点
        backlight = <&backlight>;

        //设置 LCD 使能引脚
        enable-gpios = <&pca9555 PCA_IO0_2 GPIO_ACTIVE_HIGH>;

        //设置 LCD 复位引脚
        reset-gpios = <&gpio2 RK_PB4 GPIO_ACTIVE_LOW>;

        //设置 LCD 屏幕的上下电时序
        enable-delay-ms = <50>;
        prepare-delay-ms = <200>;
        reset-delay-ms = <50>;
        init-delay-ms = <55>;
        unprepare-delay-ms = <50>;
        disable-delay-ms = <20>;
        mipi-data-delay-ms = <200>;
        size,width = <120>;
        size,height = <170>;

        //设置 DSI(DPHY)的输出模式,一般默认为 Video 模式
        dsi,flags = <(MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST | MIPI_DSI_MODE_LPM | MIPI_DSI_MODE_EOT_PACKET)>;

        //设置 DSI 像素数据的输出格式,这部分的设置取决于接收端的屏幕是否支持该格式
        dsi,format = <MIPI_DSI_FMT_RGB888>;

        //设置使用的 lane 数量,默认为 4 lane
        dsi,lanes  = <4>;

        //设置 MIPI DSI 的上电指令
        panel-init-sequence = [
            //39 00 04 B9 83 10 2E
            // 15 00 02 CF FF
            05 78 01 11
            05 32 01 29
            //15 00 02 35 00
        ];

        //设置 MIPI DSI 的下电指令
        panel-exit-sequence = [
            05 00 01 28
            05 00 01 10
        ];

        //设置 LCD 屏幕的显示时序(该部分内容一般都可以从对应屏幕的 datasheet 中获取,如上图所示)
        disp_timings0: display-timings {
            native-mode = <&dsi0_timing0>;
            dsi0_timing0: timing0 {

                /* 显示时序的换算公式一般为:
                (hactive + hsync-len + hback-porch + hfront-porch)
                            x
                ( vactive + vsync-len + vback-porch + vfront-porch)x fps
                 = clock-frequency
                */
                clock-frequency = <72600000>;//<80000000>;
                hactive = <800>;//<768>;
                vactive = <1280>;
                hsync-len = <14>;   //20, 50,10
                hback-porch = <26>; //50, 56,10
                hfront-porch = <32>;//50, 30,180
                vsync-len = <8>;//4
                vback-porch = <20>;//4
                vfront-porch = <80>;//8
                hsync-active = <0>;
                vsync-active = <0>;
                de-active = <0>;
                pixelclk-active = <0>;
            };
        };

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

            port@0 {
                reg = <0>;
                panel_in_dsi: endpoint {
                    remote-endpoint = <&dsi_out_panel>;
                };
            };
        };
    };

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

        port@1 {
            reg = <1>;
            dsi_out_panel: endpoint {
            remote-endpoint = <&panel_in_dsi>;
            };
        };
    };
};

执行

./build.sh kernel

仅升级

sudo upgrade_tool di -b kernel/boot.img

问题来了。测试HDMI正常显示,但是panel黑屏无显示
uboot打印

Using display timing dts
dsi@fde20000:  detailed mode clock 72600 kHz, flags[a]
    H: 0800 0832 0846 0872
    V: 1280 1360 1368 1388
bus_format: 100e
VOP update mode to: 800x1280p0, type: MIPI0 for VP3

p_rate=1188000000, best_rate=69882352, div=17, sel=0

p_rate=1500000000, best_rate=71428571, div=21, sel=1

p_rate=0, best_rate=71428571, div=21, sel=1

p_rate=786215976, best_rate=71474179, div=11, sel=3
[result]p_rate=786215976, best_rate=71474179, div=11, sel=3
VOP VP3 enable Esmart3[500x501->500x501@150x389] fmt[2] addr[0xedf20000]
final DSI-Link bandwidth: 0 Kbps x 4
command interface is busy: 0x10001
failed to write cmd0: -110
failed to send on cmds: -110

kernel打印

[    4.915197] rockchip-drm display-subsystem: bound fde20000.dsi (ops 0xffffffc01115cd48)

抓取状态打印

<b>root@firefly:~# cat /sys/kernel/ls /sys/class/drm</b>
card0       card0-DP-2   card0-HDMI-A-1  card0-Writeback-1  renderD128  version
card0-DP-1  card0-DSI-1  card0-HDMI-A-2  card1              renderD129
<b>root@firefly:~# cat /sys/kernel/debug/dri/0/summary</b>
Video Port0: DISABLED
Video Port1: ACTIVE
    Connector: HDMI-A-2
        bus_format[100a]: RGB888_1X24
        overlay_mode[0] output_mode[f] color_space[0], eotf:0
    Display mode: 1920x1080p60
        clk[148500] real_clk[148500] type[48] flag[5]
        H: 1920 2008 2052 2200
        V: 1080 1084 1089 1125
    Esmart1-win0: ACTIVE
        win_id: 10
        format: XR24 little-endian (0x34325258) SDR[0] color_space[0] glb_alpha[0xff]
        rotate: xmirror: 0 ymirror: 0 rotate_90: 0 rotate_270: 0
        csc: y2r[0] r2y[0] csc mode[0]
        zpos: 1
        src: pos[0, 0] rect[1920 x 1080]
        dst: pos[0, 0] rect[1920 x 1080]
        buf[0]: addr: 0x00000000eed7e000 pitch: 7680 offset: 0
Video Port2: DISABLED
Video Port3: ACTIVE
    Connector: DSI-1
        bus_format[100a]: RGB888_1X24
        overlay_mode[0] output_mode[0] color_space[0], eotf:0
    Display mode: 800x1280p60
        clk[72600] real_clk[72600] type[48] flag[a]
        H: 800 832 846 872
        V: 1280 1360 1368 1388
    Esmart3-win0: ACTIVE
        win_id: 11
        format: XR24 little-endian (0x34325258) SDR[0] color_space[0] glb_alpha[0xff]
        rotate: xmirror: 0 ymirror: 0 rotate_90: 0 rotate_270: 0
        csc: y2r[0] r2y[0] csc mode[0]
        zpos: 3
        src: pos[0, 0] rect[800 x 1280]
        dst: pos[0, 0] rect[800 x 1280]
        buf[0]: addr: 0x00000000ee996000 pitch: 3200 offset: 0
<b>root@firefly:~# cat /sys/class/drm/card0-DSI-1/status</b>
connected

tchip_askquestions
ubuntu_rk3588j_panel_err.txt (87.9 KB)

其实我们有做 mk 适配 mipi 屏幕的:

./build.sh device/rockchip/rk3588/itx-3588j-BE45-A1-ubuntu.mk

太着急了,今天早上才看到,感谢!