linux drm mipi dsi lcd 点屏之设备树配置

news2024/11/13 9:34:46

linux drm mipi dsi lcd 点屏之设备树配置

设备树文档:
https://elixir.bootlin.com/linux/v6.8-rc5/source/Documentation/devicetree/bindings/display/dsi-controller.yaml
https://elixir.bootlin.com/linux/v6.8-rc5/source/Documentation/devicetree/bindings/display/panel/display-timings.yaml
https://elixir.bootlin.com/linux/v6.8-rc5/source/Documentation/devicetree/bindings/display/panel/panel-timing.yaml

https://blog.csdn.net/lonely_fireworks/article/details/129362860
Android画面显示流程分析(1)–LCD时序

https://cloud.tencent.com/developer/article/1867373
Linux MIPI DSI LCD设备驱动开发调试细节学习笔记(一)

https://blog.csdn.net/qq_37858386/article/details/123705548
2022-03-24 RK3566 MIPI屏 调试记录,panel-init-sequence 命令格式介绍

驱动点屏:
1)屏幕pin引脚定义
2)panel-init-sequence初始化code
3)屏幕上电时序
4)display timing

显示接口有:HDMI,eDP/DP,MIPI DSI,RGB、BT1120/656,LVDS等等
在android 设备上用的比较多的是MIPI DSI。

不同的显示接口点屏,需要参考相应设备树文档进行配置。
下面以mipi dsi接口连接lcd点屏进行举例。

panel-timing.yaml内容:

在这里插入图片描述

hback-porch (HBP):行信号左边沿无效信号时间范围
hfront-porch (HFP): 行信号右边沿无效信号时间范围
hsync-len (HPW): 行信号电子枪回扫时间 即 水平同步时间 Hsyc
vback-porch(VBP) :帧信号上边沿无效信号时间范围
vfront-porch(VFP):帧信号下边沿无效信号时间范围
vsync-len(VPW):帧信号电子枪回扫时间 即垂直同步时间 Vsync
hactive(HVD):有效像素信号纵向分辨率
vactive(VVD):有效像素信号横向分辨率

如下LCD时序图参考文档:https://blog.csdn.net/lonely_fireworks/article/details/129362860 LCD时序
在这里插入图片描述

1,计算clock-frequency方法:
htotal: (一行数据)hsync水平同步信号需要的总的像素时钟周期个数
vtotal: (一列数据)vsync垂直同步s信号需要的总的像素时钟周期个数
hsync-len: hsync水平同步信号的低电平(非有效电平)持续的时间,即需要的像素时钟周期个数

clock-frequency: panel clock in Hz

htotal = (hback-porch + hactive + hfront-porch + hsync-len)
vtotal = (vback-porch + vactive + vfront-porch + vsync-len)

clock-frequency = htotal * vtotal * 刷新率

2,计算rockchip,lane-rate方法:
rockchip,lane-rate = htotal * vtotal * 刷新率 * 3(RGB) * 8(bit位) / dsi,lanes(lane数)/ 0.9
或者:
rockchip,lane-rate = htotal * vtotal * 刷新率 * 3(RGB) * 8(bit位) * 10 / dsi,lanes(lane数)/ 9

3(RGB):是每一个 pixel 有 RGB 3 个分量;
0.9:是考虑 mipi 时序的传输效率;

例子:
clock-frequency = <57153600>; // 计算:默认andoid手机屏幕fps = 60, (5 + 5 + 720 + 5) * (2 + 1 + 1280 + 13) * 60 = (735 * 1296) * 60 = 57153600

