lcd 控制器的模式配置
- 接口配置
soc lcd controller 一般都支持多种的 Lcd 接口, 如 dumb LCD panel (rgb ) , smart LCD panel , mipi ,lvds , 等等 ,rgb 接口对应的就是 dumbpanel 模式, - rgb 接口还需要配置数据线个数 ,如 24 ,18 16 ,8 等 ,
- linux framebuffer 的单点数据格式, 以及rgb 的顺序。
rgb 接口 时序
lcd 的时序是lcd 能否正常显示的关键 ,由 hsync vsysnc de pclk 来控制lcd的 刷新频率和时序,需要配置的时序如下
hbp ,hfp vfp,vbp hspw ,vspw,hactive,vactive;
pclk :一个pclk 传送一个像素的数据
所以
一行的freq : pclk_freq/ (hbp+hfp+hspw+hactive)
frame_rate = pclk_freq /((hbp+hfp+hspw+hactive)*(vfp+vbp+vspw+vactive)
VSPW:帧同步信号的脉宽,单位为1行(Line)的时间。即行同步信号的个数
VFPD: 帧同步信号的前肩,单位为1行(Line)的时间。如上
VBPD: 帧同步信号的后肩,单位为1行(Line)的时间。如上
LINEVAL :帧显示尺寸-1,即屏行宽-1,对于800*480分配率的LCD屏,那么LINEVAL=480-1=479,请记住,是屏行宽,也就是LCD屏显示一帧数据所需要的行的数目。
HBPD:行同步信号的后肩,单位为1pCLK的时间。
HFPD:行同步信号的前肩,单位为1pCLK的时间。
HSPW:行同步信号的脉宽,单位为1pCLK的时间。
hactive,vactive 分别为为行有效像素,和一帧的有效行个数。即屏的分辨率的宽
有些控制器还可以配置 vsync 同步信号的脉宽上下沿的建立时序(以clk 周期为单位)
dma 配置
lcd控制器会根据上面说的帧率(也就是刷新率)从某个地址搬运一帧数据刷到lcd 的rgb输出信号上,因此至少需要配置数据起始地址和大小。有些控制器可以采用Pingpongbuffer,那就需要配置两个地址。
lcd 调试要点
-
lcd 白屏的几种可能 ,
1.初始化未成功(对于有些需要通过spi 初始化的lcd 来说);2 .lcd rgb 时序问题也有可能造成白屏问题。 -
rgb时序需要和屏的初始化参数一致,lcd 时序盲目照搬参考的时序不可取,因为不同平台clk 时钟频率一般无法做到一模一样。最好可以写一个动态遍历不同时序(参考lcd 规格书上的时序有限范围)的测试程序,来找到适配的时序。
-
时钟频率要设对, 太快,LCD反应不过来,显示不了,太慢也不合适,这个范围可以根据你的刷新率需求和lcd 的规格书(一般会有一个最少响应周期)来确定