支持的芯片
概述
RTL8721F 集成了液晶显示控制器 (LCDC) , 支持标准 RGB 并行和 I80 (MCU) 接口。其高度可配置性和内置的像素格式转换器,使其能够适应多种显示面板和分辨率,简化了设计和应用。
功能特性
接口支持
RGB 接口
6 位 RGB (RGB565)
8 位 RGB (RGB888)
16 位 RGB (RGB565)
24 位 RGB (RGB888)
I80 接口
8 位 RGB (RGB565)
8 位 RGB (RGB888)
16 位 RGB (RGB565)
24 位 RGB (RGB888)
像素格式转换器
支持在内存中的像素格式与接口数据格式之间的实时转换。
可编程的面板时序控制
具有可调节的时序及极性参数,满足不同时序需求。
RGB 接口时序 :
时序参数:VSW, VBP, VFP, HSW, HBP 和 HFP 宽度
极性参数:HSYNC, VSYNC, DE, DCLK
MCU 接口时序 :
时序参数:RD 宽度, WR 宽度, TE 延迟, VSYNC 周期
极性参数:RD, WR, RS, CS, TE, VSYNC
多种中断类型支持
提供细致的中断管理功能,以适应高效的事件响应需求:
帧开始中断
帧结束中断
行命中中断
TE (Tearing Effect)信号中断
FIFO 欠载中断 (underflow)
LCDC 工作模式
RGB/SRGB 接口模式
RGB LCD 与 SRGB LCD 的区别
在传输一组像素时,所需的时钟周期数量有所不同。以 RGB888 颜色格式为例进行说明:
RGB LCD : 在 24-bit 接口宽度时,传输一组 RGB888 像素仅需
一个
DCLK 周期 。SRGB LCD : 在 8-bit 接口宽度时,传输一组 RGB888 像素需要
三个
DCLK 周期 。
除此之外,RGB LCD 和 SRGB LCD 之间无其他显著区别。在后续内容中,将统一采用“RGB LCD”进行表述,除非特别说明。
帧同步方式
提供两种帧同步模式,可依据 LCD 时序要求进行灵活选择:
HV 模式:通过 HSYNC 和 VSYNC 信号同步。
DE 模式:通过 DE 信号同步。
备注
RGB LCD 初始化 :通常无需额外初始化;如需初始化,则需要使用额外接口(如 SPI )来配置命令及参数。
GRAM 存储位置:通常,RGB LCD 不具备内置 GRAM;因此需要主控设备提供 GRAM 来存储像素数据。
MCU 接口模式
支持 IO 和 DMA 模式
IO 模式:用于 LCD 的初始化操作。
DMA 模式:用于高效的像素数据传输。
预设命令
在每次通过 DMA 发送像素数据前,LCDC 自动发送预设命令:
支持最多 16 条预设命令。
备注
仅支持 8-bit 且不含参数的命令。
帧同步方式
TE 模式 :LCDC 在接收到 LCD 的 TE 信号后,会在预设的 TE 延迟时间之后发送像素数据,以减少或防止屏幕撕裂现象。
VSYNC 模式 :LCDC 基于内部的 VSYNC 信号,根据此信号的节奏发送像素数据到 LCD。
DMA 模式
RGB 与 MCU 接口模式,均支持以下两种 DMA 模式:
自动 DMA 模式 :
LCDC 自动从 GRAM 获取像素数据,将其发送至 LCD,无需软件参与。
触发 DMA 模式 :
通过软件操作寄存器,触发 LCDC 从 GRAM 中提取并传输像素数据到 LCD,提供灵活的数据传输控制。
开发流程
首先,需要查阅 LCD 手册以确认其接口类型,从而确定 LCDC 的接口模式。
RGB LCD 开发流程
硬件配置
确认关键参数
查阅 LCD 手册,以确认
接口位宽
、颜色格式
以及同步方式
等关键信息。
选择可用引脚
根据引脚复用表,选择合适的引脚用于连接。
连接信号线
将选定的引脚连接至 LCD 的对应信号线上。视 LCD 具体型号需要连接的信号可能有所不同。以下是一个可能的引脚连接示例:
PIN
Description
PB_28
LCD_D0 (B0)
PB_30
LCD_D1
...
...
PA_19
LCD_D6
PA_28
LCD_D7 (B7)
PA_29
LCD_D8 (G0)
PB_15
LCD_D9
...
...
PA_27
LCD_D14
PB_26
LCD_D15 (G7)
PA_16
LCD_D16 (R0)
PA_17
LCD_D17
...
...
PA_31
LCD_D23 (R7)
PB_14
LCD_HSYNC
PB_18
LCD_VSYNC
PB_0
LCD_DCLK
PB_23
LCD_DE
PC_1
LCD_BLE
软件配置
引脚复用配置
通用信号
对于 背光 和 硬件复位 等通用信号,可使用 GPIO 控制。
RGB 接口时序信号
请参考 引脚复用,调用
Pinmux_Config(PinName, FuncId)
进行配置。
备注
接口位宽最大支持 24-bit;
当接口位宽小于 24-bit 时,Function-ID 需从 LCD_D0 开始使用。
例如,对于 16-bit RGB565,Function-ID 仅支持 LCD_D0~LCD_D15,不支持 LCD_D8~LCD_D23。
分配 GRAM 并填充像素数据
需记录分配的内存首地址(如 0x60001000),以便在步骤 5 中配置给 LCDC。
使能 LCDC 功能及时钟
LCDC_RccEnable()
根据 LCD 手册初始化 LCDC
获取并配置以下信息:接口宽度、图像分辨率、像素格式、HV 参数(vsw, vbp, vfp, hsw, hbp, hfp)、信号极性等。
备注
接口宽度与输出像素格式需在 接口支持 范围内配置,否则可能无法显示。
帧率不能低于 LCD 要求,否则可能无法显示。
示例配置(24-bit RGB888,480x800):
void LCDC_RGBStructInit(LCDC_RGBInitTypeDef *LCDC_RGBInitStruct) { /* 配置 LCD 参数 */ LCDC_RGBInitStruct->Panel_Init.IfWidth = LCDC_RGB_IF_24_BIT; LCDC_RGBInitStruct->Panel_Init.ImgHeight = 480; LCDC_RGBInitStruct->Panel_Init.ImgWidth = 800; LCDC_RGBInitStruct->Panel_Init.InputFormat = LCDC_INPUT_FORMAT_RGB888; LCDC_RGBInitStruct->Panel_Init.OutputFormat = LCDC_OUTPUT_FORMAT_RGB888; LCDC_RGBInitStruct->Panel_Init.RGBRefreshFreq = 35; /* 配置信号 H/V 参数 */ LCDC_RGBInitStruct->Panel_RgbTiming.RgbVsw = 1; LCDC_RGBInitStruct->Panel_RgbTiming.RgbVbp = 4; LCDC_RGBInitStruct->Panel_RgbTiming.RgbVfp = 6; LCDC_RGBInitStruct->Panel_RgbTiming.RgbHsw = 4; LCDC_RGBInitStruct->Panel_RgbTiming.RgbHbp = 40; LCDC_RGBInitStruct->Panel_RgbTiming.RgbHfp = 40; /* 配置信号极性 */ LCDC_RGBInitStruct->Panel_RgbTiming.Flags.RgbEnPolar = LCDC_RGB_EN_PUL_HIGH_LEV_ACTIVE; LCDC_RGBInitStruct->Panel_RgbTiming.Flags.RgbHsPolar = LCDC_RGB_HS_PUL_LOW_LEV_SYNC; LCDC_RGBInitStruct->Panel_RgbTiming.Flags.RgbVsPolar = LCDC_RGB_VS_PUL_LOW_LEV_SYNC; LCDC_RGBInitStruct->Panel_RgbTiming.Flags.RgbDclkActvEdge = LCDC_RGB_DCLK_FALLING_EDGE_FETCH; } /* 初始化 LCDC */ LCDC_RGBInit(LCDC, &LCDC_RGBInitStruct);
根据步骤 2 分配的地址,配置给 LCDC
LCDC_DMAImgCfg(LCDC, 0x60001000);
使能 LCDC
LCDC_Cmd(LCDC, ENABLE);
备注
如果 LCD 需要初始化操作,请根据其指定通信接口补充以下配置:
硬件配置
保证 Ameba 的通信引脚正确连接至 LCD 的通信信号。
软件配置
初始化通信接口。
发送 LCD 初始命令序列。
MCU LCD 开发流程
硬件配置
确认关键参数
查阅 LCD 手册以确认
接口位宽
、颜色格式
以及同步方式
等必要信息。
选择可用引脚
参照引脚复用表,选择适合的引脚进行连接。
连接信号线
将所选引脚连接到 LCD 的对应信号线上。根据所选 LCD,可能需要连接的信号会有所不同。以下是一个可能的引脚连接示例:
PIN
Description
PB_31
LCD_D0 (B0)
PB_29
LCD_D1
...
...
PB_18
LCD_D6
PB_14
LCD_D7 (B7)
PB_13
LCD_D8 (G0)
PB_0
LCD_D9
...
...
PA_22
LCD_D14
PA_21
LCD_D15 (G7)
PC_0
LCD_D16 (R0)
PB_30
LCD_D17
...
...
PB_21
LCD_D22
PB_17
LCD_D23 (R7)
PA_30
LCD_MCU_DCX
PA_31
LCD_MCU_WR
PA_29
LCD_MCU_RD
PB_15
LCD_MCU_CSX
PC_1
LCD_BLE
软件配置
引脚复用配置
通用信号
背光和硬件复位等通用信号可通过 GPIO 进行控制。
MCU 接口时序信号
请参考 引脚复用 章节,依次调用
Pinmux_Config(PinName, FuncId)
进行必要的配置。
备注
接口位宽最大支持 24-bit;
当接口位宽小于 24-bit 时,Function-ID 需从 LCD_D0 开始使用。
例如,对于 16-bit RGB565,Function-ID 仅支持 LCD_D0~LCD_D15,不支持 LCD_D8~LCD_D23。
分配 GRAM 并填充像素数据
记录分配到的内存首地址(如 0x60001000)以供后续配置给 LCDC。
使能 LCDC 功能和时钟
LCDC_RccEnable()
初始化 MCU 进入 IO 模式
请查阅 LCD 手册,进行如下配置。
void LCDC_MCUStructInit(LCDC_MCUInitTypeDef *LCDC_MCUInitStruct) { /* 配置面板参数 */ LCDC_MCUInitStruct->Panel_Init.IfWidth = LCDC_MCU_IF_8_BIT; LCDC_MCUInitStruct->Panel_Init.ImgWidth = 240; LCDC_MCUInitStruct->Panel_Init.ImgHeight = 320; LCDC_MCUInitStruct->Panel_Init.InputFormat = LCDC_INPUT_FORMAT_RGB565; LCDC_MCUInitStruct->Panel_Init.OutputFormat = LCDC_OUTPUT_FORMAT_RGB565; /* 配置信号极性 */ LCDC_MCUInitStruct->Panel_McuTiming.McuRdPolar = LCDC_MCU_RD_PUL_RISING_EDGE_FETCH; LCDC_MCUInitStruct->Panel_McuTiming.McuWrPolar = LCDC_MCU_WR_PUL_RISING_EDGE_FETCH; LCDC_MCUInitStruct->Panel_McuTiming.McuRsPolar = LCDC_MCU_RS_PUL_LOW_LEV_CMD_ADDR; LCDC_MCUInitStruct->Panel_McuTiming.McuTePolar = LCDC_MCU_TE_PUL_LOW_LEV_ACTIVE; LCDC_MCUInitStruct->Panel_McuTiming.McuSyncPolar = LCDC_MCU_VSYNC_PUL_LOW_LEV_ACTIVE; } /* 初始化 LCDC */ LCDC_MCUInit(LCDC, &LCDC_MCUInitStruct); /* 使能 LCDC */ LCDC_Cmd(LCDC, ENABLE);
发送命令序列以初始化 LCD
发送命令和参数的接口分别为:
/* 发送命令 */ LCDC_MCUIOWriteCmd(LCDC, cmd);
/* 发送命令参数 */ LCDC_MCUIOWriteData(LCDC, data);
小心
请设置正确的初始化序列,否则可能无法正常显示。
设置预设命令,以写 Ram 的命令码 0x2C 为例
/* 设置预设命令: write_ram */ u8 wram_cmd = 0x2C; LCDC_MCUSetPreCmd(LCDC, &wram_cmd, 1);
切换 IO 模式至 DMA 模式
/* 关闭 LCDC */ LCDC_Cmd(LCDC, DISABLE); Lcdc_McuDmaCfgDef LCDC_MCUDmaCfgStruct; /* 设定同步方式 */ LCDC_MCUDmaCfgStruct.TeMode = 0; /* DISABLE */ /* 设定 DMA 模式 */ LCDC_MCUDmaCfgStruct.TriggerDma = LCDC_TRIGGER_DMA_MODE; LCDC_MCUDmaMode(LCDC, &LCDC_MCUDmaCfgStruct);
根据步骤 2 分配的地址,配置给 LCDC
LCDC_DMAImgCfg(LCDC, 0x60001000);
使能 LCDC
LCDC_Cmd(LCDC, ENABLE);
在需要更新像素数据时,触发 LCDC 发送像素数据
LCDC_MCUDMATrigger(LCDC);
应用示例
SDK 提供了如下功能示例,帮助开发者了解和使用 LCDC 功能:
raw_lcdc_display_rgb_st7262 演示如何使用
RGB 接口
DMA自动模式
驱动 RGB LCD;raw_lcdc_display_srgb_st7272a 演示如何使用 RGB 接口驱动
SRGB LCD
;raw_lcdc_display_mcu_ili9806 演示如何使用
MCU 接口
DMA触发模式
驱动 MCU LCD。
备注
要了解示例支持的芯片,请查看示例路径下的 README.md
文件。
API 参考
要详细了解和使用相关 API,请参阅 {SDK}\component\soc\amebaxxxx\fwlib\include\ameba_lcdc.h
。
常见问题排查
LCD 没有显示内容
背光电压检查
确认背光电压是否符合 LCD 手册中的要求。
输出像素格式与接口位宽匹配
确认配置的输出像素格式与接口位宽是否匹配 接口支持。
帧率设置
确保配置的帧率达到 LCD 的最低要求。
RGB LCD 专用检查
确认信号 HV 参数与信号极性符合 LCD 要求。
MCU LCD 专用检查
验证初始化命令序列是否正确发送并符合 LCD 手册的要求。
LCD 显示内容不符合预期
像素数据验证
检查内存中存储的像素数据,通过 dump 方法确认其与预期写入的内容一致。
像素格式设定
检查内存中的像素数据,与接口数据的转换是否符合预期。
LCD 显示抖动较严重
帧率调整
如果帧率设置过快,尝试降低帧率,观察抖动现象是否得到改善。