例子:
clock-frequency = <57153600>;  // 计算:默认andoid手机屏幕fps = 60,  (5 + 5 + 720 + 5) * (2 + 1 + 1280 + 13) * 60 = (735 * 1296) * 60 = 57153600
examples:
  - |
    dsi {
        #address-cells = <1>;
        #size-cells = <0>;

        panel@0 {
            compatible = "samsung,s6e8aa0";
            reg = <0>;
            vdd3-supply = <&vcclcd_reg>;
            vci-supply = <&vlcd_reg>;
            reset-gpios = <&gpy4 5 0>;
            power-on-delay= <50>;
            reset-delay = <100>;
            init-delay = <100>;
            panel-width-mm = <58>;
            panel-height-mm = <103>;
            flip-horizontal;
            flip-vertical;

            display-timings {
                timing0: timing-0 {
                    clock-frequency = <57153600>;  // 默认andoid手机屏幕fps = 60,  (5 + 5 + 720 + 5) * (2 + 1 + 1280 + 13) * 60 = (735 * 1296) * 60 = 57153600
                    hactive = <720>;
                    vactive = <1280>;
                    hfront-porch = <5>;
                    hback-porch = <5>;
                    hsync-len = <5>;
                    vfront-porch = <13>;
                    vback-porch = <1>;
                    vsync-len = <2>;
                };
            };
        };
    };

如下内容参考文档:https://blog.csdn.net/LinuxArmbiggod/article/details/83277035 LCD点屏杂记
关于像素时钟和lane传输速率的计算
像素时钟:clock-frequency 即DCLK(dot clock), PCLK(pixel clock).
clock-frequency = (h_active + hfp + hbp + h_sync) * (v_active + vfp + vbp + v_sync) * fps
clock-frequency = 水平信号总周期垂直信号总周期帧率
fps为帧率,一般为60,表示每秒刷新60帧图像

lane传输速率:表示一条数据 lane 的传输速率,单位为 Mbits/s
lane_clk = 100 + H_total×V_total × fps × 3 × 8 / lanes_nums
total 这里指的是 水平 垂直信号总周期
fps 为帧率 取60
3 × 8 代表一个 RGB 为 3 个字节,每个字节 8 bit
lanes 代表 data 通道数

如:
rockchip,lane-rate = 100 + H_total×V_total × fps × 3 × 8 / lanes_nums / 0.9
0.9:是考虑mipi时序的传输效率

如下内容参考文档:http://www.nnewn.com/page226?article_id=281 Rockchip_Developer_Guide_DRM_Display_Driver_CN.pdf
带宽的计算方法
1)图像的带宽
以1080P ARGB格式的图像数据为例:
ARGB格式一个像素占用的内存大小:4 Byte
1080P ARGB格式的数据占用内存:1920 x 1080 x 4Byte/pixel = 8,100 Kbyte
如果按 60fps 刷新,占用的带宽是: 8,100 x 60fps = 474.6 Mbyte/s

2)显示接口的带宽
Bandwidth
MIPI DSI 驱动中会自动按如下公式根据不同的工作模式进行带宽的计算,当然在调试过程中也许对计算
的结果想做些微调可以通过 DTS dsi 节点下 rockchip,lane-rate 属性进行指定,单位可以是
Kbps/Mbps(D-PHY) 或 Ksps/Msps (C-PHY)

display-timings {
    native-mode = <&dsi0_timing0>;
    dsi0_timing0: timing0 {
        clock-frequency = <132000000>;

        hactive = <1920>;
        vactive = <1080>;
		hback-porch = <30>;
		hfront-porch = <15>;
        hsync-len = <2>;
        vback-porch = <15>;
        vfront-porch = <15>;
        vsync-len = <2>;

		hsync-active = <0>;
		vsync-active = <0>;
		de-active = <0>;
		pixelclk-active = <0>;
    };

hsync-active 行同步信号有效电平,0表示低电平有效,1表示高电平有效
vsync-active 帧同步信号有效电平,0表示低电平有效,1表示高电平有效

pixelclk-active:数据采样的方式
配置为1:上升沿驱动像素数据/下降沿采样数据
配置为0:下降沿驱动像素数据/上升沿采样数据

如panel-timing.yaml说明:
hsync-active:
description: |
Horizontal sync pulse.
0 selects active low, 1 selects active high.
If omitted then it is not used by the hardware

de-active:
description: |
Data enable.
0 selects active low, 1 selects active high.
If omitted then it is not used by the hardware

以上面设备树配置的时序为例,当前这个时序下,按 60 帧刷新需要的 dclk 是:131994240 hz,dts 实际按取整 132000000 hz 配
置:
htotal = hfp + hsync + hbp + hactive = 15 + 2 + 30 + 1080 = 1,127
vtotal = vfp + vsync + vbp + vactive = 15 + 2 + 15 + 1920 = 1,952
dclk = htotal x vtotal x fps = 1127 x 1952 x 60fps = 131,994,240

MIPI 接口上传输的频率是:
rockchip,lane-rate = 132M x 3(RGB) x 8(bpc) / 4(lane) / 0.9 = 880 Mbps

其中:
x3(RGB):是每一个 pixel 有 RGB 3 个分量;
x8(bpc):是每一个分量的位深是 8bit;
/4(lane):是这么多数据量在 4 lane 上传输,/4 是计算每 lane 的数据量;
/0.9:是考虑 mipi 时序的传输效率;

在这里插入图片描述

在这里插入图片描述

如下内容参考文档:https://blog.csdn.net/qq_37858386/article/details/123705548
2022-03-24 RK3566 MIPI屏 调试记录,panel-init-sequence 命令格式介绍

dts配置:

&dsi1 {
	status = "okay";
	rockchip,lane-rate = <xxxx>;
	panel@0 {
		compatible = "simple-panel-dsi";
		reg = <0>;
 
		backlight = <&backlight>;
		//power-supply=<&vcc_3v3>;
		enable-gpios = <&gpio0 RK_PC7 GPIO_ACTIVE_HIGH>;
		reset-gpios = <&gpio0 RK_PC5 GPIO_ACTIVE_LOW>;
 
		pinctrl-names = "default";
		pinctrl-0 = <&lcd_enable_gpio>, <&lcd_rst_gpio>;
 
		prepare-delay-ms = <120>;
		reset-delay-ms = <120>;
		init-delay-ms = <120>;
		stbyb-delay-ms = <120>;
		enable-delay-ms = <120>;
		disable-delay-ms = <120>;
		unprepare-delay-ms = <120>;
 
		width-mm = <229>;
		height-mm = <143>;
 
		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 = <8>;
        panel-init-sequence = [
            39 00 06 FF 77 01 00 00 10
            39 00 03 C0 E9 03
            39 00 03 C1 08 02
            39 00 03 C2 31 08
			15 00 02 CC 10
            39 00 11 B0 00 0B 10 0D 11 06 01 08 08 1D 04 10 10 27 30 19
            39 00 11 B1 00 0B 14 0C 11 05 03 08 08 20 04 13 10 28 30 19
            39 00 06 FF 77 01 00 00 11
			15 00 02 B0 35
			15 00 02 B1 38
			15 00 02 B2 02
			15 00 02 B3 80
			15 00 02 B5 4E
			15 00 02 B7 85
			15 00 02 B8 20
			15 00 02 B9 10
			15 00 02 C1 78
			15 00 02 C2 78
			15 64 02 D0 88
            39 00 04 E0 00 00 02
            39 00 0C E1 05 00 00 00 04 00 00 00 00 20 20
            39 00 0E E2 00 00 00 00 00 00 00 00 00 00 00 00 00
            39 00 05 E3 00 00 33 00
            39 00 03 E4 22 00
            39 00 11 E5 07 34 A0 A0 05 34 A0 A0 00 00 00 00 00 00 00 00
            39 00 05 E6 00 00 33 00
            39 00 03 E7 22 00
            39 00 11 E8 06 34 A0 A0 04 34 A0 A0 00 00 00 00 00 00 00 00
            39 00 08 EB 02 00 10 10 00 00 00
            39 00 03 EC 02 00
            39 00 11 ED AA 54 0B BF FF FF FF FF FF FF FF FF FB B0 45 AA
            39 00 06 FF 77 01 00 00 00
			15 00 02 36 00
			05 78 01 11
			05 14 01 29
		];
 
		panel-exit-sequence = [
			05 00 01 28
			05 00 01 10
		];
 
		display-timings {
			native-mode = <&timing0>;
 
			timing0: timing0 {
				clock-frequency = <27000000>;
				hactive = <480>;
				vactive = <854>;
				hfront-porch = <150>;
				hsync-len = <10>;
				hback-porch = <10>;
				vfront-porch = <14>;
				vsync-len = <4>;
				vback-porch = <6>;
				hsync-active = <1>;
				vsync-active = <1>;
				de-active = <0>;
				pixelclk-active = <1>;
			};
		};
 
 
		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>;
			};
		};
	};
 
};
 
