文章目录
概述
平台:RK3288
板型:Firefly-RK3288
Host:Ubuntu 16.04
LCD:BP101WX1-206
Firefly Linux SDK:具体参考Firefly-RK3288维基教程
由于Firefly-RK3288这块板默认没有开启LVDS输出,所以编写了这份文档,记录LVDS屏幕如何驱动。
核心概念
视觉输出处理器vop(Visual Output Processor)
vop
是一个把frame buffer
数据传输到指定显示设备(RGB LCD Panel,LVDS
,MIPI,eDP
,HDMI
等)的接口,它还包含了显示处理和图层处理等功能,传统意义上就是一个显示控制器(Display Controller)。rk3288内部有两个vop单元,分别是vopb
和vopl
。具体可参考《rk3288-chapter-27-visual-output-processor-(vop)
》
视频信号传输接口LVDS(Low-Voltage Differential Signaling)
LVDS
接口把vop
输出的CMOS
信号为低压差分
信号,以此减少噪声对视频信号的干扰,同时减少了线路数量,RGB
接口的线路比LVDS
要多很多。具体参考《rk3288-chapter-33-lvds
》。
显示面板Panel
主要用来把RGB信号转为视觉画面展示出来。
显示时序
有几个重要参数必须要了解的,这些参数都可以在显示屏的datasheet里面找到。
名称 | 解释 | 缩写 | 单位 |
---|---|---|---|
Clock Frequency | 像素时钟 | cf |
hz |
Horizontal Back Porch | 水平后肩,水平同步信号之后的时延 | hbp |
clk |
Horizontal Front Porch | 水平前肩,水平同步信号之前的时延 | hfp |
clk |
Horizontal Pulse Width | 水平同步信号的长度 | hsync |
clk |
Vertical Back Porch | 垂直后肩,垂直同步信号之后的时延 | vbp |
line |
Vertical Front Porch | 垂直前肩,垂直同步信号之前的时延 | vfp |
line |
Vertical Pulse Width | 垂直同步信号长度 | vsync |
line |
这里clk
= 1 / cf,line
=(hbp + hfp + hsync)* clk,假如显示屏的像素时钟规定为65000000hz,则clk = 1 / 65000000s(具体我就不算了)。
内核DTS修改
1、屏幕datasheet第32页显示的关键参数
从屏幕datasheet可知道
Main clock = clock-frequency = 65000000hz
Hor Blanking = hbp + hfb + hsync = 50
H Sync Pulse Width = hsync = 32
H Sync Offset = hbp = 10
所以 hfp = 50 - 32 - 10 = 8
Ver Blanking = vbp + vfp + vsync = 12
V Sync Pulse Width = vsync = 6
V Sync Offset = vbp = 3
所以vfp = 12 - 6 - 3 = 3
2、屏幕datasheet第20页显示的时序图
可知道在DCLK(这里就是我指的cf)下降沿采集数据,DE为高电平时数据有效。而hsync和vsync都是低电平触发。
3、进入arch/arm/boot/dts
,修改rk3288-firefly.dts
cd arch/arm/boot/dts/
vi rk3288-firefly.dts
4、增加使用LVDS
相关节点
#include <dt-bindings/display/media-bus-format.h> // 需要增加这个头文件
......
&route_hdmi {
status = "okay";
};
&route_lvds {
// 使能lvds路由,使显示子系统的数据能够经过vopl传输到lvds
status = "okay";
};
......
&lvds_in_vopb {
// 我们屏幕是1280x800使用vopl输入即可,所以关闭vopb的输入
status = "disabled";