imx6ul 17 之RGB_LCD

本文详细介绍了RGB_LCD显示的工作原理,包括像素点、分辨率、像素格式、LCD屏幕接口和时间参数。同时,深入探讨了6ULL的LCDIF控制器接口配置,如DOTCLK模式、LCDIF相关寄存器设置及像素时钟的计算方法。此外,还提及了LCD驱动程序编写的关键步骤和屏幕ID的读取,为理解和实现LCD显示提供了全面的技术指导。

一、RGB_LCD 显示原理简介

  • 1、像素点
    像素点就相当于一个“小灯”,不管是液晶屏幕,还是手机,平板,RGB_LCD屏幕都是由一个个的彩色小灯 ” 构成的 “ 。
    彩色点阵每个像素点有三个小灯:红色 绿色 蓝色,也叫做RGB,是光的三原色
    通过调整这三原色的亮度比例,就可以显示各种颜色。
  • 2、分辨率
    要想显示文字、图形、视频,就需要很多个”小灯“ / 像素点。
    分辨率说的就是像素点的个数。
    1080p、720p、2k、4k甚至是8k,描述的就是分辨率。
    1080p = 1920 × 1080。行像素点数 × 列像素点数
    显示器的尺寸有24寸、50寸等等,这个描述的是对角线的长度。
    尺寸不变的情况下,分辨率越高,显示越精细。
    ppi:(对角线上的)像素密度。
  • 3、像素格式
    如何将RGB三种颜色进行量化,每种颜色用 8 bits 表示,RGB三种颜色则需要24 bits,那么可以描述 2 的 24 次方种颜色(接近1700万)。
    现在流行 10 bit,HDR10,就是RGB 10 10 10,接近10亿种颜色。
    在 RGB888 d的基础上 再加上 8bit 的 ALPHA通道,也就是透明通道,正好是32位。
  • 4、LCD 屏幕接口
    RGB格式的屏幕,一般叫做 RGB 接口屏。
    屏幕接口有:MIPI、LVDS,MCU
    正点原子屏幕ID,使用ID可以识别不同的屏幕,在RGB_LCD屏幕上对R7,G7,B7焊接上拉或者下拉电阻实现不同的ID。弱上拉 / 下拉,有数据时不影响数据。
    正点原子的 ALPHA 底板 RGB 屏幕接口用了3个 3157 模拟开关。原因是防止 LCD屏幕上的 ID 电阻影响到 6ULL 的启动。
  • 5、LCD的时间参数
    大神

水平:
HSYNC:水平同步信号 / 行同步信号,出现此信号表示新的一行开始显现。
a.产生 HSYNC 信号,表示新的一行开始显示,HSYNC信号需要维持一段时间,这个时间叫做 HSPW / 行同步信号宽度
b.HSYNC信号完成之后,需要一段时间延迟,这段时间叫做 HBP
c.显示1024个像素点的数据,HOZAVL,就是1024个clk。
d.一行像素显示完成以后电子枪关闭,到下一行信号的 HSYNC的产生之间有个延时叫做 HFP
因此显示一行所需的时间为:( HSPW + HBP + HOZAVL +HFP )


在这里插入图片描述

垂直:
VSYNC:垂直同步信号 / 帧同步信号,出现该信号表示新的一帧开始显现。
a.VSYNC 信号持续一段时间,为VSPW。
b.VSYNC 信号完成以后,需要一段时间延迟,VBP。
c.VBP 信号结束以后,就是要显示的行数,比如600行。
d.所有的行显示完成以后,有一个 VFP 时长的延迟。
一帧所花时长:( VSPW + VBP + LINE + VFP ) × ( HSPW + HBP + HOZAVL +HFP )


  • 6、显存
    显存就是显示存储空间,采用 ARGB 8888 = 32bits = 4Bytes。这四个字节的数据表示一个像素点的信息,必须要存起来。需要流出一定的内存给lcd用,以数组的形式。

二、6ULL LCDIF 控制器接口原理

  • 1、本次实验使用 DOTCLK 接口,也就是 VSYNC,HSYNC,ENABLE(DE) 和 DOTCLK(PCLK)
  • 2、LCDIF_CTRL ,bit0 必须置1;bit1 设置为24位全部有效,为0;bit5 设置LCDIF 接口工作在主机模式下,置1;bit9 ~ 8 设置输入像素数据字长为24bit,设置为3;bit11 ~ 10 设置为3,数据传输宽度为24bit;bit13 ~ 12 设置数据交换,不需要,设置为0;bit15 ~ 14 设置输入数据交换,不需要,为0;bit17 置1,LCDIF工作在DOTCLK模式下;bit19 必须置1,工作在 DOTCLK 模式下。bit31 是复位功能,必须置0。
  • 3、LCDIF_CTRL1 的bit19 ~ 16 设置为 0x7,24位的格式。
  • 4、LCDIF_TRANSFER_COUNT bit15 ~ 0 是LCD屏幕一行的像素点数,bit31 ~ 16 表示LCD一共有多少行。
  • 5、LCDIF_VDCTRL0 bit17 ~ 0 为 VSPW参数;bit20 设置 VSYNC信号的宽度单位,置1,单位为1行的时间。bit21 同bit20,设置为1。bit24设置 ENABLE 信号极性,为0低电平有效,这里设置为1;bit25 设置时钟信号机型,设置为0;bit26设置HSYNC信号极性,设置为0,低电平有效。bit27 设置 VSYNC信号极性,设置为0,低电平有效;bit28设置为1,开启ENABLE信号;bit29 设置为0,VSYNC设置为输出;
  • 6、LCDIF_VDCTRL1 为两个VSYNC信号之间的长度。VSPW + VBP + LINE + VFP
  • 7、LCDIF_VDCTRL2 bit17 ~ 0 是两个HSYNC信号之间的长度,就是HSPW + HBP + HOZAVL +HFP;bit31 ~ 18 是 HSYNC信号的宽度,HSPW。
  • 8、LCDIF_VDCTRL3 bit15 ~ 0 是 VBP + VSPW;bit27 ~ 16 是HBP + HSPW
  • 9、LCDIF_VDCTRL4 bit17 ~ 0是一行有多少个像素点。bit18 设置为1。
  • 10、LCDIF_CUR_BUF LCD 当前缓存,显存首地址。
  • 11、LCDIF_NEXT_BUF LCD下一帧数据的首地址。
  • 12、LCD IO 初始化

