迅為國產RK3568開發板Android移植 LCD 屏幕


rk3568 芯片非常強大,可以支持的屏幕接口有很多,顯示接口支持可是非常豐富的,

 

 

 

iTOP-rk3568 開發板支持 MIPI 接口的屏幕,接口如下圖所示:

 

 

 

 

 

 

 

1 屏幕點亮流程

點亮屏幕基本的流程是一致的,一般是背光使能---->背光點亮---->屏幕使能---->reset

腳按照指定的時序/波形拉高或者拉低---->初始化序列命令發送。

流程主要是以下幾步

l

需要向屏幕廠商要一些屏幕關鍵參數和資料

l

進行關鍵引腳對應

l

進行設備樹配置

l

進行驅動配置

l

源碼編譯,燒寫鏡像測試

 

15.2.1關鍵引腳對應

 

15.2.2屏幕關鍵參數

15.2.3屏幕初始化序列改寫

 

 

 

 

 

 

 

2根據屏參和硬件設計填寫 dts

這一部分是重點,全部之前的工作全為此處進行准備。我們新建一個 dtsi 文件特意放屏

幕相關的:kernel/arch/arm64/boot/dts/rockchip/topeet_rk3568_lcds.dtsi

然后在 kernel/arch/arm64/boot/dts/rockchip/rk3568-evb1-ddr4-v10.dts 文件中加入這個頭文

件,如下圖所示:

 

 

 

 

 

另注意,由於 DTS 文件設計到層層包含(DTS 文件可以包含后綴為.dtsi 的文件,作用就

C 語言中的.h 文件),故建議重要配置及板卡特性配置寫到最后一級的 DTS 文件中,防

止由於在較高層級的 dtsi 配置后手誤在后面又進行了配置,導致配置被錯誤覆蓋。

共需要以下幾個重點內容:dsi, route_dsi, backlight, vcc_lcd, dsi_in_vopb,

dsi_in_vopl,vopb

 

2.1 dsi節點

 

mipi 屏幕我們使用 dsi1 接口,所以需要在設備樹里面查找 dsi 節點,如下圖所示:

kernel/arch/arm64/boot/dts/rockchip/rk3568.dtsi

(瑞芯微寫好的)

 

 

 

 

 

 

 

 

 

 

 

kernel/arch/arm64/boot/dts/rockchip/rk3568.dtsi (瑞芯微寫好的)

dsi1: dsi@fe070000 {

compatible = "rockchip,rk3568-mipi-dsi";

reg = <0x0 0xfe070000 0x0 0x10000>;

interrupts = <GIC_SPI 69 IRQ_TYPE_LEVEL_HIGH>;

clocks = <&cru PCLK_DSITX_1>, <&cru HCLK_VO>, <&video_phy1>;

clock-names = "pclk", "hclk", "hs_clk";

resets = <&cru SRST_P_DSITX_1>;

reset-names = "apb";

phys = <&video_phy1>;

phy-names = "mipi_dphy";

power-domains = <&power RK3568_PD_VO>;

rockchip,grf = <&grf>;

#address-cells = <1>;

#size-cells = <0>;

status = "disabled";

ports {

#address-cells = <1>;

#size-cells = <0>;

dsi1_in: port@0 {

reg = <0>;

#address-cells = <1>;

#size-cells = <0>;

dsi1_in_vp0: endpoint@0 {

reg = <0>;

remote-endpoint = <&vp0_out_dsi1>;

status = "disabled";

};

dsi1_in_vp1: endpoint@1 {

reg = <1>;

remote-endpoint = <&vp1_out_dsi1>;

status = "disabled";

};

};

};

};

默認的源碼中是配置了 dsi1 節點的,是適配的瑞芯微的屏幕。現在我們要適配迅為的

MIPI 7 寸屏,所以我們在修改之前,要刪掉瑞芯微之前適配的屏幕節點。在下圖的設備樹中

找到&dsi1 以及和 dsi1 相關的注釋掉。

 

 

 

 

 

 

 

 

好,現在接下來便可以在 topeet_rk3568_lcds.dtsi 中配置迅為的屏幕了。配置如下:

