i.MX6ULL驱动开发 | 10 - 修改LCD驱动点亮LCD显示小企鹅logo
Posted MCUlover666
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了i.MX6ULL驱动开发 | 10 - 修改LCD驱动点亮LCD显示小企鹅logo相关的知识,希望对你有一定的参考价值。
一、LCD硬件
本文中我使用正点原子7’ RGB屏幕,分辨率1024*600。
原理图如下:
二、修改LCD屏幕节点
- LCD所使用的引脚配置
- LCD屏幕节点参数修改
- LCD背光节点信息修改
1. LCD屏幕引脚配置
在 arch/arm/boot/dts/imx6ull-atk-emmc.dts
设备树描述文件中。
(1)找到 pinctrl_lcdif_dat 节点,该节点描述了LCD数据引脚使用的引脚复用功能和电气属性:
(2)找到 pinctrl_lcdif_ctrl 节点,该节点描述了LCD控制引脚使用的引脚复用功能和电气属性:
因为正点原子开发板硬件设计的原因,LCD接口用了三个SGM3157模拟开关,为了防止模拟开关影响到网络,这里需要将LCD相关引脚的电气属性都修改为0x49,降低LDC相关IO的驱动能力<.font>。
(3)找到 pinctrl_pwm1 节点,该节点描述了LCD背光控制引脚使用的引脚复用功能和电气属性:
这里使用GPIO1_IO08作为LCD背光控制引脚。
(4)找到 pinctrl_lcdif_reset 节点,该节点描述了LCD复位引脚使用的引脚复用功能和电气属性:
这里使用GPIO5_IO09作为LCD复位引脚。
2. LCD屏幕参数节点信息修改
在 arch/arm/boot/dts/imx6ull-atk-emmc.dts
设备树描述文件中,找到 lcdif 节点的补充描述,该节点中描述了LCD屏幕的驱动参数。
(1)LCD使用到的IO
本文所使用的LCD没有用到复位引脚,去除对应设置。
(2)LCD屏幕参数
- bits-per-pixel:色彩深度,16bit,RGB565
- bus-width:数据总线宽度,24bit
本文使用的屏幕支持RGB888,修改如下:
(3)LED时序参数
- clock-frequency:LCD像素时钟
- hactive:水平像素点
- vactive:垂直像素点
- hfront-porch:hfp参数
- hback-porch:hbp参数
- hsync-len:hspw参数
- vback-porch:vbp参数
- vfront-porch:vfp参数
- vsync-len:vspw参数
- hsync-active:hsync时钟极性
- vsync-active:vsync时钟极性
- de-active:de时钟极性
- pixelclk-active:像素时钟极性
根据本文使用的LCD的数据手册,参数修改如下:
三、运行测试
重新编译设备树:
make dtbs
用新的设备树运行:
四、小企鹅logo如何配置
默认小企鹅logo显示是开启的,手动开启方法如下。
进入内核menuconfig:
-> Device Drivers
-> Graphics support
-> Bootup logo (LOGO [=y])
-> Standard black and white Linux logo
-> Standard 16-color Linux logo
-> Standard 224-color Linux logo
五、屏幕亮度调节
1. 设备树描述节点
在 arch/arm/boot/dts/imx6ull-atk-emmc.dts
设备树描述文件中,找到backlight节点,该节点描述了背光信息。
- pwm属性:描述使用哪个pwm和pwm频率,使用pwm1,频率5KHz;
- brightness-levels:背光等级,有8级亮度,对应8种占空比,也可以自行添加其它占空比等级;
- default-brightness-level:默认背光等级为6,这里修改为7。
2. 测试运行
重新编译设备树,运行测试。
make dtbs
3. 手动设置亮度
在 /sys/devices/platform/backlight/backlight/backlight
目录中,文件如下:
其中brightness文件内容表示当前亮度等级,max_brightness文件内容表示最大亮度等级。
修改 brightness 文件:
echo 2 > brightness
可以看到屏幕亮度瞬间变暗,注意,这里只是修改当前值,重启后,亮度依然为设备中设置的默认亮度等级。
六、关闭LCD自动熄屏功能
Linux内核中,LCD默认10min后熄屏,此时可以外接USB键盘来通过回车键唤醒。
在开发期间,可以不在意功耗,通过修改代码来关闭此功能。
在Linux内核源码中的drivers/tty/vt/vt.c
文件中修改(好家伙,这个文件是Linus写的)。
找到 blankinterval 变量,该变量控制LCD关闭时间,单位是s,改为0即可关闭此功能。
// modify by mculover666, disable lcd auto close.
static int blankinterval = 0;
重新编译内核:
make -j16
七、LCD驱动框架浅析
1. 找到LCD对应的驱动
在arch/arm/boot/dts/imx6ull.dtsi
设备树描述文件中,找到lcdif节点的兼容性:
在linux内核源码中搜索兼容性"fsl,imx6ul-lcdif",找不到,搜索另一个兼容性:“fsl,imx28-lcdif”。
grep -nR "fsl,imx28-lcdif" *
找到驱动文件:drivers/video/fbdev/mxsfb.c。
2. platform驱动模块注册
这里再往下看就是Linux的Framebuffer驱动,需要另起一篇来详细的写写。
以上是关于i.MX6ULL驱动开发 | 10 - 修改LCD驱动点亮LCD显示小企鹅logo的主要内容,如果未能解决你的问题,请参考以下文章
i.MX6ULL驱动开发 | 35 - NXP LCD控制器Framebuffer驱动浅读
i.MX6ULL驱动开发 | 35 - NXP LCD控制器Framebuffer驱动浅读
i.MX6ULL驱动开发 | 34 - 基于SPI框架驱动spi lcd(st7789)
i.MX6ULL驱动开发 | 34 - 基于SPI框架驱动spi lcd(st7789)