ILI9341的使用之【四】RGB接口操作详解

2023-05-16

《ILI9341的使用之【一】TFT-LCD原理(转载)》
《ILI9341的使用之【二】ILI9341介绍》
《ILI9341的使用之【三】ILI9341系统通信接口模式操作详解》
《ILI9341的使用之【四】RGB接口操作详解》
《ILI9341的使用之【五】命令一》
《ILI9341的使用之【六】命令二》
《ILI9341的使用之【七】实体面板案例-arduino 2.4inch TFT Touch Shield》
《ILI9341的使用之【八】ASCII字符显示及驱动分析》
《ILI9341的使用之【九】BG2312字库》

一、RGB接口的选择

ILI9341有两种RGB接口,分别是DE模式SYNC模式。通过设置RCM[1:0]bits位(此为指令B0h-RGB Interface Signal Control的参数),实现接口类型的选择。当RCM[1:0]=‘10’时,包含VSYNC、HSYNC、DOTCLK、DE、D[17:0]些引脚的DE模式被选择。当RCM[1:0]='11’时,包含VSYNC、HSYNC、DOTCLK,D[17:0]引脚的SYNC模式被选择。(见下表)
说明: DE(Data Enable);SYNC(SYNChronization)
注意:RGB模式是工作在串行接口模式下的。
象素格式: ILI9341支持多种的象素格式,这可以通过设置“Pixel Format set (3Ah)”指令中的DPI[2:0] 位和“Interface Control(F6h)”指令中的RIM位进行选择。RCM[1:0] 是在"RGB Interface Signal Control(B0h)"指令中进行设置。
在这里插入图片描述
下图为SYNC模式下的像素颜色格式:
在这里插入图片描述
像素时钟(DOTCLK)会一直不停运行。当DOTCLK上升沿时会引入VSYNC,HSYNC,DE和D[17:0]状态值。
VSYNC(垂直同步)引脚,被用于标识什么时候收到一个新的显示帧数据。该引脚是低电平有效。并且该 状态在DOTCLK上升沿时被读入显示模块。

HSYNC(水平同步)引脚,被用于标识什么时候收到一个帧的新行。该引脚是低电平有效。并且该 状态在DOTCLK上升沿时被读入显示模块。

在DE模式中,DE(Data Enable)信号用来标识什么时候接收到了将被显示的RGB信息。该信号是高电平有效,它的状态在DOTCLK上升沿时被显示模块读取。

D[17:0]被用来传送用来显示的图像信息。当DE=0并且在DOTCLK上升沿时被读入。

在SYNC模式中,有效的显示数据是经由D[17:0]以像素数据输入的。该数据的格式是根据HSYNC信号的HFP/HBP设置的和VSYNC信号的VFP/VBP设置的。(vFP/VBP,HFP/HBP的含义如下图所述,设置的指令为B5h-Blanking Porch Control)
在这两种RGB模式中,输出的显示数据首先被写入GRAM中,然后再从GRAM中根据灰度数据输出相应的源极电压。
在这里插入图片描述
在这里插入图片描述
一般240*320分辨率的面板所使用的标准参数值为,6.35MHZ 时钟频率和70HZ的帧刷新率。
注意:
1、Vertical垂直的周期(一帧one frame)的值 为:Vsync + VBP + VAdr + VFP
2、Horizontal水平周期(一线one line)的值为: Hsync + HBP + HAdr + HFP.
3、在所有主控制器与显示模块之间传送像素值的时间里,控制信号PCLK和Hsync将按规定传送

同时也要确保
(Number of PCLK per 1 line) ≥ (Number of RTN clock) x Division ratio (DIV) x PCDIV

RGB接口操作显示控制时钟设置示例:
使用DPI的寄存器显示操作与内部时钟PCLKD同步,PCLKD是通过对DOTCLK分频产生的。
PCDIV[5:0]:在内部时钟PCLKD的一个高/低周期间的DOTCLK时钟的个数。PCDIV是指令B6h(Display Function Control)定义的参数。
在这里插入图片描述