&dsi1 {

status = "okay";

dsi1_panel: panel@0 {

status = "okay";

compatible = "simple-panel-dsi";

reg = <0>;

//供電電壓是 3.3V

power-supply = <&vcc3v3_lcd1_n>;

//設置背光

backlight = <&backlight>;

//reset-gpios 表示屏幕 reset 引腳,拉低,具體的拉高或者拉低要根據內

核配置和時序要求來進行對應的修改

reset-gpios = <&gpio3 RK_PC7 GPIO_ACTIVE_LOW>;

//enable-gpios = <&gpio3 RK_PC6 GPIO_ACTIVE_HIGH>;

//下述配置中有一些延時,reset-delay-ms 是在屏幕初始化過程中,第一次

操作 reset 引腳之前的延時。init-delay-ms,是在屏幕初始化過程中,第一次操作 reset 引腳

之后的延時。

reset-delay-ms = <60>;

enable-delay-ms = <60>;//<35>; //<60>;

prepare-delay-ms = <60>;//<6>; //<60>;

unprepare-delay-ms = <60>;//<0>; //<60>;

disable-delay-ms = <60>;//<20>; //<60>;

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>;是配置當前 mipi 是幾通道的,需根據屏幕實際情況配置。

dsi,lanes = <4>;

// panel-init-sequence 填寫剛剛改寫好的初始化序列

 

panel-init-sequence = [

39 00 03 E0 AB BA

39 00 03 E1 BA AB

.................

05 C8 01 11

05 14 01 29

];

//panel-exit-sequence 填寫 display off 序列,一般為兩條,也需要廠家提供。

panel-exit-sequence = [

05 05 01 28

05 78 01 10

];

//這一部分也很重要,是屏幕的一些參數。hactive vactive 就是水平數值的像素,也就是

hback-porch,hfront-porch,vback-porch,vfront-porch

HBP,HFP,VBP,VFP,這個跟廠家討要后,根據簡寫字母對應即可。這個在之前的章節中已經講解

過了。

disp_timings0: display-timings {

native-mode = <&dsi1_timing0>;

dsi1_timing0: timing0 {

//clock-frequency 像素時鍾頻率

//像素時鍾頻率 = (

hactive+hbp+hfp+hsync-len)x (vactive+vbp+vfp+vsync-len)xfps

// 然后保留兩位有效數字(不要四舍五入),后面數據直接填 0 即可。

clock-frequency = <72000000>;

//以下的這些參數在數據手冊中,我們已經查找到了。

hactive = <800>;

vactive = <1280>;

hfront-porch = <48>; //20

hsync-len = <20>;

hback-porch = <48>; //20

vfront-porch = <16>; //10

vsync-len = <6>; //10

vback-porch = <15>; //4

hsync-active = <0>;

vsync-active = <0>;

de-active = <0>;

pixelclk-active = <0>;

};

};

//配置 ports

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>;

};

};

};

};

我們使用 dsi1 綁定到 vp1 上,所以 dsi1_in_vp0 節點為 disabled,dsi1_in_vp1 節點為 okay

dsi1 使能的時候,video_phy1 要使能,video_phy0 要關閉。設備樹 topeet_rk3568_lcds.dtsi

中添加如下圖所示:

 

 

 

 

 

 

 

 

 

 

2.2 Backlight

背光常用的有三種情況:

一是 常開。

二是 背光 IC 使能后,輸入 PWM 信號調光。

三是 背光 IC 使能后,通過 FB 獲得反饋自動進行調光。

設備樹里面配置背光。首先根據原理圖,我們知道使用的是 pwm5,

kernel/arch/arm64/boot/dts/rockchip/rk3568-evb.dtsi 文件里面 backlight1 節點如下所示:

backlight1: backlight1 {

compatible = "pwm-backlight";

pwms = <&pwm5 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

.................................................

>;

default-brightness-level = <200>;

};

kernel/arch/arm64/boot/dts/rockchip/topeet_rk3568_lcds.dtsi 設備樹中添加背光節點

&backlight {

status = "okay";

pwm = <&pwm5 0 25000 0>;

};

pwms = <&pwm5 0 25000 0>; 配置 pwm,使用 pwm5,25000 是周期,pwm 為正極性。

brightness-levels 屬性:配置背光亮度數組,一般以值 255 為一個 scale,當 pwm 設置為正

極時,從 0~255 表示背光為正極,占空比從 0%~100%變化,,255~0 為負極性,占空比從

100%~0%變化,當 pwm 設置為負極性時,反之。

default-brightness-level 屬性,時開機時默認背光亮度,范圍是 0~255

2.3 logo 顯示

設備樹 kernel/scripts/dtc/include-prefixes/arm64/rockchip/rk3568.dtsi 中節點如下:

 

 

 

 

 

所以我們要使用 route_dsi1 顯示通路,綁定到 vp1 上,修改

kernel/scripts/dtc/include-prefixes/arm64/rockchip/topeet_rk3568_lcds.dtsi 文件,添加如下所

示:

 

 

 

 

 

3 Config 配置

RK3568 SDK kernel/arch/arm64/configs/*_defconfig 已經把 LCD 相關的配置設置好了,

如果自己做了修改,修改 kernel/arch/arm64/configs/rockchip_defconfig 配置文件,增加如下

所示:

CONFIG_DRM_ROCKCHIP=y

CONFIG_ROCKCHIP_DW_MIPI_DSI=y

CONFIG_DRM_PANEL_SIMPLE=y

 

 

4燒寫驗證

4.1測試顯示

重新編譯 android 源碼,燒寫鏡像,發現 mipi 屏幕顯示正常。如下圖所示:

 

 

 

 

 

4.2 背光亮度調節測試

目前還沒有配置屏幕觸摸,我們可以在開發板上插上鼠標,進入”設置”APP,依次點擊

“顯示”,“亮度”,拖動滑條可以調節亮度。

也可以使用命令行來設置屏幕亮度,數值可以在 0~250 中設置,數字越大,亮度越高。

echo 100 > /sys/class/backlight/backlight/brightness

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM