Imx6支持LVDS显示(DV150X0M-N10屏为例)
1.屏幕参数
1)显屏幕参数
只需保证:
hback-porch + hfront-porch + hsync-len = HP - HV = 1344-1024 = 320
vback-porch +vfront-porch + vsync-len = VP - VV = 806-768 = 38
得到如下参数:
clock-frequency = DOTCLK = 58000000;
Pixclock = 1000000/58 = 17241;
hactive = yres = 1024;
vactive = xres = 768;
hback-porch = left_margin = 100;
hfront-porch = right_margin = 120;
vback-porch = upper_margin = 12;
vfront-porch = lower_margin = 12;
hsync-len = hsync_len = 120;
vsync-len = vsync_len = 14;
2)像素格式
6bits+FRC:
6bits frc指的是屏幕的颜色深度6bit抖动,可以达到8bits效果;
得到如下参数:
pixfmt:RGB24
2.u-boot程序及环境变量修改:
1)修改显示参数数组
路径:/u-boot-2016.03/board/myzr/myimx6/myimx6a9.c
struct display_info_t const displays[] = {{
.bus = -1,
.addr = 0,
.pixfmt = IPU_PIX_FMT_RGB24,//pixfmt
.detect = NULL,
.enable = enable_lvds,
.mode = {
.name = "MY-LVDS-WSVGA"
.refresh = 60, //Frame Period
.xres = 1024,
.yres = 768,
.pixclock = 17241, //1000000/clock-frequency
.left_margin = 100,
.right_margin = 120,
.upper_margin = 12,
.lower_margin = 12,
.hsync_len = 120,
.vsync_len = 14,
.sync = FB_SYNC_EXT,
.vmode = FB_VMODE_NONINTERLACED
} }, {
2)修改lvds模式下BPP(像素深度)
路径:/u-boot-2016.03/include/configs/myimx6a9.h
#ifdef IPU_OUTPUT_MODE_LVDS
/* For LVDS, 1024*768 resolution */
#define DISPLAY_WIDTH 1024
#define DISPLAY_HEIGHT 600
#define DISPLAY_BPP 24
#define DISPLAY_IF_BPP 24 /* RGB24 interface */
#define DISPLAY_HSYNC_START 220
#define DISPLAY_HSYNC_END 40
#define DISPLAY_HSYNC_WIDTH 60
#define DISPLAY_VSYNC_START 21
#define DISPLAY_VSYNC_END 7
#define DISPLAY_VSYNC_WIDTH 10
3)修改u-boot环境变量:
路径:/u-boot-2016.03/board/myzr/bootscripts/myimx6a9_l4115_script.cmd
setenv disp_fb0_lvds1 "video=mxcfb0:dev=ldb,if=RGB24 ldb=sin1"
setenv disp_fb1_lvds1 "video=mxcfb1:dev=ldb,if=RGB24 ldb=sin1"
setenv disp_fb0_lvds0 "video=mxcfb0:dev=ldb,if=RGB24 ldb=sin0"
setenv disp_fb1_lvds0 "video=mxcfb1:dev=ldb,if=RGB24 ldb=sin0"
2.kernel设备树修改
路径:linux-4.1.15/arch/arm/boot/dts/myimx6ek314.dtsi:
1)frame_buffer修改如下:
mxcfb1: fb@0 {
compatible = "fsl,mxc_sdc_fb";
disp_dev = "ldb";
interface_pix_fmt = "RGB24";
default_bpp = <24>;
int_clk = <0>;
late_init = <0>;
status = "disabled";
};
2)lvds修改如下:
lvds-channel@0 {
fsl,data-mapping = "spwg";
fsl,data-width = <24>;
status = "okay";
display-timings {
native-mode = <&timing0>;
timing0: hsd100pxn1 {
clock-frequency = <58000000>;
hactive = <1024>;
vactive = <768>;
hback-porch = <100>;
hfront-porch = <100>;
vback-porch = <12>;
vfront-porch = <12>;
hsync-len = <120>;
vsync-len = <14>;
};
};
};
lvds-channel@1 {
fsl,data-mapping = "spwg";
fsl,data-width = <24>;
status = "okay";
display-timings {
native-mode = <&timing1>;
timing1: hsd100pxn1 {
clock-frequency = <58000000>;
hactive = <1024>;
vactive = <768>;
hback-porch = <100>;
hfront-porch = <100>;
vback-porch = <12>;
vfront-porch = <12>;
hsync-len = <120>;
vsync-len = <14>;
};
};
};
3.QT执行程序后报错解决办法
错误:EGL Error : Could not create the egl surface: error = 0x3003
解决办法:
echo 16 > /sys/class/graphics/fb0/bits_per_pixel
参考文章:
1.https://blog.csdn.net/qq_37375427/article/details/78989415
2.https://blog.csdn.net/yanlei208/article/details/108374752