PCDIV指定了DOTCLK脉冲的分频率,它决定于PCLKD的频率与内部615KHZ振荡时钟有多少差异。根据下面的约束设置PCDIV:
(Number of PCLK in 1H) ≥ (Number of RTN clock) x Division ratio (DIV) x PCDIV

设置实例: 设置帧刷新率为 70Hz:
Internal Clock
Internal Oscillation Clock: 615KHz
DIV[1:0] = 00 (1倍的时钟615KHZ)
RTN[4:0] = 1b (27 clocks)
FP = 7’h2 (2 lines), BP = 7’h2 (2 lines), NL = 6’h27 (320 lines)
(说明:VFP,VBP 指令B5h Blanking Porch Control的参数。NL为指令B6h Display Function Control的参数)
Frame Rate : 70.30Hz

DOTCLK
HSYNC = 10 CLK
HBP = 20 CLK
HFP=10 CLK
(说明:HFP,HBP 指令B5h Blanking Porch Control的参数。)
70Hz x (2 + 320 + 2) lines x (10 + 20 + 240 + 10) clocks = 6.35MHz
DOTCLK frequency = 6.35MHz
6.35 MHz / 615KHz = 10.32 I Set PCDIV so that PCLK is divided by 10.
external fosc = 6.35 MHz / 10 = 635KHz
PCDIV = [ 6.35MHz / 635KHz) / 2 ] - 1 = 4
PCDIV[5:0] = 6’h04 (10 DOTCLK)

二、RGB接口时序

以下为18/16bit RGB 接口模式的时序图解:
在这里插入图片描述
在这里插入图片描述
注意1:在RGB接口的SYNC模式下,不需要DE信号
注意2:”interface Mode Control(B0h)“命令的这几个参数取值:VSPL,HSPL,DPL,EPL都 为0。

下面为6-bit RGB接口模式的进序图解:
在这里插入图片描述
在这里插入图片描述
注意1:在RGB接口的SYNC模式下,不需要DE信号
注意2:”interface Mode Control(B0h)“命令的这几个参数取值:VSPL,HSPL,DPL,EPL都 为0。
注意3:在6-bit RGB 接口模式下,一个像素的每个点(R,G,B)是与DOTCLK同步传送
注意4::在6位RGB接口模式下,将VSYNC、HSYNC、DE的周期设置为DOTCLK的3倍。

三、VSYNC接口

ILI9341支持VSYNC接口模式,该模式是由引脚VSYNC提供帧同步信号。该模式是通过8080-I/8080-II系列MCU接口来显示动图。当VSYNC接口被选择用来显示一个动图时,GRAM的最小更新速度是有限制的,并且VSYNC接口是由DM[1:0]=‘10’ 和 RM='0’两个参数设置使能的。
以上提到的两个参数由指令F6h(Interface Control)中的DM[1:0](Display Operation Mode)参数和RM(Inerface for RAM Access)参数设置,
在这里插入图片描述
在VSYNC模式下,显示操作是与内部时钟和VSYNC引脚的输入相同步的。帧的刷新率决定于VSYNC信息号的脉冲速率。所有的显示数据都存储在GRAM使动图显示的传送需要的总数据最小化。
在这里插入图片描述
在这里插入图片描述
VSYNC接口对经由系统接口向内部GRAM写入数据的速度是有最小速度限制的。通过下面的公式进行计算:
Internal clock frequency (fosc.) [Hz] = FrameFrequency x (DisplayLine (NL) + FrontPorch (VFP) + BackPorch (VBP)) x ClockCyclePerLines (RTN) x FrequencyFluctuation.

在这里插入图片描述
注意:当RAM写操作不是从VSYNC的下降沿开始的,则从VSYNC的下降沿开始到RAM写操作开始的这段时间也必须计算在内。

以下是一个GRAM最小写速度和VSYNC接口模式下内部时钟频率的实例:
在这里插入图片描述
在计算内部时钟频率时,必须要考虑到振荡器的变化。在上面的例子中,考虑到计算的内部时钟频率有±10%的裕度变化并且要确保在一个垂VSYNC周期内完成显示操作。频率变化的原因主要有大规模集成电路的制造工艺、室温、外部电阻和VCI电压的变化。

Minimum speed for RAM writing [Hz] > 240 x 320 x 748K / [ (2 + 320 – 2)lines x 27clocks] ≒ 6.65 MHz

计算上述理论值的前提是ILI9341在VSYNC下降沿开始写入内部GRAM。物理显示行和执行数据写入操作的GRAM地址之间必须至少有2行空白。GRAM以6.35MHZ或更高的写速度将保证GRAM的写入操作能在ILI9341开始在屏幕上显示GRAM数据之前完成,并且能在不出现闪烁的前提下重定整个屏幕。

使用VSYNC接口时注意如下:
1、最小的GRAM写速率必须被满足。并且必须要考虑频率的变化。
2、帧的显示速率决定于VSYNC信号,以及VSYNC的周期必须长于完全显示的扫描周期。
3、当从内部时钟操作模式(DM[1:0]=‘00’)切换到 VSYNC接口模式,或反相。这个切换应从下一个VSYNC周期 ,也即,在一个帧完全显示 后。
4、在垂直同步界面模式下,不支持部分显示、垂直滚动和隔行扫描功能。

在这里插入图片描述

四、色深转换查询表(省略)

五、DDRAM(Display Data RAM)

