Edit online

屏幕配置

Edit online

RGB

配置 Uboot

在 Luban 根目录下执行 make um,进入 uboot 的功能配置界面,使能显示模块驱动:
Device Drivers
    Graphics support
        ArtInChip Graphics  --->
            [*]   Enable ArtInChip Video Support
            [*]   ArtInChip display rgb support
            [ ]   ArtInChip display lvds support
            [ ]   ArtInChip display mipi-dsi support
            <*>   ArtInChip Panel Drivers (ArtInChip general RGB panel)  --->

配置 Kernel

在 Luban 根目录下执行 make km,进入 Kernel 的功能配置界面,使能显示模块驱动:

Device Drivers
    Graphics support
        ArtInChip Graphics  --->
            <*> ArtInChip Framebuffer support
            [*]   ArtInChip display rgb support
            [ ]   ArtInChip display lvds support
            [ ]   ArtInChip display mipi-dsi support
            <*>   ArtInChip Panel Drivers (ArtInChip general RGB panel)  --->

uboot dts

Uboot 如果要进行显示,则声明相应的配置为预加载,以 demo88_nand 工程为例,文件为 target/d211/demo88_nand/board-u-boot.dtsi

声明通路
&disp {
    u-boot,dm-pre-reloc;
    fb0: fb@0 {
        u-boot,dm-pre-reloc;
        port {
            fb0_out: endpoint {
                u-boot,dm-pre-reloc;
            }
        };
    };
};

&de0 {
    u-boot,dm-pre-reloc;
    port@0 {
        de0_in: endpoint {
            u-boot,dm-pre-reloc;
        };
    };

    port@1 {
        de0_out: endpoint {
            u-boot,dm-pre-reloc;
        };
    };
};
&rgb0 {                             //RGB
    u-boot,dm-pre-reloc;
    port@0 {
        rgb0_in: endpoint {
            u-boot,dm-pre-reloc;
        };
    };

    port@1 {
        rgb0_out: endpoint {
            u-boot,dm-pre-reloc;
        };
    };
};
声明屏幕参数
panel_rgb {
    u-boot,dm-pre-reloc;
    port {
        panel_rgb_in: endpoint {
        u-boot,dm-pre-reloc;
        };
    };

    display-timings {
        u-boot,dm-pre-reloc;
        timing0: 1024x600 {
            u-boot,dm-pre-reloc;
        };
    };
};
声明屏幕引脚
lcd_rgb565_ld_pins: lcd-1 {
    u-boot,dm-pre-reloc;
    pins {
        u-boot,dm-pre-reloc;
    };
};

系统 dts