&dsi1_in_vp0 {
	status = "disabled";
};
 
&dsi1_in_vp1 {
	status = "okay";
};

port配置参考文档:linux设备树:phandle和port

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1465435.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

卫星地面站监测系统仿真

当今世界&#xff0c;大国竞争日趋激烈&#xff0c;国际关系愈发紧张&#xff0c;信息与通信已经是当下高度信息化社会的“命脉”&#xff0c;信息只有经过有效且广泛地传播&#xff0c;才能成为一种有利用价值的资源&#xff0c;产生经济效益、推动社会发展。通信技术在发展的…

C语言运用中断子系统用驱动控制led实验,c语言串口led点灯实验(驱动+应用层)

中断子系统用驱动控制led实验 驱动代码 #include <linux/init.h> #include <linux/module.h>#include<linux/interrupt.h> #include<linux/gpio.h> #include<linux/timer.h>#include<linux/of.h> #include<linux/of_irq.h> #inclu…

QQ防红跳转短网址生成网站完整源码

使用此源码可以生成QQ自动跳转到浏览器的短链接&#xff0c;无视QQ报毒&#xff0c;任意网址均可生成。 全新界面&#xff0c;网站背景图采用Bing随机壁纸 支持生成多种短链接 兼容电脑和手机页面 生成网址记录功能&#xff0c;域名黑名单功能 网站后台可管理数据 安装说明&am…

《图解HTTP》笔记2:http的构成

1&#xff0c;查看浏览器上面一个具体的http请求 浏览器地址栏输入网址&#xff1a;https://news.baidu.com/ 使用浏览器的开发者工具&#xff0c;查看网络中发送和接受的数据。 可以看到输入一个网址&#xff0c;浏览器和服务器进行了很多的交互。&#xff08;绿色部分&#…

【深蓝学院】移动机器人运动规划--第6章 模型预测控制(MPC)与运动规划--笔记

0. Outline 1. Reactive Control&#xff08;反应式控制&#xff09; 控制学中的 “Reactive Control” 通常指的是一种控制策略&#xff0c;它依赖于系统对特定事件或变化的即时反应&#xff0c;而不是按照预定的计划或策略行动。这种控制往往是基于当前的传感器输入来做出决…

盘点自动化汽车生产线设备 数据采集分析联合各设备

1.机器人自动装配线 机器人自动装配线已成为汽车制造业中的常见场景。这些机器人在汽车组装的各个环节发挥关键作用&#xff0c;从焊接和铆接到零部件组装。它们不仅提高了装配速度&#xff0c;还确保了产品的一致性&#xff0c;降低了废品率。 2.3D打印技术 3D打印技术正在汽车…

电商API接口接入|电子商务市场最简单的数据采集方法,你学到了吗?

小刘从某职业院校电子商务专业毕业后&#xff0c;-直在某品牌电商部负责运营工作&#xff0c;近期&#xff0c;同班同学小王邀请小刘加入创业大军&#xff0c;共同开设网店&#xff0c;销售家乡的螃蟹、鲜虾、扇贝等生鲜水产。 运营经验丰富的小刘决定&#xff0c;在创业开始前…

Jenkins的使用GIT(4)

Jenkins的使用GIT 20211002 我们使用 Jenkins 集成外部 Git 仓库&#xff0c;实现对真实代码的拉取和构建。在这里&#xff0c;我们选用 Coding/Github/Gitee 等都可以作为我们的代码源 1 生成公钥私钥 首先&#xff0c;我们先来配置公钥和私钥。这是 Jenkins 访问 Git 私有库…

mysql 事务详解一

前言 提到事务&#xff0c;大家肯定不陌生。在我们现实生活中也是存在的&#xff0c;比如我们去超市购物&#xff0c;然后去支付。虽然是两个步骤&#xff0c;必须保证同时成功&#xff0c;这个交易才可以完成。 如果这个场景&#xff0c;拿到我们购物系统&#xff0c;就是几…

智能高压森林应急消防泵|保障森林安全|深圳恒峰

