Linux驱动开发LCD
Posted XXX_UUU_XXX
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux驱动开发LCD相关的知识,希望对你有一定的参考价值。
framebuffer,帧缓冲fb是一种机制,将系统中所有跟显示有关的硬件和软件集合起来,虚拟出一个fb设备,LCD驱动生成/dev/fbx的设备,应用程序通过访问/dev/fbx设备即可以访问LCD。
不同分辨率的LCD屏幕eLCDIF控制器驱动代码相同,只需要修改好对应的屏幕参数。
Linux内核将所有framebuffer抽象为一个fb_info结构体,fb_info包含framebuffer设备的完整属性和操作集合,编写LCD驱动就是构建fb_info并向系统注册fb_info的过程。
设备树文件内容
/
backlight
compatible = "pwm-backlight";
pwms = <&pwm1 0 5000000>;
brightness-levels = <0 4 8 16 32 64 128 255>;
default-brightness-level = <7>;
status = "okay";
;
;
&iomuxc
imx6ul-evk
pinctrl_lcdif_dat: lcdifdatgrp
fsl,pins = <
MX6UL_PAD_LCD_DATA00__LCDIF_DATA00 0x49
MX6UL_PAD_LCD_DATA01__LCDIF_DATA01 0x49
MX6UL_PAD_LCD_DATA02__LCDIF_DATA02 0x49
MX6UL_PAD_LCD_DATA03__LCDIF_DATA03 0x49
MX6UL_PAD_LCD_DATA04__LCDIF_DATA04 0x49
MX6UL_PAD_LCD_DATA05__LCDIF_DATA05 0x49
MX6UL_PAD_LCD_DATA06__LCDIF_DATA06 0x49
MX6UL_PAD_LCD_DATA07__LCDIF_DATA07 0x51
MX6UL_PAD_LCD_DATA08__LCDIF_DATA08 0x49
MX6UL_PAD_LCD_DATA09__LCDIF_DATA09 0x49
MX6UL_PAD_LCD_DATA10__LCDIF_DATA10 0x49
MX6UL_PAD_LCD_DATA11__LCDIF_DATA11 0x49
MX6UL_PAD_LCD_DATA12__LCDIF_DATA12 0x49
MX6UL_PAD_LCD_DATA13__LCDIF_DATA13 0x49
MX6UL_PAD_LCD_DATA14__LCDIF_DATA14 0x49
MX6UL_PAD_LCD_DATA15__LCDIF_DATA15 0x51
MX6UL_PAD_LCD_DATA16__LCDIF_DATA16 0x49
MX6UL_PAD_LCD_DATA17__LCDIF_DATA17 0x49
MX6UL_PAD_LCD_DATA18__LCDIF_DATA18 0x49
MX6UL_PAD_LCD_DATA19__LCDIF_DATA19 0x49
MX6UL_PAD_LCD_DATA20__LCDIF_DATA20 0x49
MX6UL_PAD_LCD_DATA21__LCDIF_DATA21 0x49
MX6UL_PAD_LCD_DATA22__LCDIF_DATA22 0x49
MX6UL_PAD_LCD_DATA23__LCDIF_DATA23 0x51
>;
;
pinctrl_lcdif_ctrl: lcdifctrlgrp
fsl,pins = <
MX6UL_PAD_LCD_CLK__LCDIF_CLK 0x49
MX6UL_PAD_LCD_ENABLE__LCDIF_ENABLE 0x49
MX6UL_PAD_LCD_HSYNC__LCDIF_HSYNC 0x49
MX6UL_PAD_LCD_VSYNC__LCDIF_VSYNC 0x49
>;
;
pinctrl_pwm1: pwm1grp
fsl,pins = <
MX6UL_PAD_GPIO1_IO08__PWM1_OUT 0x110b0
>;
;
;
;
&iomuxc_snvs
imx6ul-evk
pinctrl_lcdif_reset: lcdifresetgrp
fsl,pins = <
/* used for lcd reset */
MX6ULL_PAD_SNVS_TAMPER9__GPIO5_IO09 0x49
>;
;
;
;
&pwm1
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_pwm1>;
status = "okay";
;
&lcdif
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_lcdif_dat
&pinctrl_lcdif_ctrl
&pinctrl_lcdif_reset>;
display = <&display0>;
status = "okay";
display0: display /* LCD 属性信息 */
bits-per-pixel = <16>; /* 一个像素占用几个 bit */
bus-width = <24>; /* 总线宽度 */
display-timings
native-mode = <&timing0>; /* 时序信息 */
timing0: timing0
clock-frequency = <35500000>; /* LCD 像素时钟,单位 Hz */
hactive = <800>; /* LCD X 轴像素个数 */
vactive = <480>; /* LCD Y 轴像素个数 */
hfront-porch = <210>; /* LCD hfp 参数 */
hback-porch = <46>; /* LCD hbp 参数 */
hsync-len = <20>; /* LCD hspw 参数 */
vback-porch = <23>; /* LCD vbp 参数 */
vfront-porch = <22>; /* LCD vfp 参数 */
vsync-len = <3>; /* LCD vspw 参数 */
hsync-active = <0>; /* hsync 数据线极性 */
vsync-active = <0>; /* vsync 数据线极性 */
de-active = <1>; /* de 数据线极性 */
/* rgb to hdmi: pixelclk-ative should be set to 1 */
pixelclk-active = <0>; /* clk 数据线极性 */
;
;
;
;
- 节点backlight,描述Linux系统使用那个pwm控制LCD背光
- 子节点pinctrl_lcdif_dat,为RGB LCD的24根数据线配置项。
- 子节点pinctrl_lcdif_ctrl,RGB LCD的4根控制线配置项,包括CLK、ENABLE、VSYNC和 HSYNC。
- 子节点pinctrl_pwm1,LCD背光PWM引脚配置项。LCD的背光IO尽量和半导体厂商的官方开发板一致。
以上是关于Linux驱动开发LCD的主要内容,如果未能解决你的问题,请参考以下文章
51单片机+L298驱动步进电机+L297测速+LCD1602显示+按键调试+Proteus仿真