LVDS,LCD调试总结(持续更新)

本文详细介绍了LVDS接口的分类及数据格式,包括单双路6bit和8bit的不同配置,并探讨了VESA与JEIDA两种标准。此外,还提供了如何根据屏幕参数设置设备树的具体指导。

1.LVDS接口分类与数据格式

  1. 单路6it LVDS

这种接口电路中,采用单路方式传输,每个基色信号采用6位数据,共18位RGB数据,因此,也称18位或18bit LVDS接口。此,也称18位或18bit LVDS接口。

 

  1. 双路6bit LVDS

这种接口电路中,采用双路方式传输,每个基色信号采用6位数据,其中奇路数据为18位,偶路数据为18位,共36位RGB数据,因此,也称36位或36bit LVDS接口。

 

  1. 单路8bit LVDS

这种接口电路中,采用单路方式传输,每个基色信号采用8位数据,共24位RGB数据,因此,也称24位或24bit LVDS接口。

 

  1. 双路8bit LVDS

这种接口电路中,采用双路方式传输,每个基色信号采用8位数据,其中奇路数据为24位,偶路数据为24位,共48位RGB数据,因此,也称48位或48bit LVDS接口

 

      现在市场上基本是8bit和6bit的屏幕,

 

      LVDS接口电路中,将像素的并行数据转换为串行数据的格式主要有两种标准:VESA和JEIDA

      1)VSEA标准格式如下图所示:

      

      

      以上图片是单路的VESA标准信号,对一行数据输入则多2bit。

 

      关于双路的信号格式这个可以举个例子:

     

      以上图片是双路8bit 的VSEA标准信号。

      2)JEIDA标准是由日本电子行业开发协会(JAPANELECTRONIC INDUSTRY DEVELOPMENT ASSOCIATION)制定的标准,其格式如下:

    

可以对比参照查看,如果像素为6bit RGB,则每个通道只需要最上面的3对数据线,其中的R9…R4, G9…G4, B9…B4 对应实际的R5…R0, G5…G0, B5…B0;同样,如果像素是 8 bit RGB,则每个通道只需要靠上面的4对数据线,其中的R9…R2, G9…G2, B9…B2 对应实际的R7…R0, G7…G0, B7…B0。

基本上每个屏幕的datesheet上都有相关信号图。

由这些信号图基本上可以判断:       1.单双路;

 2.是多少bit RGB;

       3.数据信号格式;

 

 

查看IMX6Q_LDB Control Register,内有相关设置:

       1.单双路;

 2.是多少bit RGB;

       3.数据信号格式;

 

有设备树的内核可以直接修改设备树来操作寄存器,红色部分即可修改的三个参数:

&ldb {

status = "okay";

dual-mode = <1>; //这里为单路LVDS,双路应设为 split-mode = <1>;

                 lvds-channel@0 {

                 fsl,data-mapping = "spwg"; //这里为数据格式(VESA),还有一种为JEIDA的标准

                 fsl,data-width = <24>; //这里是数据位宽,即8bit RGB

                 status = "okay";

                               display-timings {

                               native-mode = <&timing0>;

                               timing0: hsd100pxn1 {

                               clock-frequency = <65000000>; //像素时钟

                               hactive = <1280>; //横像素点数

                               vactive = <800>; //竖像素点数

                               hback-porch = <10>; //水平后沿

                               hfront-porch = <30>; //水平前沿

                               vback-porch = <2>; //垂直后沿

                               vfront-porch = <4>; //垂直前沿

                               hsync-len = <10>; //行同步脉宽

                               vsync-len = <6>; //垂直同步脉宽

                              };

                 };

};

下面我们分析蓝色部分应该如何填写。

 

2.屏幕参数的相关设置(蓝色部分)

fb_videomode各个参数的意义

各参数的抽象如下图所示:

关于fb_videomode各个成员的意义详解:

名称

数据手册中的简称

中文名

意义

备注

(简称或另名称)

name

No

名字

液晶屏名字(可选)

No

refresh

No

刷新频率

刷新频率(内核中很多例子都赋值为60)

No

xres

No

行宽

每行的像素个数

No

yres

No

屏幕高度

屏幕的行数

No

pixclock

No

像素时钟

每个像素时钟周期的长度,单位是皮秒(10的负12次方分之1秒)

No

left_margin

HBP

水平后沿

在每行或每列的象素数据开始输出时要插入的象素时钟周期数

No

right_margin

HFP

水平前沿

在每行或每列的象素结束到LCD 行时钟输出脉冲之间的象素时钟数

No

upper_margin

VBP

垂直后沿

在垂直同步周期之后帧开头时的无效行数

No

lower_margin

VFP

垂直前沿

本帧数据输出结束到下一帧垂直同步周期开始之前的无效行数

No

hsync_len

HPW

行同步脉宽

单位:像素时钟周期

HWH(HSYNC width)

vsync_len

VPW

垂直同步脉宽

单位:显示一行的时间th

HWH(HSYNC width)

sync

No

同步极性设置

可以根据需要设置FB_SYNC_HOR_HIGH_ACT(水平同步高电平有效)和FB_SYNC_VERT_HIGH_ACT(垂直同步高电平有效)

No

vmode

No

No

  在内核中的大多数示例都直接置为FB_VMODE_NONINTERLACED。interlaced的意思是交错[隔行]扫描,电视中使用2:1的交错率, 即每帧分两场,垂直扫描两次,一场扫描奇数行,另一场扫描偶数行。很显然LCD目前不是这种模式。

No

flag

No

No

目前没有看到用法

No

 

由上图可得:

水平总周期 = left_margin + right_margin + hsync_len

垂直总周期 = upper_margin + lower_margin + vsync_len

下面主要以16BPP的TFT屏作为例子。有的LCD会给出参数列表,比如下图,可以很清楚的在红框中找到需要的参数,取“type”典型值即可。但是有的LCD并没有直接给出这样的列表,设置某些参数没有给出,这需要通过时序图来确定。

 

下面以天马的3.5寸TFT液晶屏 TM035KDH03为例进行讲解。

参数计算:

可以看到LCD时钟是28M,所以pixclock=1000000/28 ,在设备树上是clock-frequency = <28000000>;

行同步脉冲宽度是一个时钟周期,所以,hsync_len=1

场同步脉冲的宽度是一个行周期,所以,vsync_len = 1

上图是一帧图像的显示时序图。的上图显示,up_margin = 13-1=12,, yres= 240,

整个场周期为263,所以lower_margin= 263-13-240 = 10

同时看到,列同步信号高电平有效,行同步信号也是高电平有效。

上图是一行的时序图。

可以看到,left_margin = 69, xres = 320, right_margin = 408 -320 - 70 = 18

数据在上升沿有效,输出使能是高电平有效。

总计一下上面的参数,得到如下结果:

static struct clcd_panel conn_lcd_panel = {  

.mode = {  

.name = "QVGA TM035KDH03",  

.refresh = 60,  

.xres = 240,  

.yres = 320,  

.pixclock = 35714,  

.left_margin = 69,  

.right_margin = 18,  

.upper_margin = 12,  

.lower_margin = 10,  

.hsync_len = 1,  

.vsync_len = 1,  

.sync = FB_SYNC_HOR_HIGH_ACT|FB_SYNC_VERT_HIGH_ACT,  

.vmode = FB_VMODE_NONINTERLACED,  

},  

}

所以用设备树可以这样写:

              clock-frequency = <28000000>;         //像素时钟

                            hactive = <240>;                              //横像素点数

                            vactive = <320>;                              //竖像素点数

                            hback-porch = <18>;                           //水平后沿

                            hfront-porch = <69>;                           //水平前沿

                            vback-porch = <10>;                           //垂直后沿

                            vfront-porch = <12>;                           //垂直前沿

                            hsync-len = <1>;                              //行同步脉宽

                            vsync-len = <1>;                               //垂直同步脉宽

3.调试过程中的常见问题

    1.背光

       调试屏幕首先要把背光点亮,没有点亮背光屏幕什么都显示不了,根据规格书将背光点亮,可以寻求硬件工程师帮忙

    2.屏幕上星星点点
  在调试的时候,我们会发现屏幕上有莫名其妙的星星点点,一般这种情况下,我们首先要看看VGH和VGL电压是否处于datasheet所描述的范围之 内。如果属于标准范围之内,但星星点点依旧,很有可能就是时序问题。这时候不妨在代码中变更采样的时序(比如上升沿采样改为下降沿采样)。如果无法在代码 中更改,也可以在clk信号线加个100R电阻,也可能解决该问题。

     3.显示抖动

                在确认VPW,VBP,VFP,HPW,HBP,HFP的设置已经符合LCD规格要求后,如果屏幕的显示还在抖动的话,不妨将输出的时钟信号频率降低,有可能解决该问题。                  

               还存在一种现象,LVDS的信号线电压高出规格书一点也会出现。曾经有过LVDS信号电压为3.3V的接到5V导致屏幕显示出现细小电波抖动。

    4.显示花屏

               出现花屏现象,理论上是RGB没有调好导致的。如颜色位数, 颜色顺序导致的。

               检查一下规格书的颜色格式部分, 是否将RGB888格式设置成了666,或者顺序是RBG,BGR之类的都有可能。

           

 

<think>首先,用户的问题是:在RK3568平台上适配Android 13系统以支持LVDS屏幕并实现触摸功能。我需要提供实现方法。 从系统级指令,我必须: - 所有行内数学表达式使用$...$格式。 - 独立公式使用$$...$$格式并单独成段。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识,例如[^1]。 - 回答结构清晰,帮助用户逐步解决问题。 - 考站内引用,但用户提供的引用是关于RK3568 Android11或Android12的,我需要基于这些信息推断Android 13的适配。 用户提供的引用: - [^1]:关于RK3568 Android11的LVDS屏幕配置,提到LVDS与MIPI DSI0共用,需要设备树配置。 - [^2]:关于RK3568 Android的mipi转lvds配置,包含设备树文件修改。 - [^3]:RK3568 Android11触摸芯片移植,涉及设备树配置触摸数。 - [^4]:rk3568点亮LCD(lvds),提到屏幕数调整、VOP配置、设备树设置- [^5]:RK3568 Android12 LVDS屏幕及触摸调试,提供触摸驱动链接。 用户的问题是关于Android 13的适配,所以我要基于Android 11/12的引用,推断Android 13的类似步骤。Android系统的核心配置如设备树、内核驱动等在不同版本中相似,但可能有细微差异。 关键点: 1. **LVDS屏幕支持**:需要配置设备树(dts文件)来启用LVDS设置分辨率、时序等数。 2. **触摸功能**:需要配置触摸芯片的设备树节点,如中断、GPIO、分辨率等。 3. **Android 13适配**:Android 13可能使用更新的内核版本或HAL层,但基本设备树配置应该类似。 步骤应该包括: - 修改设备树文件(dts)以启用LVDS和触摸。 - 配置VOP(Video Output Processor)以匹配LVDS输出。 - 确保内核驱动支持LVDS和触摸芯片。 - 编译和烧写固件。 结构清晰的回答: 1. **引言**:简要说明适配LVDS屏幕和触摸功能的整体方法。 2. **步骤**:分步详细说明如何配置设备树、内核等。 3. **代码示例**:提供设备树配置的代码片段。 4. **验证**:如何验证配置是否生效。 5. **常见问题**:提及可能的问题和解决方法。 6. **相关问题**:生成相关问题。 在回答中引用段落时添加引用标识。例如,基于引用[^1],可以说“RK3568的LVDS与MIPI DSI0是共用关系[^1]”。 生成相关问题:在回答结束后,添加“§§相关问题§§”部分,列出3-5个相关问题。 现在,构建回答大纲: 1. **理解硬件配置**:解释RK3568的LVDS支持(基于引用[^1])。 2. **设备树配置**: - 启用LVDS(基于引用[^1],[^2],[^4])。 - 配置触摸(基于引用[^3],[^5])。 3. **内核配置**:确保相关驱动启用(基于引用[^3])。 4. **Android HAL层**:可能需要适配显示和触摸的HAL,但Android 13可能不需要大改。 5. **调试与验证**:使用工具检查VOP状态(基于引用[^4])。 6. **常见问题**:如黑、闪等(基于引用[^4])。 由于用户提到Android 13,我需要确保信息通用。Android 13的Linux内核版本可能更新,但设备树语法相同。 代码示例:使用设备树配置片段。 最后,生成相关问题: 1. 如何调试RK3568上的LVDS屏幕显示问题? 2. RK3568 Android 13触摸校准方法是什么? 3. 如何优化LVDS屏幕的功耗在RK3568平台上?</think>### RK3568 Android 13适配LVDS屏幕并启用触摸功能的实现方法 在RK3568平台上适配Android 13系统以支持LVDS屏幕和触摸功能,需要重点关注设备树配置、内核驱动启用和系统级调试。RK3568的LVDS接口与MIPI DSI0是共用关系,因此必须正确配置设备树以选择LVDS输出模式[^1]。同时,触摸功能依赖于触摸芯片的驱动和中断配置。以下是详细的实现步骤,基于Android 13的系统架构(内核版本通常为Linux 5.10或更高),并结合RK3568硬件特性进行说明。整个过程分为硬件配置、软件修改、调试验证三部分,确保结构清晰且可操作。 #### 1. **硬件准备与前提条件** - **LVDS屏幕数**:获取屏幕规格书,包括分辨率(如$1280 \times 800$)、时序数(如前后肩、同步信号)、电压要求等。屏幕数错误会导致闪或条纹问题[^4]。 - **触摸芯片选型**:确认触摸芯片型号(如ILI2511或FT5306),并获取其数据手册。触摸芯片通常通过I2C或SPI接口连接,需检查中断和复位GPIO引脚。 - **平台兼容性**:RK3568支持单路LVDS原生输出,若需双路LVDS,需使用转换芯片(如MIPI转LVDS)[^1]。Android 13的BSP(Board Support Package)应基于Rockchip官方SDK更新。 #### 2. **设备树(DTS)配置** 设备树是核心配置,需修改RK3568的DTS文件(如`rk3568-evb.dtsi`或自定义板级DTS)。以下是关键步骤: - **启用LVDS输出**: - 在设备树中关闭MIPI DSI0,启用LVDS接口。例如: ```dts // 关闭MIPI DSI0 &dsi0 { status = "disabled"; }; // 启用LVDS并配置VOP(Video Output Processor) &lvds { status = "okay"; ports { lvds_in: port { // 绑定到VP1(Video Port 1),VP2通常禁用 lvds_in_vp1: endpoint { remote-endpoint = <&vp1_out_lvds>; }; }; }; }; &route_lvds { status = "okay"; connect = <&vp1_out_lvds>; // 确保输出路径正确 }; &vp1 { status = "okay"; }; &vp2 { status = "disabled"; // VP2未使用 }; ``` 此配置确保LVDS信号通过VP1输出,避免与MIPI DSI0冲突[^1][^4]。 - 添加屏幕时序数:根据规格书设置`display-timings`节点,包括分辨率、刷新率、前后肩等。例如: ```dts lvds_panel: lvds-panel { compatible = "simple-panel"; status = "okay"; display-timings { timing0: timing0 { clock-frequency = <72000000>; // 时钟频率 hactive = <1280>; // 水平分辨率 vactive = <800>; // 垂直分辨率 hfront-porch = <40>; // 水平前肩 hback-porch = <40>; // 水平后肩 hsync-len = <10>; // 水平同步信号长度 vfront-porch = <10>; // 垂直前肩 vback-porch = <10>; // 垂直后肩 vsync-len = <5>; // 垂直同步信号长度 }; }; }; ``` 数错误会导致显示异常,需严格匹配规格书[^4]。 - **配置触摸功能**: - 添加触摸芯片节点:假设使用ILI2511芯片(支持Android 13),配置I2C地址、中断和复位GPIO: ```dts &i2c1 { status = "okay"; ilidev: ilidev@41 { compatible = "ilitek,ili2511"; // 驱动匹配名 reg = <0x41>; // I2C器件地址 interrupt-parent = <&gpio0>; interrupts = <RK_PB5 IRQ_TYPE_LEVEL_LOW>; // 中断引脚和类型 reset-gpios = <&gpio0 RK_PB6 GPIO_ACTIVE_LOW>; // 复位GPIO touchscreen-size-x = <1280>; // 触摸水平分辨率 touchscreen-size-y = <800>; // 垂直分辨率 status = "okay"; }; }; ``` 此配置基于引用[^3][^5],确保`compatible`属性与内核驱动匹配。 - 启用触摸中断:在`interrupts`属性中指定GPIO引脚(如`RK_PB5`),避免中断冲突。 设备树修改后,需包含到主DTS文件(如`rk3568-evb1-ddr4-v10.dtsi`)[^2]。 #### 3. **内核与驱动配置** - **内核编译选项**: - 启用LVDS和触摸驱动:在Linux内核配置中(如`make menuconfig`),确保以下选项开启: ``` CONFIG_DRM_PANEL_LVDS=y // LVDS面板支持 CONFIG_TOUCHSCREEN_ILI2511=y // ILI2511触摸驱动 CONFIG_ROCKCHIP_VOP2=y // RK3568 VOP驱动 ``` - 对于其他触摸芯片(如FT5306),选择对应驱动(`CONFIG_TOUCHSCREEN_EDT_FT5X06=y`)[^3]。 - **驱动更新**:Android 13可能使用较新内核,需从Rockchip GitHub仓库获取最新驱动。例如,ILI2511驱动可从官方链接下载(考引用[^5])。 #### 4. **Android系统层适配** - **HAL层配置**:在Android 13中,显示和触摸的HAL(Hardware Abstraction Layer)通常无需大改,但需确保: - `surfaceflinger`服务正确识别LVDS分辨率。 - 触摸事件通过`inputflinger`传递,验证`getevent`命令输出。 - **编译与烧写**: - 使用Rockchip SDK编译固件:`./build.sh -d rk3568-evb -v userdebug`。 - 烧写固件到设备,并检查`/proc/device-tree`以确认DTS配置生效。 #### 5. **调试与验证** - **显示问题排查**: - 开机黑:检查上电时序和信号,使用`cat /d/dri/0/summary`(Android)或`cat /sys/kernel/debug/dri/0/summary`(Linux)查看VOP状态[^4]。 -或条纹:重新校准设备树中的时序数,确保与屏幕规格书一致。 - **触摸功能验证**: - 使用`getevent -l`命令查看触摸事件输入。 - 若触摸无响应,检查中断和GPIO配置:`cat /proc/interrupts`确认中断触发。 - **常见问题解决**: - **开机无显示,休眠唤醒后正常**:检查上电时序,或尝试禁用开机Logo。 - **触摸点漂移**:执行触摸校准(Android设置或使用`ts_calibrate`工具)。 #### 6. **考注意事项** - **Android 13差异**:Android 13可能引入新安全策略(如SELinux),需在`te`文件中添加触摸驱动的权限规则。 - **性能优化**:调整VOP时钟频率以降低功耗,公式为: $$f_{\text{clk}} = \frac{(h_{\text{active}} + h_{\text{front-porch}} + h_{\text{back-porch}} + h_{\text{sync-len}}) \times (v_{\text{active}} + v_{\text{front-porch}} + v_{\text{back-porch}} + v_{\text{sync-len}}) \times \text{refresh\_rate}}{1000}$$ 其中数来自设备树时序设置[^4]。 - **引用资源**:Rockchip官方Wiki和GitHub提供Android 13 BSP更新,触摸驱动下载考[^5]。 通过以上步骤,RK3568 Android 13可稳定支持LVDS屏幕和触摸功能。若问题持续,提供具体屏幕和触摸芯片型号以进一步分析。
评论 22
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

世黎

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值