lvds理解
首先看一下lvds支持的端口使用方式
单通道LVDS :只通过一个通道接向外面的LVDS panel。(单路显示)
split双通道LVDS: 通过两个通道接向外面的一个LVDS panel. (双通道lvds)
两路通道LVDS: 通过两个通道接向外面的两个LVDS panel, panel 显示相同内容; (双屏同显)
两路通道LVDS:两个不同输入,分别指向两个不同LVDS panel,panel 显示不同内容; (双屏异显)
双通道LVDS
双通道LVDS:使用相同的IPU DI,且每个通道都路由这个DI 的数据到 自己的通道。由于使用的是相同的DI, 所以两个显示屏幕内容是相同的。 很明显,双通道LVDS 能够实现多屏幕同显。
split通道LVDS:使用相同的IPU DI,但每个通道路由不同的数据,奇数通道路由奇数位像素数据,偶数通道路由偶数位像素数据,依次来构成一个完整的帧。
IPU 将framebuffer 中的数据读入到IPU,然后根据其分辨率参数,生成带有时序的显示数据, 最终通过DI口送出。
每个DI 口送出的数据,就已经包含了hsync,vsync,pixelclock,及像素数据。 在HDMI, LVDS, LCD 端,都可以控制相关寄存器,让DI 的数据流流向自己,最终经过显示协议的转换输出到显示屏幕上去。 也就是说 LVDS显示数据是从IPU DI 路由给它的。
从上图可得,每一个IPU都有两个 DI 口,也就是说每个IPU 最多支持两路显示。
了解了这一概念之后,我们再来看 LVDS 双通道 &split 通道的配置
split双通道LVDS配置
从上面图知道,如果要配置为split双通道模式,需要把两路通道都路由到一个DI口上
以路由到IPU1-DI0为例做内核的一个讲解(uboot原理相似)
lvds驱动文件路径:
driver/video/fbdev/mxc/ldb.c
ldbmode会传入到内核驱动ldb.c里面,然后驱动会自动配置为相应模式,(不做过多介绍,有兴趣大家自行查看)只需修改屏幕参数可正常显示
下面讲解一下具体配置情况
uboot命令行参数
ldbmode=ldb=spl0
mxcfb0=video=mxcfb0:dev=ldb,LDB-1080P60,if=RGB24,bpp=32
驱动设置了5个寄存器
/* Turn on LDB0, LDB1, IPU,IPU DI0 clocks */ 时钟门控寄存器
CCGR3
/* set LDB0, LDB1 clk select to 011/011 */
CS2CDR
CSCMR2
gpr2
gpr3
如果显示不正常可以查看下下面两个寄存器是否有问题