[嵌入式linux] rk3568 android11點屏流程
rk3568
晶片非常強大,可以支援的螢幕介面有很多,顯示介面支援可是非常豐富的,
sunychip-rk3568
開發板支援
MIPI
介面的螢幕,介面如下圖所示:
1
螢幕點亮流程
點亮螢幕基本的流程是一致的,一般是背光使能---->背光點亮---->螢幕使能---->reset 引
腳按照指定的時序/波形拉高或者拉低---->初始化序列命令傳送。
流程主要是以下幾步
需要向螢幕廠商要一些螢幕關鍵引數和資料
進行關鍵引腳對應
進行裝置樹配置
進行驅動配置
原始碼編譯,燒寫映象測試
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
{
reg = <0>;
#address-cells = <1>;
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
{
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
{
reg = <1>;
remote-endpoint = <&vp1_out_dsi1>;
status = "disabled";
};
};
};
};
#size-cells = <0>;
dsi1_in_vp0: endpoint@0 {
reg = <0>;
remote-endpoint = <&vp0_out_dsi1>;
status = "disabled";
};
dsi1_in_vp1: endpoint
{
reg = <1>;
remote-endpoint = <&vp1_out_dsi1>;
status = "disabled";
};
};
};
};
預設的原始碼中是配置了 dsi1 節點的,是適配的瑞芯微的螢幕。現在我們要適配迅為的
MIPI 7 寸屏,所以我們在修改之前,要刪掉瑞芯微之前適配的螢幕節點。在下圖的裝置樹中
找到&dsi1 以及和 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,
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 **
顯示
裝置樹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
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69948385/viewspace-2900028/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Android11修改攝像頭前後置方法,觸覺智慧RK3568開發板演示Android
- 嵌入式軟體開發的特點、設計流程、嵌入式軟體的結構
- [嵌入式linux] RK3399/RK3568 PCIE介面的M2固態硬碟調式Linux硬碟
- 將 Vue 渲染到嵌入式液晶屏Vue
- RK3568開發平臺Android 11強制所有應用橫屏展示Android
- Linux嵌入式系統開發,嵌入式Linux開發教程Linux
- RK3399主機板點LVDS屏的原理和具體流程
- 正點原子AtomPi-CA1 RK3568的Linux CH340串列埠驅動安裝Linux串列埠
- 嵌入式Linux技術(轉)Linux
- 藍橋杯嵌入式之點燈
- 嵌入式系統開發的基本流程是什麼
- 嵌入式Linux的除錯方案Linux除錯
- 嵌入式Linux—FreeType向量字型Linux
- 嵌入式linux閘道器程式Linux
- 嵌入式Linux系統構建Linux
- linux啟動流程Linux
- RAC 雙節點 轉單節點流程
- HDFS讀寫流程(重點)
- CAS 單點登入流程
- 嵌入式Linux—輸入子系統Linux
- 嵌入式Linux的除錯技術Linux除錯
- LEDE - Linux嵌入式開發環境Linux開發環境
- 搭建嵌入式Linux開發環境Linux開發環境
- linux嵌入式 札記(持續更新)Linux
- Camera | 5.Linux v4l2架構(基於rk3568)Linux架構
- IPS硬屏和軟屏哪個好?IPS硬屏和軟屏的區別和優點介紹
- 嵌入式軟體除錯常用知識點除錯
- 嵌入式作業系統—重點知識作業系統
- 嵌入式作業3.1 GPIO點亮小燈
- Linux部署專案流程Linux
- Linux效能分析流程圖Linux流程圖
- Linux開機的流程Linux
- Linux 的啟動流程Linux
- Linux安裝JDK流程LinuxJDK
- Linux 核心啟動流程Linux
- 設定Kali Linux永不鎖屏Linux
- Linux下DIY DLAN投屏方案Linux
- Linux下FrameBuffer直接寫屏(轉)Linux