外观
LCD 驱动开发
2025-09-19
本章指导开发者在 Ruiching 平台上完成 LCD 屏幕的调试与适配工作。 通过提供详细的配置步骤、参数说明和调试方法,帮助开发者快速解决 LCD 屏幕显示相关问题,并确保屏幕在 Ruiching 平台上正常运行。本文以 Ruiching 7 寸屏(分辨率 1024×600,刷新率 60Hz)为例进行讲解。
在适配 LCD 屏幕时,需配置以下设备树(DTS)节点:
dsi_timing0:屏幕时序参数dsi_panel:面板初始化参数backlight:背光控制display_subsystem:显示子系统
配置屏幕时序参数
在设备树(DTS)中配置 LCD 屏幕的时序参数是确保屏幕正常显示的关键一步。这些参数需要从屏幕的规格书中获取,以下基于屏幕规格书参数(1024×600 分辨率,60fps)详细解释 DTS 中每个时序参数的来源。
设备树配置示例
&dsi_timing0 {
clock-frequency = <51200000>; // 时钟频率(单位:Hz)
hactive = <1024>; // 水平有效像素数(屏幕宽度)
vactive = <600>; // 垂直有效像素数(屏幕高度)
hback-porch = <90>; // 水平后沿像素数
hfront-porch = <160>; // 水平前沿像素数
vback-porch = <23>; // 垂直后沿像素数
vfront-porch = <12>; // 垂直前沿像素数
hsync-len = <70>; // 水平同步信号宽度
vsync-len = <10>; // 垂直同步信号宽度
};参数详解
| 参数名 | 说明 | 备注 |
|---|---|---|
| clock-frequency | 发送数据的时钟频率(单位:Hz) | 取决于显示屏支持的频率(详见 1.4 节计算说明) |
| hactive | 水平方向的有效像素数即屏幕宽度 | 硬件规格书中提供的像素宽度(Horizontal display area) |
| vactive | 垂直方向的有效像素数即屏幕高度 | 硬件规格书中提供的像素高度(Vertical display area) |
| hback-porch | 水平显示区域之后到同步信号之前的空白区(像素个数) | 硬件规格书中提供或通过计算得到 |
| hfront-porch | 水平方向同步信号之后到显示区域开始之前的空白区(像素个数) | 在规格书范围内选择(通常取中间值) |
| hsync-len | 水平同步信号的宽度(像素个数) | 硬件规格书中提供(HSYNC Width) |
| vsync-len | 垂直同步信号的宽度(行数) | 硬件规格书中提供(VSYNC Width) |
| vback-porch | 垂直方向显示区域之后到同步信号之前的空白区(行数) | 在规格书允许范围内选取合适值 |
参数来源与计算
在屏幕规格书中,您会找到类似下图的时序参数表(HV Timing Mode):
查阅显示屏的技术手册,确认像素分辨率(hactive vactive)及推荐的时序参数。配置 LCD 屏幕时序需要配置以下字段:
- 像素分辨率(
hactive,vactive):物理显示区域尺寸 - 同步信号参数(
hsync-len,vsync-len):同步脉冲宽度 - 空白区域参数(
hback-porch,hfront-porch,vback-porch,vfront-porch):有效像素区与同步信号间的缓冲区域 - 时钟频率(
clock-frequency):像素时钟驱动频率
基础参数来源
基础参数直接从规格书中获取:
| 参数 | 值 | 来源说明 |
|---|---|---|
hactive | 1024 | 屏幕物理水平像素数(规格书中的 Horizontal Display Area) |
vactive | 600 | 屏幕物理垂直像素数(规格书中的 Vertical Display Area) |
vback-porch | 23 | 直接采用规格书固定值(规格书明确给出 vback_porch=23) |
除了以上的基础参数是确定的,部分参数需要计算出来,部分参数给出的是范围取值,所以要确定水平时序和垂直时序。
水平时序相关的计算
这里是要确定出:htotal,hsync-len,hfront_porch,hback_porch
此处 htotal 对应图上 1 horizontal line
公式:
htotal = hactive + hfront-porch + hsync-len + hback-porch规格书允许范围:
htotal∈ [1200, 1400]hfront-porch∈ [16, 216]hsync-len∈ [1, 140]
目标值选择:选择
htotal=1344(在范围内且便于时钟计算)反推
hback-porch:hback-porch = htotal - hactive - hfront-porch - hsync-len = 1344 - 1024 - 160 - 70 = 90参数选择逻辑
| 参数 | 值 | 选择逻辑 |
|---|---|---|
hfront-porch | 160 | 在 [16,216] 范围内选取中间值 |
hsync-len | 70 | 在 [1,140] 范围内选取中间值 |
hback-porch | 90 | 通过公式反推 |
垂直时序计算步骤(vtotal)
这里是要确定出:vtotal,vsync-len,vfront-porch,vback_porch
vtotal对应 VSYNC period time
公式:
vtotal = vactive + vfront-porch + vsync-len + vback-porch规格书允许范围:
vtotal∈ [624, 750]vfront-porch∈ [1, 127]vsync-len∈ [1, 20]
计算
vtotal:vtotal = 600 + 12 + 10 + 23 = 645 # 在 [624,750] 范围内参数选择逻辑:
| 参数 | 值 | 选择逻辑 |
|---|---|---|
vfront-porch | 12 | 在 [1,127] 范围内选取最小值以减少垂直空白 |
vsync-len | 10 | 在 [1,20] 范围内选取中间值 |
时钟频率计算与配置
dclk = htotal × vtotal × fps
= 1344 × 645 × 60
= 52,012,800Hz(≈52 MHz)在设备树中,建议将时钟频率配置为 52,012,800 Hz,这是对应的理论值。 然而,实际硬件限制下,配置的时钟频率能达到大约 53,571,428 Hz。 为了更好地适配 RuiChing 平台的时钟要求,并与实际硬件频率尽可能接近,建议将时钟频率设置为 51.2 MHz(实际频率约为 51,724,137 Hz)。 这不仅符合实际限制,也能确保整体显示性能的稳定性。
因此,设备树中的配置应为clock-frequency = <51200000>;
配置 DSI 面板参数
指导用户在设备树中正确配置 &dsi_panel 节点,包括时序参数、初始化序列等关键参数,确保 LCD 正常启动。
配置基础参数
在设备树文件中添加 dsi_panel 节点,并配置以下基础参数:
&dsi_panel {
status = "okay"; // 启用面板
prepare-delay-ms = <20>; // 电源/复位准备延时
reset-delay-ms = <80>; // 复位信号有效后的延时
init-delay-ms = <240>; // 初始化序列前的延时
panel-init-sequence = [ // 初始化序列(详见2.2节)
// 初始化命令将在这里填写
...
];
};- 关键参数说明:
prepare-delay-ms:硬件复位前等待时间(单位:毫秒),通常由 LCD 规格书定义。reset-delay-ms:复位信号拉高后到初始化开始的延时,确保 LCD 稳定。init-delay-ms:发送初始化序列前的额外延时,避免电源波动。
以上参数,可以找到屏幕的规格书的 Power On/Off Sequence,按照给出的资料,对应填入。
注意
此处如果不会填,可以先试试就参照默认给出的值调试或者寻求屏幕厂家的配置。
配置初始化序列(panel-init-sequence)
初始化序列是 LCD 启动时发送的一组命令,用于配置屏幕的寄存器。这些命令必须严格按照屏幕规格书编写。
序列格式: 每条命令由以下部分组成(以空格分隔):
<数据类型> <延时> <指令长度> <寄存器> <值> [更多值...]示例命令:
panel-init-sequence = [
// 格式: <数据类型 延时 寄存器 值>
15 00 02 b2 10
15 00 02 80 ac
...
];参数解析:
- 第一字节:数据类型,以下简单例举常用的命令
0x15:DTYPE_DCS_WRITE(DCS 命令)0x05:DTYPE_GEN_WRITE(通用命令)0x39:DTYPE_GEN_LWRITE(长通用命令)
- 第二字节:延时(可选)
00表示无延时(单位:毫秒),若需延时填写十六进制数(如10表示 16ms)。 - 后续字节:指令内容,例如:
0x02:后跟 2 个数据字节(寄存器 + 值)0xb2 0x10:向寄存器0xB2写入值0x10
示例解释:
15 00 02 b2 10= 发送 DCS 命令向寄存器0xB2写入,参数为0x10,无延时。
背光调试与适配
背光控制是 LCD 调试的重要环节。本节指导您通过硬件检查和设备树配置,确保背光正常工作。
检查硬件
通过查看硬件原理图,确认背光控制的 GPIO 或者 PWM 信号线。配置设备树中的 backlight 节点,使驱动在启动时正确控制背光。
打开硬件原理图,确认背光信号线。
连接好屏幕后,可以尝试使用 GPIO 命令来让背光亮灭。
例如此处是 PWM0_4ch_2,对应的 GPIO 引脚号是 18,输入以下指令查看屏幕是否有变化:
gpio mode -p 18 -m output
gpio write -p 18 -v 1
gpio write -p 18 -v 0现象:肉眼观察屏幕背光是否随命令亮灭。若正常,说明硬件连接正确。
设备树配置流程
配置背光子节点(backlight)
在设备树中配置背光节点(以 PWM 背光为例):
&backlight {
pwms = <&pwm0_4ch_2 0 25000 0>;
};参数详解
compatible关键字确保系统识别该设备为 PWM 背光控制。pwms指定 PWM 控制器和参数:&pwm0_4ch_2:引用 PWM 控制器节点0:PWM 通道编号25000:PWM 周期微秒,调整此值以控制亮度/调光速度0:PWM 极性- 极性为 0(active low 或 inverted) 占空比为 100% 时,输出几乎是低电平。
- 极性为 1(active high) 占空比为 100% 对应高电平,信号几乎是高电平。
启用 PWM 控制器
&pwm0_4ch_2 {
status = "okay";
};开启显示子系统
启用显示子系统:
&display_subsystem {
status = "okay";
};验证屏幕
编译并烧写设备树。
下载 Ruiching 平台提供的示例程序(如
05_gui_lvgl_mipi_ruiching_7in_1024_600),观察屏幕是否正常显示。若仍不亮,请检查:
- 设备树背光配置是否正确。
- 硬件连接是否有误。
- 屏幕供电是否正常。