随着科技的不断发展&#xff0c;我们的生活质量得到了显著提升。在森林保护领域&#xff0c;一项创新技术正在发挥着关键作用——智能高压森林应急消防泵。这种设备不仅提高了灭火效率&#xff0c;更为森林资源的安全保驾护航。 在过去&#xff0c;面对森林火灾&#xff0c;消防…

AIDL的工作原理与使用示例 跨进程通信 远程方法调用RPC

AIDL的介绍与使用 AIDL&#xff08;Android Interface Definition Language&#xff09;是Android中用于定义客户端和服务端之间通信接口的一种接口定义语言。它允许你定义客户端和服务的通信协议&#xff0c;用于在不同的进程间或同一进程的不同组件间进行数据传递。AIDL通过…

LDR6020芯片驱动未来:TYPE-C桌面显示器的新篇章

TYPE-C接口桌面显示器&#xff0c;与传统显示器截然不同。它不仅在视频传输方面表现出色&#xff0c;还融入了创新的充电功能。利用显示器的DC电源&#xff0c;可以轻松转换成PD协议&#xff0c;为笔记本、任天堂等HOST设备提供稳定的充电服务。 兼容性&#xff1a;连接无忧 …

redis GEO 类型原理及命令详解

目录 前言 一、GeoHash 的编码方法 二、Redis 操作GEO类型 前言 我们有一个需求是用户搜索附近的店铺&#xff0c;就是所谓的位置信息服务&#xff08;Location-Based Service&#xff0c;LBS&#xff09;的应用。这样的相关服务我们每天都在接触&#xff0c;用滴滴打车&am…

文件夹无法压缩是怎么回事?分享3种简单的方法~

在日常使用电脑的过程中&#xff0c;我们经常需要对文件夹进行压缩&#xff0c;以节省存储空间或方便传输。然而&#xff0c;有时候我们可能会遇到文件夹无法压缩的情况&#xff0c;这可能会让人感到困惑。本文将探讨文件夹无法压缩的原因&#xff0c;并提供解决方法&#xff0…

谷粒商城-nginx搭建域名访问环境性能压测

nginx搭建域名访问环境 正向代理与反向代理 正向代理&#xff1a;客户端向代理服务器发请求并指定目标服务器&#xff0c;代理向目标服务器转交请求并将获得的内容返回给客户端。 反向代理&#xff1a;用户直接访问反向代理服务器就可以获得目标服务器的资源。反向代理服务器…

基于EasyCVR视频汇聚系统的公安网视频联网共享视频云平台建设思路分析(二)

一、需求分析 随着科技的飞速发展&#xff0c;视频监控联网技术在公安工作中发挥着越来越重要的作用。为了提高公安部门对各类事件的响应速度和处理能力&#xff0c;建设一个高效、稳定的公安视频联网共享云平台显得尤为重要。通过建设开放的视频联网共享云平台&#xff0c;实…

Android相机调用-libusbCamera【外接摄像头】【USB摄像头】 【多摄像头预览】

有的自定义系统&#xff0c;对于自己外接的USB摄像头&#xff0c;android原生的camera和camera2都无法打开&#xff0c;CameraX也用不了。这时候就要用libusbCamera&#xff0c;这个库可以打开摄像头&#xff0c;还可以多摄像头同时预览。本文主要是同时打开3个USB摄像头的项目…

C语言第二十九弹---浮点数在内存中的存储

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】 目录 1、浮点数在内存中的存储 1.1、练习 1.2、浮点数怎么转化为二进制 1.3、浮点数的存储 1.3.1、浮点数存的过程 1.3.2、浮点数取的过程 1.3、题目解析…

配置开机自启

进入任务计划程序 点击创建基本任务&#xff0c;按照向导一步一步进行下去

【数据结构】排序(1)

目录 一、概念&#xff1a; 二、直接插入排序&#xff1a; 三、希尔排序&#xff1a; 四、直接选择排序&#xff1a; 五、堆排序&#xff1a; 六、冒泡排序&#xff1a; 一、概念&#xff1a; 排序的概念&#xff1a; 使一串记录&#xff0c;按照其中的某个或某些关键字…