三、LCD像素时钟的设置

LCD需要一个CLK信号,这个时钟信号是6ULL的CLK发送给RGB_LCD的。比如7寸1024 × 600 的屏幕需要51.2MHz的CLK。
LCDIF_CLK_ROOT 就是6ULL的像素时钟。设置PLL5(VIDEO_PLL)为时钟源。
PLL5_CLK = Fref * (DIV_SELECT + NUM/DENOM) = 24 ×
CCM_ANALOG_PLL_VIDEO 的 bit6 ~ 0 就是 DIV_SELECT,可选范围27 ~ 53.
设置PLL_VIDEO 的bit20 ~ 19 为 2,1分频;
设置CCM_ANALOG_MISC2 寄存器的 bit31~ 30 为0,就是1分频。
不使用小数分频器,因此NUM / DENOM为0,CCM_ANAOLG_PLL_VIDEO_NUM = 0,再设置CCM_ANALOG_PLL_VIDEO_DENOM = 0。
CCM_CSCDR2 的 bit17 ~ 15,设置LCDIF_PRE_CLK_SEL为0x2,选择LCDIF_CLK_ROOT的时钟源为PLL5;bit14 ~ 12 为LCDIF_PRED 位,设置前级分频,可设置0 ~ 7,对应1 到 8分频。
CCM_CBCMR 的bit25 ~ 23为 LCDIF_PODF,设置第二级分频,可以为0 ~ 7,对应1 ~ 8分频。bit11 ~ 9为 LCDIF_CLK_SEL,选择LCD_CLK的最终时钟源,设置为0,来源于 pre-muxed LCDIF clock。

四、LCD驱动程序编写

1、初始化LCD函数之前,要先读取屏幕ID,分辨是那种LCD。

Imx6ul是NXP半导体公司推的一款处理器,在嵌入式系统领域应用广泛。以下是关于它的一些技术资料和使用指南: ### 硬件设计 Imx6ul在硬件设计上,有着基本框架和接口特性,并且可以为特定应用场景定制设计。从启动方面来看,它可以从USB启动烧录,也能从EMMC nand启动,因此GPIO的配置比较重要。正点原子的lcd使用时,由于R7 G7 B7和启动配置有干扰,需使用正点原子给的参考图,否则只有修改设备树,强制让屏幕以某个分辨率启动。硬件原理图方面,32.768kHz的晶振供给rtc使用,在T16和T17两个io上接了一个24MHz的晶振,整个系统的时钟由该时钟源提供 [^1][^2][^4]。 ### 系统时钟分析 Imx6ul24MHZ晶振生成了7路PLL时钟源用于驱动外设,具体如下: - PLL1:arm_pll,供arm内核使用。 - PLL2:system_pll,固定528m,由24 * 22 = 528,固定22倍频不能修改,又叫做528_pll,此路PLL又分了4路PFD,共同作为其它外设的根时钟源,如内部系统总线。 - PLL3:usb1_pll,可以供usb1phy和其它外设,固定是20倍频,为480MHz,也有四路PFD(pll3_pfd0 -> pll3_pfd3)。 - PLL4:audio_pll,供音频使用。 - PLL5:video_pll,主供视频外设,图像处理有关的外设用,如rgb lcd。 - PLL6:enet_pll,pll固定为 20 + 5/6 倍频,固定频率为500 MHz,主供网络外设使用。 - PLL7:usb2_pll,固定频率为480m,固定倍频为20倍,无pfd [^4]。 ### uboot移植 Imx6ul的uboot移植步骤如下: 1. **添加开发板** - 解压uboot。 - 复制config并修改。 - 复制头文件修改。 - 复制板级文件夹。 - 修改里面的文件(左上角是文件名),修改Kconfig(添加),新建脚本mx6ull_alientek_emmc.sh。 2. 进入uboot目录下,修改Makefile,编译: ```makefile make mx6ull_14x14_evk_emmc_defconfig make V=1 -j16 ``` 完成后,还需修改LCD配置(以正点原子4.3寸LCD ATK4348为例,可在开发指南找到相应信息,这里是31M像素时钟,算得pixclock = 32258,修改其它参数),修改头文件(include/configs)。烧写时,开发板要修改环境变量,修改网卡驱动,修改PHY网络地址(include/configs),删除74LV595驱动代码等 [^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值