ILI9341集成了240x320x18位图形型静态RAM。这172,800字节的内存允许存储一幅240xRGBx320图像,18位分辨率(262K-color)。当对帧存储器的同一位置同时进行面板显示读和接口读/写时,显示器上不会有异常可见效果。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ILI9341的使用之【四】RGB接口操作详解 的相关文章

  • 两个不常见的PHP运算符一起使用来获取图像像素颜色,请解释

    The PHP 图像颜色 http www php net manual en function imagecolorat php函数可用于获取图像像素的 RGB 值 如文档中所示 im imagecreatefrompng php png
  • 在java中查找RGB的按位版本

    我有以下方法获取 rgb 值并使用较小的调色板对其进行分类 private static int roundToNearestColor int rgb int nrColors int red rgb gt gt 16 0xFF int
  • 如何转换 RGB -> YUV -> RGB(双向)

    我想要一对转换算法 一个从 RGB 到 YUV 另一个从 YUV 到 RGB 它们彼此相反 也就是说 往返转换应保持该值不变 如果愿意 可以将 YUV 替换为 Y UV YUV YCbCr YPbPr 这样的事情存在吗 如果是这样 那是什么
  • 如何将 YUV420p 转换成 RGB 用于 ffmpeg 编码器?

    我想使用 C 代码从位图图像制作 avi 视频文件 我写了以下代码 Get RGB array data from bmp file uint8 t rgb24Data new uint8 t 3 imgWidth imgHeight hB
  • 如何在Android上更快地将RGB565转换为YUV420SP?

    我需要显示一张jpeg图片 并将其转换为YUV420SP 首先我使用SkBitmap解析jpeg并显示它 然后我使用下面的代码在android上将RGB565转换为YUV420SP 但是转换640 480 RGB565图片花费了75ms 所
  • 如何将图像转换为灰度?

    我想通过代码 android 做与上图完全相同的事情 但我对执行此操作的算法感到困惑 我所知道的是 对于每个像素 将 RGB 转换为 HSL 将 HSL 转换回 RGB 谁能帮我解释一下第 2 步要做什么 非常感谢 ps 我可以通过 Col
  • 手动将 RGB 转换为灰度

    我想手动将 RGB 图像转换为灰度图像 而无需在张量流中使用库 所以我写了以下内容 import tensorflow as tf import matplotlib image as mpimg import matplotlib pyp
  • 可见光谱的RGB值

    I need an algorithm or function to map each wavelength of visible range of spectrum to its equivalent RGB values Is ther
  • 从图像中提取红色通道

    我有一个图像为 X RGB 我想使用 Imagick 从中获取红色通道的图像 我尝试参考http www imagemagick org Usage quantize http www imagemagick org Usage quant
  • 使用GL着色器语言的相机帧yuv到rgb转换

    我从字节数组中的 android 相机预览回调获取相机帧并将其传递给 jni 代码 由于我们不能在 C 中使用字节 因此我将其转换为整数数组 如下所示 JNIEXPORT void JNICALL Java com omobio armad
  • 获取 RGB 颜色并使用 iPhone 上的 UIColor 对其进行标准化

    我正在寻找一种直接的方法来从 RGB 转换颜色 从 Photoshop 等工具中获取它 然后将其转换为 UIColor 由于 UIColor 对每个颜色空间使用 0 0 到 1 0 的标准化色域 因此我不确定这是如何完成的 感谢您的解决方案
  • 使用 Android 相机进行图像处理

    我想使用 onPreviewFrame 在将图像显示给用户之前对其进行后处理 即应用色调 棕褐色等 据我了解 返回给回调的 byte 数据以 YUV420sp 编码 人们是否已经在 J ava 中或使用 NDK 本机代码 将其解码为 RGB
  • java中RGB转灰度、bmp图像

    我的老师给我们布置了一个任务 要制作一个采用 640x480 bmp 彩色图像的课程 将其转换为灰度图像 我找到了一些有想法的资源 所以我做到了 但是有一个问题 因为它似乎使它不会给我错误 但输出没有出现 我认为这是我的代码 我的代码是 i
  • 在Python中将十六进制值转换为RGB值

    在这里处理杰里米的回应 将十六进制颜色转换为 RGB 反之亦然 https stackoverflow com questions 214359 converting hex color to rgb and vice versa我能够获得
  • 将专用 NV12 视频帧转换为 RGB

    我有一个使用 Android MediaCodec 解码的 H264 流 当我查询输出 MediaFormat 时 颜色格式为 2141391875 显然 这是一种专门的 NV12 变体 称为 HAL PIXEL FORMAT NV12 A
  • 如何使用Python将RGB565字节数组转换为RGB888字节数组?

    根据我的问题RGB888 转 RGB565 https stackoverflow com questions 61519934 how can i use opencv python to convert rgb888 to rgb565
  • 如何使用 IPP 将 RGB 颜色空间转换为 NV12 颜色空间

    英特尔 Media SDK 等视频编码器需要 NV12 视频输入格式 NV12格式 http www fourcc org yuv php NV12是 YUV 4 2 0 格式 在内存中排序 首先是 Y 平面 然后是交错 UV 平面中的打包
  • Alpha 混合红色、蓝色和绿色图像以生成着色为任何 RGB 值的图像?

    基本上 我有一个上下文 我无法以编程方式对图像进行着色 尽管我可以更改它的 alpha 值 通过一些实验 我发现我可以使用特定的 alpha 值对图像的红色 蓝色和绿色版本进行分层 以产生各种颜色 但是我想知道是否可以通过这种方法实现真正
  • 如何重置捕获像素的值

    我正在尝试创建一个 C 函数 该函数返回屏幕截图位图中每四个像素的 R G 和 B 值 这是我的代码的一部分 for int ix 4 ix lt 1366 ix ix 4 x x 4 for int iy 3 iy lt 768 iy i
  • rgb() 和 rgba() 不透明度有什么区别?

    我发现另一个关于 rgb 与 rgba 的问题非常相似 但它缺少关于使用的答案RGB 不透明度 我知道两者之间的区别 rgba 只是 rgb 但带有 alpha 不透明度 问题是 我使用带有不透明度值的 RGB 已经有几个月甚至几年了 它一

随机推荐