示例-LVDS 屏幕适配指导文档
简介
LVDS(Low-Voltage Differential Signaling)是一种常用的显示屏接口,适用于高分辨率和高刷新率的显示需求。在嵌入式系统中,适配 LVDS 屏幕的核心是通过设备树配置 LVDS 接口和屏幕参数,并确保驱动支持和系统正确初始化屏幕显示。
本文将从概括性流程开始,逐步展开详细的适配步骤,帮助新手理解和完成 LVDS 屏幕的适配。
概括性适配流程
- 收集屏幕参数:获取 LVDS 屏幕的分辨率、时序参数(如像素时钟频率、同步信号极性)、数据格式(如 JEIDA/ VESA)及背光控制方式。
- 修改设备树(DTS):配置 LVDS 接口节点,添加屏幕的显示参数和背光控制节点。
- 驱动适配:确认内核对 LVDS 屏幕的支持,必要时增加或修改屏幕驱动。
- 编译与烧录:编译内核和设备树,生成镜像文件并烧录至开发板。
- 调试与验证:通过串口或系统日志检查 LVDS 屏幕初始化是否成功,并调整参数解决问题。
完整适配流程
1. 收集屏幕参数
在适配 LVDS 屏幕之前,需掌握以下关键信息:
- 分辨率:屏幕的宽度和高度(如
1920x1080)。 - 时序参数:
- 像素时钟频率(Pixel Clock):单位 MHz,如
74.25MHz。 - 同步信号极性:HSYNC 和 VSYNC 的极性(正/负)。
- 前沿、后沿、同步脉冲宽度:水平和垂直方向的时序信息。
- 总像素数:包括显示区、同步区和空白区的像素。
- 像素时钟频率(Pixel Clock):单位 MHz,如
- 数据格式:
- LVDS 数据传输协议(如 JEIDA-24 或 VESA-24)。
- 单通道或双通道(Single/Dual Channel)。
- 背光控制:
- 背光的控制方式(PWM 或 GPIO)。
- 最大亮度值和默认亮度值。
屏幕规格书(Datasheet)通常包含这些参数,若无规格书,可向屏幕供应商索取。
2. 修改设备树(DTS)
设备树是硬件描述的核心,用于定义 LVDS 接口的配置和屏幕的显示参数。
2.1 定位设备树文件
- 设备树文件位于
kernel/arch/arm64/boot/dts/rockchip/。 - 文件名通常与开发板名称相关(如
rk3568-evb.dts)。 - 修改主 DTS 文件或其包含的 DTSI 文件。
2.2 配置 LVDS 接口
在设备树中,找到显示子系统的节点(如 display-subsystem 或 lvds),启用 LVDS 并配置屏幕的参数。例如:
&lvds {
status = "okay"; // 启用 LVDS
panel {
compatible = "lvds-panel"; // 屏幕驱动绑定名称
reg = <0>;
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
lvds_out: endpoint {
remote-endpoint = <&lvds_in>;
};
};
};
};
};
2.3 添加屏幕显示时序
根据屏幕参数,配置显示时序(Display Timings)。以下是一个示例配置:
panel {
compatible = "lvds-panel"; // 绑定屏幕驱动
backlight = <&backlight>; // 背光节点
power-supply = <&vcc_lcd>; // 屏幕电源节点
data-mapping = "jeida-24"; // 数据格式,可能为 "jeida-24" 或 "vesa-24"
width-mm = <344>; // 屏幕宽度(毫米)
height-mm = <193>; // 屏幕高度(毫米)
display-timings {
native-mode = <&timing0>;
timing0: timing0 {
clock-frequency = <74250000>; // 像素时钟频率(Hz)
hactive = <1920>;
vactive = <1080>;
hfront-porch = <88>;
hback-porch = <148>;
hsync-len = <44>;
vfront-porch = <4>;
vback-porch = <36>;
vsync-len = <5>;
hsync-active = <0>; // HSYNC 极性
vsync-active = <0>; // VSYNC 极性
pixelclk-active = <0>;
};
};
};
2.4 添加背光控制
如果屏幕需要背光控制,在设备树中添加背光节点。例如:
backlight: backlight {
compatible = "pwm-backlight"; // 使用 PWM 控制背光
pwms = <&pwm0 0 50000 0>; // PWM 参数
brightness-levels = <0 50 100 150 200 255>; // 亮度等级
default-brightness-level = <200>; // 默认亮度
};
3. 驱动适配
3.1 检查驱动支持
- Rockchip 平台通常已支持 LVDS 屏幕,驱动位于
kernel/drivers/gpu/drm/rockchip/。 - 确认内核是否已支持所需的屏幕型号和 LVDS 接口参数。
3.2 增加自定义驱动
如果屏幕需要特定的初始化过程,可以在 kernel/drivers/gpu/drm/panel/ 中新增驱动文件。例如:
static const struct drm_display_mode lvds_screen_mode = {
.clock = 74250,
.hdisplay = 1920,
.hsync_start = 1920 + 88,
.hsync_end = 1920 + 88 + 44,
.htotal = 1920 + 88 + 44 + 148,
.vdisplay = 1080,
.vsync_start = 1080 + 4,
.vsync_end = 1080 + 4 + 5,
.vtotal = 1080 + 4 + 5 + 36,
.flags = DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC,
};
确保在驱动 Makefile 中添加新驱动文件。
4. 编译与烧录
4.1 编译内核
根据修改的设备树和驱动,重新编译内核:
make ARCH=arm64 rockchip_defconfig
make ARCH=arm64 -j$(nproc)
4.2 生成镜像
使用 Rockchip 提供的 mkimage.sh 脚本生成固件镜像:
./mkimage.sh
4.3 烧录至开发板
使用 Rockchip 的烧录工具(如 RKDevTool)将固件烧录到设备。
5. 调试与验证
5.1 查看启动日志
通过串口或 adb shell 查看启动日志:
dmesg | grep drm
检查是否有显示子系统或 LVDS 初始化失败的报错。
5.2 测试显示效果
确认屏幕是否点亮,显示是否正常。如果屏幕无显示或出现异常(如花屏、闪屏),可进一步检查:
- 时间参数是否与屏幕规格一致。
- 数据格式(JEIDA/VESA)是否正确。
5.3 调试背光
若背光不工作,检查 PWM 或 GPIO 配置是否正确。
常见问题与解决
- 屏幕无显示:
- 确保 LVDS 节点在设备树中已启用。
- 检查时序参数是否正确。
- 确认屏幕的供电和连接无误。
- 花屏或闪屏:
- 调整时序参数(如像素时钟频率)。
- 确认 LVDS 数据格式(JEIDA-24 或 VESA-24)。
- 背光未点亮:
- 检查背光节点配置是否正确。
- 确保 PWM 控制信号有效。
留下评论