系统的 dts 将进行完整的功能配置,以 demo88_nand 工程为例,文件为 target/d211/demo88_nand/board.dts
  1. 配置通路
    通过 port 和 status 结点,定义一条数据通道:
    fb       |      de    |     |     rgb    |     panel
    port  --> port0   port1 -->  port0   port1 -->  port
    &fb0 {
        port {
            fb0_out: endpoint {
                remote-endpoint = <&de0_in>;
            };
        };
    };
    
    &de0 {
        status = "okay";
        port@0 {
            reg = <0>;
            de0_in: endpoint {
            remote-endpoint = <&fb0_out>;
        };
    
        port@1 {
            reg = <1>;
            de0_out: endpoint {
                remote-endpoint = <&rgb0_in>;   //RGB
            }
        };
    };
    
    &rgb0 {
        pinctrl-names = "default", "sleep";
        pinctrl-0 = <&lcd_rgb565_ld_pins>;          //RGB
        pinctrl-1 = <&lcd_rgb565_ld_sleep_pins>;
        status = "okay";
        port@0 {
            reg = <0>;
            rgb0_in: endpoint {
                remote-endpoint = <&de0_out>;
            }
        };
    
        port@1 {
            reg = <1>;
            rgb0_out: endpoint {
                remote-endpoint = <&panel_rgb_in>;  //RGB
            };
        };
    }
  2. 配置屏幕参数

    其中类似 enable-gpios 控制引脚需要根据实际显示屏的需要增加或减少,驱动中做相应修改, rgb-modeinterface-format 需要从规格书中获取, data-order data-mirror 需要根据板级走线的顺序设置相关参数。 clock-phase 需要根据最终实际的显示效果做相应调整。 关于参数详细的解析,参考 Panel_RGB 的配置说明。

    panel_rgb {
    compatible = "artinchip,aic-general-rgb-panel";
    status = "okay";
    
    enable-gpios = <&gpio_e 19 GPIO_ACTIVE_HIGH>;
    sleep-gpios = <&gpio_e 15 GPIO_ACTIVE_HIGH>;
    rgb-mode = <PRGB>;
    interface-format = <PRGB_16BIT_LD>;
    clock-phase = <DEGREE_0>;
    data-order = <RGB>;
    disp-dither = <DITHER_RGB565>;
    
    port {
        panel_rgb_in: endpoint {
        remote-endpoint = <&rgb0_out>;
        };
    };
    
    display-timings {
        native-mode = <&timing0>;
        timing0: 1024x600 {
            lock-frequency = <52000000>;
            hactive = <1024>;
            vactive = <600>;
            hback-porch = <160>;
            hfront-porch = <160>;
            hsync-len = <20>;
            vback-porch = <12>;
            vfront-porch = <20>;
            vsync-len = <3>;
            de-active = <1>;
            pixelclk-active = <1>;
        };
    };
  3. 配置引脚

    引脚的配置统一在 d211-pinctrl.dtsi 中完成,在 rgb0 节点中直接进行了引用:

    &rgb0 {
        pinctrl-names = "default", "sleep";
        pinctrl-0 = <&lcd_rgb565_ld_pins>;
        pinctrl-1 = <&lcd_rgb565_ld_sleep_pins>;
        status = "okay";
        ......
    };
Edit online

LVDS

LVDS 屏的调试和 RGB 类似,只需要把规格书中所描述的时序和规格参数加入相应的配置文件即可,也不需要额外的驱动程序。

uboot 配置

在 Luban 根目录下执行 make um,进入 uboot 的功能配置界面,使能显示模块驱动:

Device Drivers
    Graphics support
        ArtInChip Graphics  --->
            [*]   Enable ArtInChip Video Support
            [ ]   ArtInChip display rgb support
            [*]   ArtInChip display lvds support
            [ ]   ArtInChip display mipi-dsi support
            <*>   ArtInChip Panel Drivers (ArtInChip general LVDS panel)  --->

kernel 配置

在 Luban 根目录下执行 make km,进入 kernel 的功能配置界面,使能显示模块驱动:

Device Drivers
    Graphics support
        ArtInChip Graphics  --->
            <*> ArtInChip Framebuffer support
            [ ]   ArtInChip display rgb support
            [*]   ArtInChip display lvds support
            [ ]   ArtInChip display mipi-dsi support
            <*>   ArtInChip Panel Drivers (ArtInChip general LVDS panel)  --->

uboot dts

uboot 如果要进行显示,则声明相应的配置为预加载,以 demo128_nand 工程为例,文件为 target/d211/demo128_nand/board-u-boot.dtsi

声明通路
&disp {
    u-boot,dm-pre-reloc;
    fb0: fb@0 {
        u-boot,dm-pre-reloc;
        port {
            fb0_out: endpoint {
                u-boot,dm-pre-reloc;
            }
        };
    };
};

&de0 {
    u-boot,dm-pre-reloc;
    port@0 {
        de0_in: endpoint {
            u-boot,dm-pre-reloc;
        };
    };

    port@1 {
        de0_out: endpoint {
            u-boot,dm-pre-reloc;
        };
    };
};
&lvds0 {                            //lvds
    u-boot,dm-pre-reloc;
    port@0 {
        lvds0_in: endpoint {
            u-boot,dm-pre-reloc;
        };
    };

    port@1 {
        lvds0_out: endpoint {
            u-boot,dm-pre-reloc;
        };
    };
};
声明屏幕参数
panel_lvds {
    u-boot,dm-pre-reloc;
    port {
        panel_lvds_in: endpoint {
            u-boot,dm-pre-reloc;
        };
    };

    display-timings {
        u-boot,dm-pre-reloc;
        timing1: 1024x600 {
            u-boot,dm-pre-reloc;
        };
    };
};
声明屏幕引脚
lvds1_pins: lvds1-0 {
        u-boot,dm-pre-reloc;
    pins {
        u-boot,dm-pre-reloc;
    };
};

系统 DTS 参数

系统的 dts 将进行完整的功能配置,以 demo128_nand 工程为例,文件为 target/d211/demo128_nand/board.dts
  1. 配置通路
    通过 port 和 status 结点,定义一条数据通道:
    fb       |      de    |     |     lvds    |     panel
    port  --> port0   port1 -->  port0   port1 -->  port
  2. 配置屏幕参数
    panel_lvds {
        compatible = "artinchip,aic-general-lvds-panel";
        data-mapping = "vesa-24";
        data-channel = "single-link1";
        status = "okay";
    
        enable-gpios = <&gpio_c 7 GPIO_ACTIVE_HIGH>;
        port {
            panel_lvds_in: endpoint {
                remote-endpoint = <&lvds0_out>;
            };
        };
    
        display-timings {
            native-mode = <&timing1>;
            timing1: 1024x600 {
                clock-frequency = <52000000>;
                hactive = <1024>;
                vactive = <600>;
                hback-porch = <160>;
                hfront-porch = <160>;
                hsync-len = <20>;
                vback-porch = <20>;
                vfront-porch = <12>;
                vsync-len = <3>;
                de-active = <1>;
                pixelclk-active = <1>;
            };
        };
    };
  3. 配置引脚

    引脚的配置统一在 d211-pinctrl.dtsi 中完成,在 rgb0 节点中直接进行了引用

    &lvds0 {
        pinctrl-names = "default";
        pinctrl-0 = <&lvds1_pins>;
        status = "okay";
        ......
    }
Edit online

MIPI

每一款 MIPI 屏都需要一个独立的驱动程序,因此调试 MIPI 屏时,不仅需要在 DTS 中设置参数,还需要在 kernel 和 uboot 中添加屏幕所对应的驱动:

uboot 配置

在 Luban 根目录下执行 make um,进入 uboot 的功能配置界面,使能显示模块驱动:
Device Drivers
    Graphics support
        ArtInChip Graphics  --->
            [*]   Enable ArtInChip Video Support
            [ ]   ArtInChip display rgb support
            [ ]   ArtInChip display lvds support
            [ ]   ArtInChip display mipi-dsi support
            <*>   ArtInChip Panel Drivers (ArtInChip panel driver for B080XAN)  --->

kernel 配置

在 Luban 根目录下执行 make km,进入 kernel 的功能配置界面,使能显示模块驱动:

Device Drivers
    Graphics support
        ArtInChip Graphics  --->
            <*> ArtInChip Framebuffer support
            [ ]   ArtInChip display rgb support
            [ ]   ArtInChip display lvds support
            [*]   ArtInChip display mipi-dsi support
            <*>   ArtInChip Panel Drivers (ArtInChip panel driver for B080XAN)  --->

uboot dts

uboot 如果要进行显示,则声明相应的配置为预加载,以 demo88_nand 工程为例,文件为 target/d211/demo88_nand/board-u-boot.dtsi

声明通路
&disp {
    u-boot,dm-pre-reloc;
    fb0: fb@0 {
        u-boot,dm-pre-reloc;
        port {
            fb0_out: endpoint {
                u-boot,dm-pre-reloc;
            };
        };
    };
};
&de0 {
    u-boot,dm-pre-reloc;
    port@0 {
        de0_in: endpoint {
            u-boot,dm-pre-reloc;
        };
    };

    port@1 {
        de0_out: endpoint {
            u-boot,dm-pre-reloc;
        };
    };
};
&dsi0 {                     //mipi dsi
    u-boot,dm-pre-reloc;
    port@0 {
        dsi0_in: endpoint {
            u-boot,dm-pre-reloc;
        };
    };

    port@1 {
        dsi0_out: endpoint {
            u-boot,dm-pre-reloc;
        };
    };
};
声明屏幕参数
panel_dsi {
    u-boot,dm-pre-reloc;
    port {
        panel_dsi_in: endpoint {
            u-boot,dm-pre-reloc;
        };
    };
};
声明屏幕引脚
dsi_pins: dsi-0 {
        u-boot,dm-pre-reloc;
    pins {
        u-boot,dm-pre-reloc;
    };
};

系统 dts

系统的 dts 将进行完整的功能配置,以 demo128_nand 工程为例,文件为 target/d211/demo128_nand/board.dts
  1. 配置通路
    通过 port 和 status 结点,定义了一条数据通道
    fb       |      de    |     |     mipi    |     panel
    port  --> port0   port1 -->  port0   port1 -->  port
    &fb0 {
        port {
            fb0_out: endpoint {
                remote-endpoint = <&de0_in>;
            };
        };
    };
    
    &de0 {
        status = "okay";
        port@0 {
            reg = <0>;
            de0_in: endpoint {
                remote-endpoint = <&fb0_out>;
            };
        };
    
        port@1 {
            reg = <1>;
            de0_out: endpoint {
                remote-endpoint = <&dsi0_in>;   //mipi dsi
            };
        };
    };
    
    &dsi0 {
        pinctrl-names = "default";
        pinctrl-0 = <&dsi_pins>;
        status = "okay";
    
        data-clk-inverse;
    
        port@0 {
            reg = <0>;
            dsi0_in: endpoint {
                remote-endpoint = <&de0_out>;
            };
        };
    
        port@1 {
            reg = <1>;
            dsi0_out: endpoint {
                remote-endpoint = <&panel_dsi_in>;
            };
        };
    };
  2. 配置屏幕参数
        panel_dsi {
        compatible = "artinchip,aic-dsi-panel-simple";
        status = "okay";
    
        enable-gpios = <&gpio_c 6 GPIO_ACTIVE_HIGH>;
    
        port {
            panel_dsi_in: endpoint {
                remote-endpoint = <&dsi0_out>;
            };
        };
    };
    
  3. 配置引脚

    引脚的配置统一在 d211-pinctrl.dtsi 中完成,在 rgb0 节点中直接进行了引用

    &dsi0 {
        pinctrl-names = "default";
        pinctrl-0 = <&dsi_pins>;
        status = "okay";
        ......
    }
Edit online

背光配置

如果没有调节背光亮度需求,仅仅是亮或黑屏,则用 GPIO 控制较为简单,只需要在 dts panel 节点中一个地方配置好就可以,如下:
注:
屏幕的调试尽量在 kernel 中完成,然后再移植到 uboot 中。
panel_xxx {
    compatible = "artinchip,aic-general-lvds-panel";
    status = "okay";

    enable-gpios = <&gpio_c 7 GPIO_ACTIVE_HIGH>; //背光控制引脚,须和原理图一致
    port {
        panel_lvds_in: endpoint {
            remote-endpoint = <&lvds0_out>;
        };
};

PWM 控制背光

如果有调节背光亮度的需求,则需要使用 PWM 来控制背光,配置如下参数,详细流程如下所示:
  1. board.dts 的 panel 节点,添加 backlight 节点:
    panel_xxx {
        compatible = "artinchip,aic-general-lvds-panel";
        status = "okay";
    
        //enable-gpios = <&gpio_c 7 GPIO_ACTIVE_HIGH>;
        backlight = <&backlight>;//添加 backlight
        port {
            panel_lvds_in: endpoint {
                remote-endpoint = <&lvds0_out>;
            };
    };
  2. board.dts 中,使能 backlight 节点:
    backlight: backlight {
         compatible = "pwm-backlight";
         /* pwm node name; pwm device No.; period_ns; pwm_polarity */
         pwms = <&pwm 0 1000000 0>; //硬件对应的哪一路 PWM 接口,需要和原理图确认
         brightness-levels = <0 10 20 30 40 50 60 70 80 90 100>; //每一级对应的占空百分比
         default-brightness-level = <6>;
         status = "okay";
    };
  3. board.dts 中,使能对应的 PWM:
    &pwm {
        status = "okay";    //PWM 节点总开关
        pinctrl-names = "default";
        pinctrl-0 = <&pwm0_pins_d>;    //添加背光控制 pinmux 引脚
        /* mode: up-count, down-count, up-down-count
           action: none, low, high, inverse */
        pwm0 {
            aic,mode = "up-count";
            aic,tb-clk-rate = <24000000>;
            aic,rise-edge-delay = <10>;
            aic,fall-edge-delay = <10>;
            /*            CBD,    CBU,    CAD,    CAU,    PRD,   ZRO */
            aic,action0 = "none", "none", "none", "low", "none", "high";
            aic,action1 = "none", "none", "none", "high", "none", "low";
            status = "okay";    //使能硬件对应那一路的 PWM 子节点
        };
        ......
    };
  4. board-u-boot.dtsi 中,添加对应的 PWM 节点:
    / {
        ......
        backlight: backlight {
            u-boot,dm-pre-reloc;
        };
    };
    
    &pwm {
        u-boot,dm-pre-reloc;
        pwm0 {
            u-boot,dm-pre-reloc;
        };
        ......
    };
    
    &pinctrl {
        ......
        pwm0_pins_d: pwm0-3 {
            u-boot,dm-pre-reloc;
            pins {
                u-boot,dm-pre-reloc;
            };
        };
        ......
    };
  5. 确认内核中,打开如下配置
    CONFIG_PWM=y
    CONFIG_PWM_ARTINCHIP=y
    CONFIG_BACKLIGHT_PWM=y
  6. 确认 uboot 中,打开如下配置
    CONFIG_PWM_ARTINCHIP=y
    CONFIG_BACKLIGHT_PWM=y

PWM 背光测试调试

  • 确认硬件信号的连通性。

  • 查看启动 log 是否有异常。

  • 查看如下命令节点是否存在,并通过命令调节背光或测试 PWM 输出信号:
    echo 5 > /sys/class/backlight/backlight/brightness //设置 brightness 级数, 对应到 backlight 节点设置的占空百分比。
Edit online

屏幕调试

屏幕的调试尽量在 kernel 中完成,然后再移植到 uboot 中。